LLVM-使用clang自动运行Own Pass

LLVM - Run Own Pass automatically with clang

本文关键字:运行 Own Pass 使用 clang LLVM-      更新时间:2023-10-16

我为llvm编写了一些自己的通行证,以便将它们与clang一起使用。

我在llvm中集成了它们(不是动态加载的)。当我键入时,它们甚至列在可用优化:部分

opt --help-hidden

当我调用clang:时,我想现在自动运行自己的一个通行证,作为最后一个

clang ./hello.bc -o ./hello

甚至使用c码:

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/opt的死代码/功能。我怎么能这么做

正确的方法是让clang将您的通行证添加到它构建的通行证管理器中。请参阅clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()了解如何处理消毒剂。

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

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

到目前为止,遗留的通行证管理器已被删除。我在这里写了一个完整的clang+新通行证管理器的例子(对我有用)。工作示例