c++ LLVM -使用clang自动运行Own Pass

pkln4tw6  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(180)

我为llvm编写了一些自己的通道,以便与clang一起使用它们。
我将它们集成在llvm中(不是动态加载的)。当我键入以下内容时,它们甚至会列在 Optimizations available: 部分中:

opt --help-hidden

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

clang ./hello.bc -o ./hello

或者用C代码:

clang ./hello.c -o ./hello

当我用opt手动运行我的pass时,修改后的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的死代码/函数。
58wvjzkj

58wvjzkj1#

正确的方法是让clang把你的通行证添加到它构建的通行证管理器中,请参见clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()了解如何为杀毒程序处理它。

soat7uwm

soat7uwm2#

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

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

Source

hi3rlvi2

hi3rlvi23#

到目前为止,遗留的传递管理器已经被删除了。我在这里写了一个完整的例子,用clang + new传递管理器(对我来说很好)。

相关问题