目录
一、LegacyPM添加Pass





LegacyPM的流水线在PassManagerBuilder.cpp中。
二、NewPM添加Pass


NewPM的流水线在PassBuilder.cpp和PassBuilderPipeline.cpp中。
三、简短的PASS别名设置

四、LegacyPM和NewPM比较
4.1 易使用性(NewPM)
- 不需要明确继承的父类,ModulePass, FunctionPass,只需要提供run语义的函数即认为是Pass。
- 不需要为Transform类定义一个ID。
- 不需要通过 getAnalysisUsage(AnalysisUsage &AU)指定依赖关系,尝试通过getResult获取结果及认为有依赖。
- 不需要AnalysisUsage指定required, preserved 等依赖Pass。
- 不需要定义全局的静态变量或者INITIALIZE_PASS宏注册Pass。
- Pass结构显示区分Transform Pass(PassInfoMixin)和Analysis Pass(AnalysisInfoMixin)。
4.2 易维护性
从LegacyPM和NewPM的类图, 序列图,约束,我们可以很清楚的看到NewPM的复杂度明显降低。从类的扩展机制上,例如PassManager均有 ModulePassManager, FunctionPassManager,LegacyPM通过继承关系来实现各个SubPassManager,继承的关系比较深;NewPM可以有效的利用PassManager模板进行扩展(模板在代码体积上会较大)。 此外,LegacyPM继承关系深伴随着众多的虚函数,代码的维护性和静态分析都带来了困难。
4.3 开发者友好性
LLVM的开发者主要分为2种类型:</

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



