LLVM – 使用clang自动运行自己的通行证
我为llvm写了一些自己的传递,以便与clang一起使用它们。
我将它们集成在llvm中(不是动态加载的)。 当我输入时,它们甚至列在Optimizations available:部分中:
opt --help-hidden
当我打电话给clang时,我想自动运行我自己的一个通行证作为最后一个 :
clang ./hello.bc -o ./hello
甚至用c代码:
clang ./hello.c -o ./hello
当我手动使用opt运行传递时,会生成修改后的ByteCode并将其写入新的.bc文件:
opt -my-pass ./hello_optimized.bc
当我用clang编译修改后的.bc时,会再次运行普通的clang优化,这会破坏我手动执行的传递的优化:
clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized
我的问题是:
- 如何使用clang自动运行我自己的书面传递作为最后一次传递?
- 另一种可能的解决方案是完全停用所有通行证,或者至少取消clang / opt的死代码/function。 我怎么能这样做?
这样做的正确方法是让clang将你的传递添加到它构建的传递管理器中。 请参阅clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()
,了解如何为清理程序处理它。
您可以使用-Xclang直接使用clang运行自己的传递。
clang++ -Xclang -load -Xclang ./libmypass.so input.cpp
资源