当前位置:网站首页>Bi Sheng Compiler Optimization: Lazy Code Motion
Bi Sheng Compiler Optimization: Lazy Code Motion
2022-08-09 21:04:00 【InfoQ】
导语

- ②和③哪个优化效果更好一点?
- (3)这种情况,在 p 点直接插入 t=b+c 会带来安全或性能问题吗?会改变程序的行为吗?
- 能否由编译器来完成一个算法,找到一个通用的、寻找到合适的插入点的方法以消除冗余计算?
0.1 开始之前
(1)我们可以把计算移动到不会重复计算的路径吗?

- 左边例子是可以的.这也是下文算法要找的情景.当然实际应用程序中会更复杂,以致我们不能明显看出或不经意间引入冗余的计算,比如 《Lazy code motion》1 里给出的例子.
- 中间不可以,因为 b 被重新定义了,所以 a = b + c 不是冗余计算了.
- 右边不可以,因为 a = b + c 可能一次也没执行,移动到循环前可能会改变程序的行为.
(2)左图到右图的变化有优化效果吗

(3)下图中,能否在 block d 的父项 p 上插入表达式 t=b+c:

0.2 临界边(Critical Edge)的定义

- 为每个指向拥有多个前置的基本块添加一个基本块(不仅仅是在 临界边 上).
- 为了保持算法简单,将每个语句视为其自己的基本块,并将指令的放置限制在基本块的开头.

1、算法

- 首先计算预期表达式(Anticipated)集合
- 计算将可用的表达式(Will-be-Available)集合
- 从 AVAIL 和 ANT ,我们为每个表达式计算出最早的插入位置(Earliest)集合,这最大限度地消除了冗余,但可能会增大寄存器生存期
- 再计算延迟表达式(Postponable)集合
- 经过上面的计算,引入最新 的定义,计算最晚插入的点的集合,With the earliest 相同数量的冗余消除,但缩短了保存表达式值的寄存器的生存期
- 计算使用表达式(Used)
- 计算最后的插入位置的集合,替换冗余表达式

1.1 预期表达式(预期)


1.2 将可用的表达式




1.3 延缓表达式(延期)



- 先在 最早与 postpobable 集合的并集位置放置表达式 e .
- 对上一步的点进行筛选,需要满足:表达式 e 在 b 点(随后的基本块)被Use 或 它不是上一步点的后继.

1.4 已用表达式


2、最终的解决方案


参考
边栏推荐
- 混动产品助力,自主SUV市场格局迎来新篇章
- How to stop the test after reaching a given number of errors during stress testing in JMeter
- LeetCode笔记:Weekly Contest 305
- 01 -- 钉钉机器人
- Sublime Text的安装过程记录
- win10 uwp 让焦点在点击在页面空白处时回到textbox中
- 毕昇编译器优化:Lazy Code Motion
- 全自动化机器学习建模!效果吊打初级炼丹师!
- win10 uwp 简单MasterDetail
- 论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题
猜你喜欢
loadrunner script -- parameterization
Detailed explanation of VIT transformer
国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...
.NET现代应用的产品设计 - DDD实践
Wallys/QCA 9880/802.11ac Mini PCIe Wi-Fi Module, Dual Band, 2,4GHz / 5GHz advanced edition
字节二面,差点倒在了MySQL上面
loadrunner脚本--参数化
没有 accept,TCP 连接可以建立成功吗?
读大学有用吗?
kakka rebalance解决方案
随机推荐
网络安全:常见的网络协议
Unity Webgl与JS相互交互 Unity 2021.2之后的版本
d中简单禁止垃集
怎样选择一个好的SaaS知识库工具?
单调栈
JSDN blog system
uniapp中使用网页录音并上传声音文件(发语音)——js-audio-recorder的使用【伸手党福利】
std::atomic_flag的test_and_set函数理解
Sublime Text如何安装Package Control
winpe工具WEPE微PE工具箱
Flink on Yarn
发布sensor_msgs/Range数据
C的一些琐碎
Ros简介
正则表达式(全)
不是吧,连公司里的卷王写代码都复制粘贴,这合理?
解决启动项目初始化报错required a bean of type ‘int‘ that could not be found.的问题
牛客网 Verilog 在线编程题库解答(VL1~VL10)
基于AWS构建云上数仓第一步:云平台的基础概念
shell脚本基础语句使用(一)