LLVM笔记1 LLVM Pass Manager

目录

一、LegacyPM添加Pass

二、NewPM添加Pass

三、简短的PASS别名设置

四、LegacyPM和NewPM比较

4.1 易使用性(NewPM)

4.2 易维护性

4.3 开发者友好性

五、为什么提出NewPM来代替LegacyPM呢?

5.1 性能

5.2 扩展性


一、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种类型:</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值