11

我有一个与 opt 工具配合使用的 ModulePass,但我无法弄清楚如何让它在命令行中可用。我目前使用通行证的工作流程是:

  1. clang -c -emit-llvm [c-源代码文件]
  2. llvm-link [llvm 位码文件]
  3. opt -load [PassName].so -[pass-name] [链接的 llvm 文件]
  4. llc [生成的位码文件]
  5. gcc [生成的汇编文件] -o [目标]

我想让我的 pass 与 clang 命令行集成,这样它就可以作为现有软件(例如 c++ 标准库)构建的一部分被调用,而不必为我编译的每个东西重新构建整个构建系统。我已经看到有关如何执行此操作的提示,但我无法将这些部分组合成一个工作设置。

使用 Clang 自动运行 LLVM Pass准确描述了我想要的,但该方法在 LLVM 3.4 中似乎已被弃用(PassManagerBuilder 已移至旧命名空间)。

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

使用 LLVM 3.4 从 clang 获取新通行证的最佳方法是什么?

4

1 回答 1

8

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

很难找到任何有关旧”通行证管理器基础设施已被弃用的信息。但由于 Clang 仍在使用它,它不能被弃用。:)

于 2014-10-18T01:52:03.313 回答