En gcc, el manual explica qué -O3, -Osetc. traducir en términos de argumentos de optimización específica ( -funswitch-loops, -fcompare-elim, etc.)
Estoy buscando la misma información para clang .
Busqué en línea y en el man clangque solo brinda información general ( -O2optimiza más que -O1, -Osoptimiza para la velocidad,…) y también busqué aquí en Stack Overflow y encontré esto , pero no encontré nada relevante en los archivos fuente citados.
Editar: encontré una respuesta, pero todavía estoy interesado si alguien tiene un enlace a un manual de usuario que documente todos los pases de optimización y los pases seleccionados por . Actualmente, acabo de encontrar esta lista de pases, pero nada sobre los niveles de optimización.-Ox
fuente

-simplifycfgse repiten algunas banderas, como ?simplifycfges necesario para varios pases. Ydebug-pass=Argumentsprobablemente ocurre antes de la deduplicación. Eliminé los duplicados en mi respuesta, gracias por sus comentarios.-Oguna GCC; 2. ¿Siguen siendo necesarios todos los detalles de las versiones anteriores? 3. Creo que, dados los buenos cambios que se han realizado a lo largo de los años, y el estado de la comunidad, reduciré mi respuesta a solo mencionar cosas comoclang -cc1 -mllvm -help-list-hidden(a menos que prefieras integrarlo).La respuesta de @ Antoine (y la otra pregunta vinculada) describen con precisión las optimizaciones de LLVM que están habilitadas, pero hay algunas otras opciones específicas de Clang (es decir, aquellas que afectan la reducción al AST) que se ven afectadas por las
-O[0|1|2|3|fast]banderas.Puedes echar un vistazo a estos con:
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 -\#\#\#Por ejemplo,
-O0permite-mrelax-all,-O1permite-vectorize-loopsy-vectorize-slp, y-Ofastpermite-menable-no-infs,-menable-no-nans,-menable-unsafe-fp-math,-ffp-contract=fasty-ffast-math.@Techogrebo:
Sí, no, no necesariamente necesita las otras herramientas LLVM. Tratar:
echo 'int;' | clang -xc - -o /dev/null -mllvm -print-all-optionsAdemás, hay opciones mucho más detalladas que puede examinar / modificar solo con Clang ... ¡solo necesita saber cómo llegar a ellas!
Pruebe algunos de:
clang -helpclang -cc1 -helpclang -cc1 -mllvm -helpclang -cc1 -mllvm -help-list-hiddenclang -cc1as -helpfuente
LLVM 3.6 -O1
Pasar argumentos:-targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -notti -verify-di -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -siempre -inline -functionattrs -sroa -domtree -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop -rotar -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 -propagación-correlacionada -domtree -memdep -dse -adce -simplifycfg -domtree -instcombine -barrier -domtree -loops -loop-simplify -lcssa -branch-prob -block-freq -scalar-evolution -loop -vectorizar -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 en -O1
agregar: -inline -mldst-motion -domtree -memdep -gvn -memdep -scalar-evolution -slp-vectorizer -globaldce -constmerge
y elimina: -siempre-en línea
-O3 basado en -O2
añadir: -argpromotion
fuente