llvm中pass学习记录一

有用的网站:
http://llvm.org/docs/Passes.html 官网,循环的转换和优化
https://blog.csdn.net/qq_23599965/article/details/88344459#328_licm_205 翻译循环和转换pass的博客

1.循环的转换和优化:

本节内容主要记录自己再llvm cookbook上学习循环转换和优化的一个记录。
本节 将 介绍 对 循环 进行 转换 和 优化 以 得到 更短 的 执行 时间,也就是我们平常说的提高性能。 我们 主要 展示 循环 常量 提升( Loop- Invariant Code Motion一—— LICM,循环不变的代码移动) 技术, 它 如何 运行 及 如何 改变 代码。 同时 也会 展示 一种 相对 简单 的 技术—— 循环 删除, 消除 对 返回 值 没有 副作用 的 普通 循环( 循环 次数 对 循环 返回 值 无 影响、 非 死 循环)。
LICM:英文释义循环不变的代码移动,又叫循环常量提升,它 会把 循环 中 不变 的 代码 提升 到 循环 体外, 或者是 循环 之前 的 pre-header 块, 或者是 循环 之后 的 exit 块。( pre-header 块和exit 块是插入的,)。
循环删除:会 查找 对 函数 返回 值 没有 作用, 并且 迭代 有限 次数 的 非 死 循环,若查找到,则删除整个循环。

LoopPass

所有LoopPass在函数中的每个循环上执行,独立于函数中的所有其他循环。 LoopPass以循环嵌套顺序处理循环,以便最后处理最外面的循环。(函数中的每个循环都执行looppass,互不影响,嵌套顺序处理,先处理内层循环,后处理最外层循环)

允许LoopPass子类使用LPPassManager接口更新循环嵌套。实施loop pass通常很简单。 LoopPasses可能会重载三种虚拟方法来完成其工作。所有这些方法如果对程序进行了修改,都应返回true;否则,则应返回false。
允许looppass子类使用lppassmanager接口更新循环嵌套。实现循环过程通常很简单。looppasses可能会重载三个虚拟方法来完成它们的工作。如果修改了程序,所有这些方法都应该返回true,否则返回false。
多个pass混用,需要保留所有的相同分析,LoopUtils.h提供了getLoopAnalysisUsage函数。可以在子类的getAnalysisUsage重写中调用它,以获取一致且​​正确的行为。而INITIALIZE_PASS_DEPENDENCY(LoopPass)是初始化这组功能分析。

-loop-simplify:

循环简化
此过程执行几次转换,以将自然循环转换为更简单的形式,从而使后续的分析和转换更简单,更有效。
循环pre-header block插入可以确保从循环外部到循环header有单个非关键的入口边缘。这简化了许多分析和转换,例如LICM。
循环exit-block插入可确保循环中的所有exit-block(在循环外部的块,其中在循环内部具有前身,具体是指:在循环外,但具有在循环内的前导的块)仅在循环内部具有前导(并且由循环header控制)。这简化了LICM中内置的转换,例如存储接收。
LICM:英文释义循环不变的代码移动,又叫循环常量提升,它 会把 循环 中 不变 的 代码 提升 到 循环 体外, 或者是 循环 之前 的 pre-header 块, 或者是 循环 之后 的 exit 块。( pre-header 块和exit 块是插入的,)。

实验步骤:

1.创建测试实例,中间代码格式licmtest.ll

在这里插入图片描述

2.在 测试 代码 上 执行 LICM Pass:

在这里插入图片描述

3.编写 循环 删除 Pass 的 测试 代码deletetest.ll

在这里插入图片描述

4.在 测试 代码 上 执行 循环 删除 Pass:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值