LLVM 优化过程需要达到什么水平?

What level do LLVM optimization passes need to work on?

我最近一直在探索 LLVM 优化,但有一个小问题:

我们如何知道内置通道(不是我们编写的 LLVM 通道)可以应用于函数级别(使用 FunctionPassManager)或模块级别等?

示例 - 如 KaleidoScope 教程 4 中所示:

TheFPM->add(createCFGSimplificationPass());

这个很明显,它应该在功能级别,但其他通道呢?它们是否都可以在任何级别(BasicBlock、Function、Module 等)正确工作?

我想你可以通过查看源代码找到答案。 例如,here is code for SimplifyCFGPass which inherites FunctionPass and here 是 MemoryDe​​pendencyAnalysisPass 的源代码,如您所见,它是一个函数级别的传递。