2014-09-10 92 views
9

我有一个ModulePass与opt工具一起工作,但我无法弄清楚如何在命令行中使其可用。我使用我的通行证当前的工作流程是:在clang命令行上提供LLVM ModulePass

  1. 铛-c -emit-LLVM [C源代码文件]
  2. LLVM链接[LLVM位码文件]
  3. 选择-load [PassName。所以 - [传递名称] [链接LLVM文件]
  4. LLC [导致位码文件]
  5. GCC [编译得到的汇编文件] -o [目标]

我想获得我的通行证与整合铛命令以便它可以作为现有软件构建的一部分被调用(例如, C++标准库),而不必为我编译的每个东西重新构建整个构建系统。我已经看到了如何做到这一点的提示,但我无法将这些部分放在一起工作。

Run an LLVM Pass Automatically with Clang正确地描述了我想要的内容,但该方法在LLVM 3.4中似乎已被弃用(PassManagerBuilder已移至旧的名称空间)。

LLVM - Run Own Pass automatically with clang似乎解决了基本问题,但我希望我可以做到这一点,而不必修改clang(这似乎是什么建议那里)。

什么是使用LLVM 3.4从clang制作新传递的最佳方式?

回答

7

Clang仍然使用PassManagerBuilder从3.5开始(参见BackendUtil.cpp中的PassManagerBuilderWrapper类)。所以我相信用RegisterStandardPasses来扩展它,就像在我的博客文章中一样,它仍然是向Clang的通关经理添加通行证的唯一方法。

很难找到任何关于的信息如何弃用“旧”通行证管理器基础结构。但由于Clang仍在使用它,因此不建议使用。 :)

+0

感谢您的答案,我会继续PassManagerBuilder设置。 – Erik 2014-11-30 13:32:05

+0

它适用于llvm-3.7。注册ModulePass的注释:将EP_EarlyAsPossible改为EP_ModuleOptimizerElely否则llvm会将其视为FunctionPass并尝试调用runOnFunction。 – xywang 2015-12-16 03:15:06