Какие проходы LLVM, если таковые имеются, были выполнены на излучаемом IR?
Если вы используете ночной компилятор, вы можете использовать -Z print-llvm-passes
, чтобы LLVM печатал, какие проходы выполняются. Я бы порекомендовал также ввести -Z no-parallel-llvm
и -C codegen-units=1
, чтобы сделать вывод более чистым и менее повторяющимся.
$ rustc -C codegen-units=1 -Z no-parallel-llvm -Z print-llvm-passes 1.rs
Pass Arguments: -tti -targetlibinfo -verify -ee-instrument
Target Transform Information
Target Library Information
FunctionPass Manager
Module Verifier
Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
Pass Arguments: -tti -assumption-cache-tracker -profile-summary-info -targetlibinfo -forceattrs -basiccg -always-inline
Target Transform Information
Assumption Cache Tracker
Profile summary info
Target Library Information
ModulePass Manager
Force set function attributes
CallGraph Construction
Call Graph SCC Pass Manager
Inliner for always_inline functions
...
(Флаг -Z print-llvm-passes
эквивалентен -C llvm-args=-debug-pass=Structure
, который можно использовать на стабильной ржавчине. Однако без -Z no-parallel-llvm
выходные данные совершенно нечитаемы.)
Есть ли способ указать, какие проходы вы хотели бы выполнить перед излучением IR?
Вы можете добавить дополнительные проходы, используя -C passes
аргумент . Вы также можете очистить проходы оптимизации по умолчанию с помощью -C no-prepopulate-passes
. Пример: * 1 027 *
$ rustc -C passes=print-alias-sets 1.rs
Alias sets for function 'Alias sets for function '_ZN3std3sys4unix7process14process_common8ExitCode6as_i3217h65e06df78d6f4a47E':
_ZN3std2rt10lang_start17hd8fe8cd552faf2aaE':
...