2014-04-17 69 views
6

我为llvm写了一些自己的通行证,以便在叮当中使用它们。LLVM - 铿锵自动通行证

我将它们集成在llvm中(不是动态加载的)。他们甚至在现有的优化上市:节当我输入:

opt --help-hidden 

我想现在会自动运行我的通行证自己的一个作为最后一个当我打电话铛:

clang ./hello.bc -o ./hello 

甚至与C代码:

clang ./hello.c -o ./hello 

当我手动运行我的通行证与选择,修改后的字节代码生成并写入到一个新的.BC文件:

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

当我编译修改.BC与铛,铛正常优化再次运行,这毁了我的手动执行合格的优化:

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

我的问题是:

  • 我如何铿锵所有的最后一关自动运行我自己写的通?
  • 另一种可能的解决方案是完全禁用所有通行证,或至少删除叮/ opt的死代码/函数。我怎么能这样做?
+0

使用铛-flto,并通过您的通行证金LTO插件的序列。 –

回答

1

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

0

您可以使用-Xclang直接与clang一起运行自己的传球。

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

Source