Pada gcc, manual menjelaskan apa -O3
, -Os
, dll menerjemahkan ke dalam hal argumen optimasi khusus ( -funswitch-loops
, -fcompare-elim
, dll)
Saya mencari info yang sama untuk dentang .
Saya telah melihat online dan man clang
yang hanya memberikan informasi umum ( -O2
mengoptimalkan lebih dari -O1
, -Os
mengoptimalkan kecepatan,…) dan juga melihat di Stack Overflow dan menemukan ini , tetapi saya belum menemukan sesuatu yang relevan dalam file sumber yang dikutip.
Sunting: Saya menemukan jawaban tetapi saya masih tertarik jika ada yang memiliki tautan ke panduan pengguna yang mendokumentasikan semua lolos pengoptimalan dan jalur yang dipilih oleh . Saat ini saya baru saja menemukan ini daftar berlalu, tapi tidak ada pada tingkat optimasi.-Ox
sumber
-simplifycfg
diulang?simplifycfg
diperlukan oleh beberapa lintasan. Dandebug-pass=Arguments
mungkin terjadi sebelum deduplikasi. Saya menghapus duplikat dalam jawaban saya, terima kasih atas tanggapan Anda.-Og
yang ala GCC; 2. Apakah semua spesifikasi untuk versi lama masih diperlukan? 3. Saya pikir dengan perubahan bagus yang telah dibuat selama bertahun-tahun, dan status komunitas, saya akan memotong jawaban saya hanya dengan menyebutkan hal-hal seperticlang -cc1 -mllvm -help-list-hidden
(kecuali Anda lebih suka mengintegrasikannya).Jawaban @ Antoine (dan pertanyaan lain yang ditautkan) secara akurat menjelaskan pengoptimalan LLVM yang diaktifkan, tetapi ada beberapa opsi khusus Clang lainnya (yaitu, yang memengaruhi penurunan ke AST) yang dipengaruhi oleh
-O[0|1|2|3|fast]
flag.Anda dapat melihat ini dengan:
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 -\#\#\#
Misalnya,
-O0
memungkinkan-mrelax-all
,-O1
memungkinkan-vectorize-loops
dan-vectorize-slp
, dan-Ofast
memungkinkan-menable-no-infs
,-menable-no-nans
,-menable-unsafe-fp-math
,-ffp-contract=fast
dan-ffast-math
.@Techogrebo:
Ya, tidak perlu alat LLVM lainnya. Mencoba:
echo 'int;' | clang -xc - -o /dev/null -mllvm -print-all-options
Selain itu, ada lebih banyak opsi mendetail yang dapat Anda periksa / modifikasi dengan Clang saja ... Anda hanya perlu tahu cara mengaksesnya!
Cobalah beberapa dari:
clang -help
clang -cc1 -help
clang -cc1 -mllvm -help
clang -cc1 -mllvm -help-list-hidden
clang -cc1as -help
sumber
LLVM 3.6 -O1
Lulus Argumen:-targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -notti -verify-di -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -selalu -inline -functionattrs -sroa -domtree -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtsa -loop -loop-sederhanakan -lcssa -loop -loop-sederhanakan -lcs -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-evolusi -loop -vektorisasi -instcombine-simplifycfg -domtree -instcombine -loops -loop-sederhanakan -lcssa -scalar-evolusion -function_tti -loop-unroll -alignment-from-assumptions -strip-dead-prototypes -verify -verify-di
-O2 berdasarkan -O1
tambahkan: -inline -mldst-motion -domtree -memdep -gvn -memdep -scalar-evolusi -slp-vectorizer -globaldce -constmerge
dan menghapus: -selalu-sebaris
-O3 berdasarkan -O2
tambahkan: -argpromotion
sumber