在clang命令行上提供LLVM ModulePass

时间:2014-09-10 21:37:02

标签: clang llvm llvm-clang llvm-ir llvm-c++-api

我有一个使用opt工具的ModulePass,但我无法弄清楚如何在命令行中使用它。我目前使用my pass的工作流程是:

  1. clang -c -emit-llvm [c-source code files]
  2. llvm-link [llvm bitcode files]
  3. opt -load [PassName] .so - [pass-name] [链接llvm文件]
  4. llc [结果bitcode文件]
  5. gcc [生成的汇编程序文件] -o [target]
  6. 我想让我的pass与clang命令行集成,以便可以作为现有软件(例如c ++标准库)构建的一部分调用它,而不必为我编译的每个东西重新构建整个构建系统。我已经看到了关于如何做到这一点的提示,但我还没有把这些部分组合成一个有效的设置。

    Run an LLVM Pass Automatically with Clang准确描述了我想要的内容,但LLVM 3.4中似乎不推荐使用该方法(PassManagerBuilder已移至旧版命名空间)。

    LLVM - Run Own Pass automatically with clang似乎解决了基本问题,但我希望我能够在不必修改clang的情况下做到这一点(这似乎就是那里的建议)。

    使用LLVM 3.4从clang获取新传递的最佳方法是什么?

1 个答案:

答案 0 :(得分:7)

Clang从3.5开始仍使用PassManagerBuilder(请参阅PassManagerBuilderWrapper中的BackendUtil.cpp课程)。所以我认为用RegisterStandardPasses扩展它,就像在我的博客文章中一样,仍然是向Clang的传球经理添加传球的唯一方法。

很难找到有关 如何弃用" old"的任何信息。通过经理基础设施是。但是,由于Clang仍在使用它,因此 已弃用。 :)