Какую оптимизацию выполняет LLVM? - PullRequest
11 голосов
/ 05 октября 2011

Я хотел бы конкретно знать, что соответствуют различным уровням оптимизации LLVM.

То есть я хотел бы знать, какие этапы оптимизации ИСПОЛЬЗУЮТСЯ ТОЧНО (вне внешнего интерфейса) и в каком порядке, когда я использую опции -0x для llvm (или clang или opt). «Человек» из соответствующих инструментов не предоставляет много информации по этому вопросу (в отличие от gcc's).

Мне известна эта полезная страница: http://llvm.org/docs/Passes.html,, но она не предоставляет никакой информации о параметрах "-Ox". Я искал некоторые варианты отладки или подробности (особенно с использованием информации из "opt --help"), но не смог найти ни одной полезной опции.

В качестве дополнения я заметил, проанализировав код, что все различные инструменты LLVM, а также Clang используют различные драйверы, которые анализируют опции по-своему. Все ли эти драйверы похожи по параметрам «-Ox»?

Редактировать : Я нашел опцию "-debug-pass = Arguments" для инструмента "opt", которая дает следующий вывод для опции "O1":

Pass Arguments:  -targetdata -no-aa -tbaa -targetlibinfo -basicaa -simplifycfg -domtree -scalarrepl -early-cse -lower-expect
Pass Arguments:  -targetlibinfo -targetdata -no-aa -tbaa -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg -basiccg -prune-eh -always-inline -functionattrs -scalarrepl-ssa -domtree -early-cse -simplify-libcalls -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -iv-users -indvars -loop-idiom -loop-deletion -loop-unroll -memdep -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -instcombine -strip-dead-prototypes -preverify -domtree -verify

Это близко к тому, что я хотел, но осталось два вопроса:

  • почему существует два списка?

  • есть ли подобная опция для других инструментов, особенно "лязг"? (согласно моим тестам "-debug-pass = Arguments" не работает с clang)

Редактировать : опция "-debug-pass = Structure" для инструмента "opt" дает еще более удобные для пользователя данные (от http://llvm.org/docs/WritingAnLLVMPass.html)

1 Ответ

11 голосов
/ 05 октября 2011

почему существует два списка?

Функциональные и модульные пропуски имеют свои собственные диспетчеры пропусков и распечатываются отдельно.

есть ли подобная опция для других инструментов, особенно "лязг"

С помощью clang вы можете использовать -mllvm -debug-pass = Arguments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...