Sur gcc, le manuel explique ce -O3
, -Os
etc. traduire en termes d'arguments d'optimisation spécifique ( -funswitch-loops
, -fcompare-elim
, etc.)
Je cherche les mêmes informations pour clang .
J'ai regardé en ligne et dans man clang
lequel ne donne que des informations générales ( -O2
optimise plus que -O1
, -Os
optimise pour la vitesse, ...) et j'ai également regardé ici sur Stack Overflow et j'ai trouvé cela , mais je n'ai rien trouvé de pertinent dans les fichiers source cités.
Edit: J'ai trouvé une réponse mais je suis toujours intéressé si quelqu'un a un lien vers un manuel d'utilisation documentant toutes les passes d'optimisation et les passes sélectionnées par . Actuellement, je viens de trouver cette liste de passes, mais rien sur les niveaux d'optimisation.-Ox
-simplifycfg
se répètent?simplifycfg
sont requises par plusieurs passes. Etdebug-pass=Arguments
cela se produit probablement avant la déduplication. J'ai supprimé les doublons dans ma réponse, merci pour vos commentaires.-Og
un la GCC maintenant; 2. Toutes les spécificités des anciennes versions sont-elles encore nécessaires? 3. Je pense que compte tenu des beaux changements qui ont été apportés au fil des ans et du statut de la communauté, je vais réduire ma réponse en mentionnant simplement des choses commeclang -cc1 -mllvm -help-list-hidden
(sauf si vous préférez l'intégrer).La réponse de @ Antoine (et l'autre question liée) décrivent avec précision les optimisations LLVM qui sont activées, mais il existe quelques autres options spécifiques à Clang (c'est-à-dire celles qui affectent l'abaissement à l'AST) qui sont affectées par les
-O[0|1|2|3|fast]
indicateurs.Vous pouvez jeter un œil à ceux-ci avec:
echo 'int;' | clang -xc -O0 - -o /dev/null -\#\#\#
echo 'int;' | clang -xc -O1 - -o /dev/null -\#\#\#
echo 'int;' | clang -xc -O2 - -o /dev/null -\#\#\#
echo 'int;' | clang -xc -O3 - -o /dev/null -\#\#\#
echo 'int;' | clang -xc -Ofast - -o /dev/null -\#\#\#
Par exemple,
-O0
permet-mrelax-all
,-O1
permet-vectorize-loops
et-vectorize-slp
, et-Ofast
permet-menable-no-infs
,-menable-no-nans
,-menable-unsafe-fp-math
,-ffp-contract=fast
et-ffast-math
.@Techogrebo:
Oui, non, vous n'avez pas nécessairement besoin des autres outils LLVM. Essayer:
echo 'int;' | clang -xc - -o /dev/null -mllvm -print-all-options
En outre, il existe des options beaucoup plus détaillées que vous pouvez examiner / modifier avec Clang seul ... il vous suffit de savoir comment y accéder!
Essayez quelques-unes de:
clang -help
clang -cc1 -help
clang -cc1 -mllvm -help
clang -cc1 -mllvm -help-list-hidden
clang -cc1as -help
la source
LLVM 3.6 -O1
Arguments de réussite:-targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -notti -verify-di -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -toujours -inline -functionattrs -sroa -domtree -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -l -rotate -licm -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom -loop-deletion -function_tti -loop-unroll -memdep -memcpyopt -sccp -domtree -instcombine -lazy-value -info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -domtree -instcombine -barrier -domtree -loops -loop-simplify -lcssa -branch-prob -block-freq -scalar-evolution -loop -vectorize -instcombine-simplifycfg -domtree -instcombine -loops -loop-simplify -lcssa -scalar-evolution -function_tti -loop-unroll -alignment-from-assumptions -strip-dead-prototypes -verify -verify-di
-O2 base sur -O1
ajouter: -inline -mldst-motion -domtree -memdep -gvn -memdep -scalar-evolution -slp-vectorizer -globaldce -constmerge
et supprime: -always-inline
-O3 basé sur -O2
ajouter: -argpromotion
la source