LLVM传递的内容是在发出的LLVM IR上执行的?

时间:2018-04-27 19:04:09

标签: rust llvm rust-cargo

如果我使用cargo rustc -- --emit=llvm-ir进行编译,编译器将发出LLVM IR。

Here are the LLVM passes that Rust uses.已经对发出的IR执行了LLVM传递的内容(如果有的话)?

有没有办法在发出IR之前指定你想要执行的传递?

1 个答案:

答案 0 :(得分:2)

  

在发射的IR上执行了LLVM传递的内容(如果有的话)?

如果您使用的是夜间编译器,则可以使用-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,可用于稳定的rustc。但是,如果没有-Z no-parallel-llvm,则输出非常难以理解。)

  

有没有办法在发出IR之前指定你想要执行的传递?

您可以使用-C passes argument附加其他通行证。您也可以使用-C no-prepopulate-passes清除默认优化次数。例如:

$ rustc -C passes=print-alias-sets 1.rs

Alias sets for function 'Alias sets for function '_ZN3std3sys4unix7process14process_common8ExitCode6as_i3217h65e06df78d6f4a47E':
_ZN3std2rt10lang_start17hd8fe8cd552faf2aaE':
...