我为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的死代码/函数。
3条答案
按热度按时间58wvjzkj1#
正确的方法是让clang把你的通行证添加到它构建的通行证管理器中,请参见
clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()
了解如何为杀毒程序处理它。soat7uwm2#
您可以直接使用-Xclang运行自己的clang传递。
Source
hi3rlvi23#
到目前为止,遗留的传递管理器已经被删除了。我在这里写了一个完整的例子,用clang + new传递管理器(对我来说很好)。