本文档是一个LLVM Pass入门教程,本文档将会介绍如何编写一个LLVM Pass。
LLVM Pass框架是LLVM系统的重要组成部分,因为LLVM Pass是编译器的大多数有趣部分存在的地方。通过执行构成编译器的转换和优化,它们构建这些转换所使用的分析结果,并且它们首先是编译器代码的结构化技术。
所有LLVM Pass都是Pass
类的子类,它通过重写从中继承的虚方法来实现功能Pass
。根据传递的工作方式,您应该继承ModulePass
,CallGraphSCCPass
,FunctionPass
或LoopPass
,或RegionPass
或BasicBlockPass
类,这样可以为系统提供有关传递操作的更多信息,以及如何将其与其他Pass结合使用。LLVM Pass框架的一个主要特性是它根据传递遇到的约束(由它们派生自哪个类来指示)来调度传递以高效的方式运行。
我们首先向您展示如何构建传递,从设置代码到编译,加载和执行它。基础知识出现故障后,将讨论更多高级功能。