swe*_*dev 7 c c++ compiler-construction llvm clang
我为llvm写了一些自己的传递,以便与clang一起使用它们.
我将它们集成在llvm中(不是动态加载的).当我输入时,它们甚至列在Optimizations available:部分中:
opt --help-hidden
Run Code Online (Sandbox Code Playgroud)
当我打电话给clang时,我想现在自动运行我自己的一个通行证作为最后一个通行证:
clang ./hello.bc -o ./hello
Run Code Online (Sandbox Code Playgroud)
甚至用c代码:
clang ./hello.c -o ./hello
Run Code Online (Sandbox Code Playgroud)
当我手动使用opt运行传递时,会生成修改后的ByteCode并将其写入新的.bc文件:
opt -my-pass < ./hello.bc > ./hello_optimized.bc
Run Code Online (Sandbox Code Playgroud)
当我用clang编译修改后的.bc时,会再次运行普通的clang优化,这会破坏我手动执行的传递的优化:
clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized
Run Code Online (Sandbox Code Playgroud)
我的问题是:
您可以使用 -Xclang 直接使用 clang 运行您自己的通行证。
clang++ -Xclang -load -Xclang ./libmypass.so input.cpp
Run Code Online (Sandbox Code Playgroud)
执行此操作的正确方法是让 clang 将您的通行证添加到它构建的通行证管理器中。查看clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()消毒剂的处理方式。