在clang命令行上提供LLVM ModulePass

Eri*_*rik 10 llvm clang 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文件]
  3. opt -load [PassName] .so - [pass-name] [链接llvm文件]
  4. llc [结果bitcode文件]
  5. gcc [生成的汇编程序文件] -o [target]

我希望将我的pass与clang命令行集成,以便可以作为现有软件(例如c ++标准库)构建的一部分调用它,而不必为我编译的每个东西重新构建整个构建系统.我已经看到了关于如何做到这一点的提示,但我无法将各个部分组合到一个正常工作的设置中.

使用Clang自动运行LLVM Pass会自动描述我想要的内容,但LLVM 3.4中似乎不推荐使用该方法(PassManagerBuilder已移至旧版命名空间).

LLVM - 使用clang自动运行自己的通行证似乎解决了基本问题,但我希望我能做到这一点,而不必修改clang(这似乎是那里的建议).

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

adr*_*ian 7

Clang仍然使用PassManagerBuilder3.5(见PassManagerBuilderWrapper上课BackendUtil.cpp).因此,我认为RegisterStandardPasses在我的博客文章中扩展它仍然是向Clang的传递管理器添加传递的唯一方法.

这是令人沮丧很难找到任何关于如何过时的"老"过程管理的基础设施.但由于锵仍然使用它,它不能过时.:)