当我阅读Adrian关于调用自定义LLVM传递的指令时,我感到困惑:
clang -c -emit-llvm code.c
将每个源文件编译为bitcode。opt -load mypass.so -mypass < code.bc > code_inst.bc
。opt -O3 < code_inst.bc > code_opt.bc
运行其余的标准优化。为什么第3步必要?这是否意味着第2步只会调用&#34; maypass&#34;并省略所有其他系统默认通行证?
如果是这样,有没有办法同时运行&#34; mypass&#34;并且所有系统默认值都在一个opt命令中传递?
答案 0 :(得分:0)
根据我的实验,
我可以确认第2步只会调用&#34; mypass&#34;。
如果您使用
opt -O3 -load mypass.so -mypass&lt; code_inst.bc&gt; code_opt.bc
Opt将首先调用内置的pass,然后&#34; mypass&#34;。
如果您使用
opt -load mypass.so -mypass -O3&lt; code_inst.bc&gt; code_opt.bc
Opt将首先调用&#34; mypass&#34;,然后是内置的传递。
总之,它与manual:
一致- {passname}
opt提供了以任何顺序运行LLVM的任何优化或分析过程的能力。 -help选项列出了所有可用的传递。选项在命令行中出现的顺序是它们的执行顺序(在传递约束内)。
特别是&#34; -O3&#34;可以被理解为一组预定义的通行证。