LLVM - 使用clang自动运行自己的通行证

时间:2014-04-17 10:34:46

标签: c++ c compiler-construction clang llvm

我为llvm写了一些自己的传递,以便与clang一起使用。

我将它们集成在llvm中(不是动态加载的)。当我输入:

时,它们甚至列在 Optimizations available:部分中
opt --help-hidden

当我打电话给clang时,我想自动运行自己的一个通行证作为最后一个

clang ./hello.bc -o ./hello

甚至是c-code:

clang ./hello.c -o ./hello

当我手动使用opt运行传递时,会生成修改后的ByteCode并将其写入新的.bc文件:

opt -my-pass < ./hello.bc > ./hello_optimized.bc

当我使用clang编译修改后的.bc时,会再次运行普通的clang优化,这会破坏我手动执行的传递的优化:

clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized

我的问题是:

  • 如何使用clang作为最后一次传递自动运行我自己的书面传递?
  • 另一种可能的解决方案是完全停用所有通行证,或者至少取消clang / opt的死代码/功能。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这样做的正确方法是让clang将你的传递添加到它构建的传递管理器中。有关消毒剂的处理方法,请参阅clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()

答案 1 :(得分:0)

您可以使用-Xclang直接使用clang运行自己的传递。

clang++ -Xclang -load -Xclang ./libmypass.so input.cpp

Source