2

Clang/LLVM 编译器LLVM 后端在IR(中间表示)上运行各种传递以进行优化。

  • 如何知道在任何 -O1/2/3 模式下运行的所有通道是什么?
  • 有没有办法删除其中一些通行证并添加一些其他自定义书面通行证?
  • 此外,需要注意的通行证之间是否存在任何依赖关系?
4

1 回答 1

1

如何知道在任何 -O1/2/3 模式下运行的所有通道

所有与优化管道构建相关的逻辑都集中在PassBuilder.cpp中。在那里,您可以看到优化级别的直接条件。

有没有办法删除其中一些通行证并添加一些其他自定义书面通行证

当然,只需将其添加到该源文件中。

此外,需要注意的通行证之间是否存在任何依赖关系

LLVM 开发人员试图使所有通道独立(据我所知,它们大部分是独立的)。如果您想使用来自某个传递的信息,则该传递应注册为分析(即不转换代码但收集信息的传递)。您可以在此处阅读有关分析依赖性的更多信息。

我希望这回答了你的问题!

于 2020-02-13T09:29:07.197 回答