LLVM的opt优化器的"–debug-pass"选项的用处
opt
是LLVM的优化器和分析器,它接受LLVM IR或者LLVM字节码作为优化的输入文件。
我们可以直接为opt
指定pass在输入的代码上处理运行,pass可以是预定义的也可以是自定义的,预定义的pass可以查看http://llvm.org/docs/Passes.html 。
如果需要查看opt
处理中代码过程中使用了哪些优化pass,可以结合opt
使用--debug-pass=Structure
选项。下面是一个小例子:
// file: /tmp/1.c
int foo(int aa, int bb, int cc) {
int sum = aa + bb;
return sum / cc;
}
int main(){
foo(1,2,3);
return 0;
}
执行命令:
clang -S -emit-llvm /tmp/1.c -o /tmp/1.ll
opt --debug-pass=Structure /tmp/1.ll
输出结果:
Pass Arguments: -targetlibinfo -tti -verify
Target Library Information
Target Transform Information
ModulePass Manager
FunctionPass Manager
Module Verifier
Pass Arguments
显示了给opt
工具传递了哪些参数。接下来的显示了有哪些pass被运行了。
ModulePass Manager
其后的pass都将在每个模块级运行
FunctionPass Manager
其后的pass都将在每个函数级运行,上面结果中Module Verifier
将在每个函数运行。