代码优化.

Slides:



Advertisements
Similar presentations
学生、幼儿意外伤害保险  被保险人 在深圳市取得合法办学资格的全日制大中小学校、中等职业学校 (包括普通中专、成人中专、职业高中和技工学校)、特殊教育 学校、幼儿园在籍(园)学生。
Advertisements

南 通. 南通概述 南通,位于江苏省东部, 东抵黄海,南望长江。 “ 据江 海之会、扼南北之喉 ” ,隔江 与中国经济最发达的上海及 苏南地区相依,被誉为 “ 北上 海 ” 。 南通也是中国首批对 外开放的 14 个沿海城市之一 ,被称为 “ 中国近代第一城 ” 。 南通面临海外和内陆两大经 济辐射扇面,素有.
1 天天 5 蔬果 國立彰化特殊教育學校 延杰股份有限公司營養師:陳婷貽. 2 蔬果彩虹 579 蔬果彩虹 歲以內兒童,每天 攝取五份新鮮蔬菜水 果,其中應有三份蔬 菜兩份水果 蔬菜份數水果份數總份數 兒童 325 女性 437 男性 549.
高等学校英语应用能力考试 考务培训 兰州文理学院教务处 2014 年 12 月. 考务培训 21 日请监考人员上午 8:00 (下午 2:30 )到综合楼 205 教室集合,查看 监考安排,由考务负责人进行考务 培训。
(一)辦桌文化起始略說: 1. 祭祀宗教 2. 生命禮儀 3. 外燴 --- 老師、師公、師傅、總鋪師 4. 搬桌搬椅時代 (二) 食物食材 1. 靠山考海 2. 基本:炒米粉、糍、檳榔 3. 小吃搬上桌 (三) 變變變 1. 調味不同 2. 師承不同 3. 地點也變.
語言與文化通識報告 - 台日年菜差異 - 指導老師 : 葉蓁蓁 小組 : 日本微旅行 組員 :4a21b032 吳采玲 4a21b037 沈立揚 4a 洪雅芳 4a 陳楚貽 4a 王巧稜.
平面构成 第六章 平面构成形式与法则 — 破规与变异. 第七章 平面构成形式与法则 — 破规与变异 破规与变异构成的形式、有下列四类: 一、特异构成 特异构成。其表现特征是,在普遍相同性质的事物 当中,有个别异质性的事物,便会立即显现出来。
我的未来不是梦 攀枝花市经贸旅游学校. 1. 文中案例王萍苦恼的原因是 什么? 2. 你有哪些办法可以帮助王萍? 导入 思考  谁来帮帮她?
均衡推进,确保质量 08学年第一学期教学工作会议 广州市培正中学
黑木耳.
投資權證13問 交易所宣導資料(104) 1.以大盤指數為標的之權證,和大盤指數的連動性,為什麼比和期交所期指的連動性差?
如何把作文写具体.
第4章 交易性金融资产与可供出售金融资产 学习目标
第一章 人口与环境 第一节 人口增长模式.
第一节 人口与人种 第一课时.
解读我党发展史 思索安惠美好明天 主讲人:王辰武.
第5课 长江和黄河.
銓敘部研究規劃自願退休公務人員月退休金起支年齡延後方案座談會
瓦罐湯 “瓦缸煨汤”是流行于南方民间的一种风味菜肴。它采用一种制特的大瓦缸,其缸底可以烧火,缸内置有铁架,厨师将装有汤的小瓦罐一层层地码入缸内的铁架上,然后点燃木炭,借用木炭火产生的高温将瓦罐内的汤煨熟。
1.數學的難題 如下圖所示,你知道表格中的問號應填入什麼數字嗎?
第六节 美国 ■移民国家与多元化 ■现代化的农业 ■引领美国制造业的高新技术产业.
(4F01) 陳可兒 (4F03) 張令宜 (4F05) 何秀欣 (4F14) 潘美玲
第九章 欧氏空间 §1 定义与基本性质 §2 标准正交基 §3 同构 §4 正交变换 §5 子空间 §6 对称矩阵的标准形
第九章 欧氏空间 §1 定义与基本性质 §6 对称矩阵的标准形 §2 标准正交基 §7 向量到子空间的 距离─最小二乘法 §3 同构
合肥学院外国语言系2012年度 学生工作表彰大会.
105年基北區高中職適性入學宣導 教育會考後相關作業說明
真题模拟 主讲:凌宇 时间:6月9日.
树立信心,沉着应战,吹响中考冲锋号 ——谈语文学科的复习备考及考试技巧.
请大家欣赏龙岩, 新罗区 上杭,武平, 连城,长汀, 永定,漳平 小吃和特产.
游 泳 理 论 课 位育中学 高蓉.
行政公文 纪 要 讲授人: 安学珍 铜仁职业技术学院.
我征服了黃山 林達的黃山之旅 2006春.
34 府学胡同的文天祥祠,相传是南宋民族英雄文天祥当年遭囚禁和就义的地方,1376年明洪武九年建祠 。
二代健保補充保費 代扣項目說明 簡報.
1.某公司需购一台设备,有两个方案,假定公司要求的必要报酬率为10%,有关数据如下:
第4课 “千古一帝”秦始皇.
第一节 人口与人种 光山一中 屈应霞.
第五章 二次型.
小学《人•自然•社会》 五年级教材解读 浙江省教育厅教研室 李 荆 -
高考文言文的整体阅读.
輕歌妙舞送黃昏 組員名單 組長:程鵬飛 組員:黎達華 劉展鵬 邱迦欣.
期考議題 單元一:資訊科技(eg上網活動)與人際關係 單元二:青少年社政參與(80後) 單元二:郊野公園與房屋政策/問題
大學多元入學方案 財務金融二 王詩茹.
第一章信託法 第一節 信託契約 第二節 信託財產 第三節 受益人 第四節 受託人 第五節 信託關係之消滅.
第十一章 真理与价值 主讲人:阎华荣.
人地關係 ── 熱帶雨林 人文活動對環境的影響.
昆明心桥心理健康研究所 心理健康工作者 钱锡安 讲座预约 个案咨询预约
第七章 固 定 资 产.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
伯裘書院 環保廣告能否有效 地推動環保意識.
4H (1)歐宛曈 (9)李熹漩 (12)吳紀芙 (14)唐曉筠
游子心 中华情 美国大华府地区华人华侨 庆祝中国六十周年华诞.
行政院國軍退除役官兵輔導委員會 嘉義榮民醫院.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
中央广播电视大学开放教育试点课程 数据结构 辅导教师 倪政林.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
公立學校教職員退休資遣撫卹條例重點說明 苗栗縣政府人事處編製 主講人:陳處長坤榮 107年5月2日.
海水运动→→洋流 你知道吗 在十年前,日本的科学家曾经做过一个有趣的实验:在日本以东的洋面拨撒了大量的带有颜色的物质。
C 语言程序设计 程序的循环结构 电大崇信县工作站 梁海亮.
第十章 优化 网上教学系统: : 编译原理 第十章 优化 网上教学系统: : 编译原理.
美麗的西子湖.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
设岗申请 审核发布 岗位申请 助教培训 津贴发放 工作考核 授课教师 岗位要求 工作内容 开课单位 确定课程、岗位 发布需求 研究生
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
6上 5 小數除法(二) 9.有A、B兩袋金幣,金幣的數量相同。 的金幣全部是真的,共重 。 中有一些金幣是假的,共重 。 A袋
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
有理数的乘方(二).
聖經的獨特.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
用按鈕控制動作狀態 單晶片微電腦控制實習 輸入埠基礎實習 國立大甲高工 電機科 2019年9月10日
Presentation transcript:

代码优化

代码优化的目标 提高最终目标代码的运行效率(性能) - 时间:运行的更快 - 空间:降低内存需求 保持源程序的语义

代码优化的种类 窥孔优化 局部优化-基本块内优化 全局优化-基本块间优化(过程内) 过程间优化-程序全局优化

代码优化的种类-窥孔优化 “孔”-未优化的目标代码片段(windows) 窥孔优化种类: - 删除冗余的存、取操作 e.g. mov r0, a // r0 -> a mov a, r0 // a -> r0, 可删除 - 删除不可达代码

代码优化的种类-窥孔优化 e.g. goto L1 goto L2 // 语句前无标号,死代码 L1: … L2: … - 控制流优化

代码优化的种类-窥孔优化 goto L1 … L1: goto L2 goto L2 … L1: goto L2 if a<b goto L1 … L1: goto L2 if a<b goto L2 … L1: goto L2 goto L1 //唯一跳转L1 … //L1前是无条件跳转 L1: if a <b goto L2 L3: if a < b goto L2 goto L3 … L3:

代码优化的种类-窥孔优化 - 强度消弱、删除无用指令 e.g. MUL $8, R0 -> ShiftLeft $3, R0 ADD $0, R1 // 删除,未改变R1 MUL $1, R2 // 删除 - 利用目标机指令特点 e.g. inc、enter(建立栈帧)leave(清除栈帧) CISC 系统的“复杂”寻址模式 - 其它优化措施,如常量合并、复写传播等

代码优化的种类-局部优化 基本块和流图 - 基本块:能顺序执行的程序代码序列。其入口为: - 程序的第一代码 - 条件或无条件转移代码所转到的目标代码 - 跟在条件或无条件转移代码后的代码 - 基本块划分 - 相邻入口中间的代码序列(仅含前一入口) - 某入口到程序的停止语句代码之间的代码序列 - 流图:由基本块按控制流方向形成的有向图 基本块内优化,主要有: - 常量传播、合并和公共子表达式删除 - 复写传播与死代码(无用代码)删除

代码优化的种类-全局优化 基本块间优化-基本块间控制流与数据流分析技术 优化措施主要有: - 循环优化 :80/20 规则 - 不变式外提、归纳变量删除、强度消弱等 - 公共子表达式删除 - 常量传播、合并常量、复写传播 - 死代码(无用赋值)删除

典型的优化编译器的组织 前 端 代 码 生成器 优化器 变 换 数据流 分 析 控制流 中间表示 中间表示

优化举例 //B1 (1) i := m 1 (2) j := n (3) t1 := 4 * n (4) v := a[t1] 快速排序程序片段如下, i = m  1; j = n; v = a[n]; while (1) { do i = i +1; while(a[i]<v); do j =j 1;while (a[j]>v); if (i >= j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x;

优化举例 //B2 (5) i := i + 1 (6) t2 := 4 * i (7) t3 := a[t2] 快速排序程序片段如下, (8) if t3 < v goto (5) 快速排序程序片段如下, i = m  1; j = n; v = a[n]; while (1) { do i = i +1; while(a[i]<v); do j =j 1;while (a[j]>v); if (i >= j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x;

优化举例 快速排序程序片段如下, //B3 i = m  1; j = n; v = a[n]; (9) j := j 1 while (1) { do i = i +1; while(a[i]<v); do j =j 1;while (a[j]>v); if (i >= j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x; //B3 (9) j := j 1 (10) t4 := 4 * j (11) t5 := a[t4] (12) if t5 > v goto (9)

优化举例 快速排序程序片段如下, i = m  1; j = n; v = a[n]; while (1) { do i = i +1; while(a[i]<v); do j =j 1;while (a[j]>v); if (i >= j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x; //B4 (13) if i >= j goto (23)

优化举例 //B5 (14) t6 := 4 * i (15) x := a[t6] (16) t7 := 4 * i (17) t8 := 4 * j (18) t9 := a[t8] (19) a[t7] := t9 (20) t10 := 4 * j (21) a[t10] := x (22) goto (5) 快速排序程序片段如下, i = m  1; j = n; v = a[n]; while (1) { do i = i +1; while(a[i]<v); do j =j 1;while (a[j]>v); if (i >= j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x;

优化举例 快速排序程序片段如下, i = m  1; j = n; v = a[n]; while (1) { do i = i +1; while(a[i]<v); do j =j 1;while (a[j]>v); if (i >= j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[n]; a[n]=x; //B6 (23) t11 := 4 * i (24) x := a[t11] (25) t12 := 4 * i (26) t13 := 4 * n (27) t14 := a[t13] (28) a[t12] := t14 (29) t15 := 4 * n (30) a[t15] := x

优化举例-流图 i := m 1 B1 j := n t1 := 4 * n v := a[t1] B2 i := i + 1 t2 := 4 * i t3 := a[t2] if t3 > v goto B2 B1 B2 j := j 1 t4 := 4 * j t5 := a[t4] if t5 > v goto B3 if i >= j goto B6 B4 B3 B5 B6

优化举例 公共子表达式删除 -基本块内 t6 := 4 * i x := a[t6] t7 := 4 * i t8 := 4 * j 公共子表达式删除 -基本块内 B5 t6 := 4 * i x := a[t6] t7 := 4 * i t8 := 4 * j t9 := a[t8] a[t7] := t9 t10 := 4 * j a[t10] := x goto B2 t11 := 4 * i x := a[t11] t12 := 4 * i t13 := 4 * n t14 := a[t13] a[t12] := t14 t15 := 4 * n a[t15] := x B6 变 换

优化举例 公共子表达式删除 -基本块内 t6 := 4 * i x := a[t6] t8 := 4 * j t9 := a[t8] 公共子表达式删除 -基本块内 B5 t6 := 4 * i x := a[t6] t8 := 4 * j t9 := a[t8] a[t6] := t9 a[t8] := x goto B2 t11 := 4 * i x := a[t11] t13 := 4 * n t14 := a[t13] a[t11] := t14 a[t13] := x B6

优化举例 公共子表达式删除-基本块间 t2:=4 * i : B2 -- B5 t2:=4 * i : B2 -- B6 t4:= 4 * j : B3 -- B5 t1:= 4 * n : B1 -- B6 B5 t6 := 4 * i x := a[t6] t8 := 4 * j t9 := a[t8] a[t6] := t9 a[t8] := x goto B2 B6 t11 := 4 * i x := a[t11] t13 := 4 * n t14 := a[t13] a[t11] := t14 a[t13] := x 变 换

优化举例 公共子表达式删除-基本块间 t3:=a[t2] : B2 -- B5 t3:=a[t2] : B2 -- B6 x := a[t2] t9 := a[t4] a[t2] := t9 a[t4] := x goto B2 B6 x := a[t2] t14 := a[t1] a[t2] := t14 a[t1] := x 变 换

优化举例 公共子表达式删除-基本块间 B1中 v := a[t1] 能否作为公共子表达式? x := t3 a[t2] := t5 goto B2 B6 x := t3 t14 := a[t1] a[t2] := t14 a[t1] := x

优化举例 复写传播 - 形成为f := g的赋值叫做复写语句 - 优化过程中会大量引入复写 - 复写传播变换是在复写语句f := g后,尽可能用g代表f(暗示有前提条件) -复写传播变换带来 - 常量合并 - 死代码删除

优化举例 复写传播 x := t3 a[t2] := t5 a[t4] := x goto B2 x := t3 //可以考虑删除

优化举例 复写传播 x := t3 t14 := a[t1] a[t2] := t14 a[t1] := x B6 x := t3 t14 := a[t1] a[t2] := t14 a[t1] := x B6 x := t3 //可以考虑删除 t14 := a[t1] a[t2] := t14 a[t1] := t3 B6中,t14 := a[t1] 可以复写传播吗?

优化举例 循环优化 - 代码外提 - 归纳变量删除 - 强度削弱 例:while (i <= limit  2 ) … 变换成 t = limit  2; //为什么提出循环? while (i <= t ) …

优化举例 强度削弱和归纳变量删除 j和t4的值步伐一致地变化 这样的变量叫做归纳变量 B3 在循环中有多个归纳变量时, 也许只需要留下一个 这个操作由归纳变量删除 过程来完成 j := j 1 t4 := 4 * j t5 := a[t4] if t5 > v goto B3 B3

优化举例 除第一次外, t4 = 4 * j在B3的入口 一定保持 在j := j 1后, 关系t4 = 4 * j + 4也 保持 B3 i := m 1 j := n t1 := 4 * n v := a[t1] B1 B2 j := j 1 t4 := t4  4 t5 := a[t4] if t5 > v goto B3 B4 B3 B5 B6 t4 := 4 * j if i >= j goto B6 j := j 1 t4 := 4 * j t5 := a[t4] if t5 > v goto B3 B3 除第一次外, t4 = 4 * j在B3的入口 一定保持 在j := j 1后, 关系t4 = 4 * j + 4也 保持

优化举例 i := m 1 j := n t1 := 4 * n v := a[t1] t2 := 4 * i t4 := 4 * j t3 := a[t2] if t3 > v goto B2 B1 B2 t4 := t4  4 t5 := a[t4] if t5 > v goto B3 if t2 >= t4 goto B6 a[t2] := t5 a[t4] := t3 goto B2 B4 B3 B5 t14 := a[t1] a[t2] := t14 a[t1] := t3 B6

代码优化(续) - 循环优化简介 2019/4/25 《编译原理与技术》之代码优化

流图中的循环 循环定义 必经结点(集合) 回边 - 程序流图中有唯一入口的强连通子图 - d DOM n 表示结点d是结点n的必经结点, - n->d, 如果d DOM n。 2019/4/25 《编译原理与技术》之代码优化

流图中的循环 自然循环 可归约流图 - 由回边 n->d 确定的循环Loop(n->d) - Loop(n->d) = { d } U {流图中所有不经过结点 d 而能达到结点 n 的其它结点} 可归约流图 - 去除流图中的回边后的子图是无环有向图 - 结构化程序流图是可归约的 - 存在不可归约流图 2019/4/25 《编译原理与技术》之代码优化

流图中的循环 1 2 3 4 5 6 7 8 9 10 e.g. 右边流图的必经结点树 e.g. 一个流图 1 2 3 4 5 6 7 8 2019/4/25 《编译原理与技术》之代码优化

流图中的循环 自然循环 回边10  7 循环{7, 8, 10} 回边7 4 循环{4, 5, 6, 7, 8, 10} 2 3 4 5 6 7 8 9 10 自然循环 回边10  7 循环{7, 8, 10} 回边7 4 循环{4, 5, 6, 7, 8, 10} 回边4  3和8  3 循环{3, 4, 5, 6, 7, 8, 10} 回边9  1 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} e.g. 一个流图 2019/4/25 《编译原理与技术》之代码优化

循环优化 代码外提 - 循环不变计算 - 前置结点 B0 B0 B0 循环L 循环L (b) 外提代码放在前置结点B0 (a) 代码外提前,B0是首结点 2019/4/25 《编译原理与技术》之代码优化

循环优化-代码外提 寻找循环不变计算 (1)标记循环各结点(基本块)中的语句x := y + z为不变计算,如果y和z均为常量或定值点在循环外(ud链); (2)检查其余语句,如 w := x + u,如果x和u均为常量或定值点在循环外,或其唯一能达到的定值点已标记, 如 (1)中的x,则标记该语句; (3)重复(2)直至没有语句被标记为不变计算为止。 2019/4/25 《编译原理与技术》之代码优化

循环优化-代码外提 如何实施代码外提? 考察已标记的循环不变计算,P: x := y + z , 如果满足, (3)循环中对 x 的引用均来自 P 点的定值。 问题:如果 P 点定值满足(2)和(3),而不满足(1),能否外提该代码? 2019/4/25 《编译原理与技术》之代码优化

循环优化-代码外提 非法代码外提-case 1 j:我要1 i := 1 B1 i := 1 B1 if u < v goto B3 u := u + 1 B3 v := v -1 if v <= 20 goto B5 B4 j := i B5 i := 2 B6 if u < v goto B3 B2 代码外提 u := u + 1 B3 B4 v := v -1 if v <= 20 goto B5 j:我要1 j := i B5 2019/4/25 《编译原理与技术》之代码优化

循环优化-代码外提 非法代码外提-case 2 j:2呢? i := 1 B1 i := 3 if u < v goto B3 u := u + 1 B3 v := v -1 if v <= 20 goto B5 B4 j := i B5 i := 2 B6 非法代码外提-case 2 我要外提?? i := 1 B1 i := 3 if u < v goto B3 i := 2 u := u + 1 B3 v := v -1 if v <= 20 goto B5 B4 j := i B5 B2 代码外提 j:2呢? 2019/4/25 《编译原理与技术》之代码优化

循环优化-代码外提 非法代码外提-case 3 i := 1 B1 i := 3 if u < v goto B3 u := u + 1 B3 B4 k := i v := v -1 if v <= 20 goto B5 i , 你从哪里来? j := i B5 2019/4/25 《编译原理与技术》之代码优化

循环优化 归纳变量 - 基本归纳变量 i :(i,1,0),循环中有唯一定值,形如 i := i + n,n 为常量。 - i 族归纳变量 j :(i,c,d),如果循环中变量 j 的唯一定值满足 j := i * c + d,c和d为循环不变量。 - 更多的i 族归纳变量 k , k 的定值形式为: k := j * b, k := b * j, k := j / b, k := j + b , k := b + j, b 为循环不变量,j 为 i 族归纳变量(i,c,d) ,则 k 亦为i 族归纳变量。 2019/4/25 《编译原理与技术》之代码优化

循环优化 强度消弱 - i 族归纳变量 j : ( i, c, d ), j := i * c + d; - 引入新变量 s ,在循环前置块末尾添加如下语句: s := c * i0 // if c == 1 then s := i0 s := s + d // if d == 0 then ‘no code’ - 变量 j 的定值语句变为 j := s; - 在基本归纳变量 i 定值语句,i := i + n 后添加语句 s := s + c * n; - s 也是i 族归纳变量 s : ( i, c, d ) 2019/4/25 《编译原理与技术》之代码优化

循环优化 删除归纳变量 - 如果基本归纳变量 i ,循环出口后不活跃,在循环中除了递归赋值外,仅出现在若干条件测试语句中,如 if i op x goto L 等,则可以考虑删除此基本归纳变量。 - 选择 i 族归纳变量 j : (i, c, d), 用以下语句序列, s := c * x; s := s + d; if j op s goto L 替代 if i op x goto L - 删除语句 i := i + n 2019/4/25 《编译原理与技术》之代码优化

循环优化举例 e.g. 对以下伪C程序片段进行有关循环优化 int A[100][100][100]; for ( i = 0 ; i<100; i++) for ( j = 0; j<100; j++) for ( k = 0; k<100; k++) A[ i ][ j ][ k ] = i * j * k; 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-代码外提 for ( i = 0 ; i<100; i++) for ( j = 0; j<100; j++) for ( k = 0; k<100; k++) A[ i ][ j ][ k ] = i * j * k; 对于最内层循环k而言,为循环不变计算 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-代码外提 for ( i = 0 ; i<100; i++) for ( j = 0; j<100; j++) { A[ i ] 在循环j中保持“不变” for ( i = 0 ; i<100; i++) for ( j = 0; j<100; j++) { t1 = addr( A [ i ][ j ] ); t2 = i * j; for ( k = 0; k<100; k++) t1[ k ] = t2 * k; } // Loop j 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-代码外提 for ( i = 0 ; i<100; i++) { t3 = addr( A[ i ] ); for ( j = 0; j<100; j++) { t1 = addr( t3[ j ] ); t2 = i * j; for ( k = 0; k<100; k++) t1[ k ] = t2 * k; } // Loop j } // Loop i 归纳表达式(变量) 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-强度消弱 for ( i = 0 ; i<100; i++) { t3 = addr( A[ i ] ); t4 = 0; // i * j 的初值 for ( j = 0; j<100; j++) { t1 = addr( t3[ j ] ); t2 = t4; t5 = 0; // t2 * k 的初值 for ( k = 0; k<100; k++) { t1[ k ] = t5; t5 = t5 + t2; } // Loop k t4 = t4 + i; } // Loop j } // Loop i 利用复写传播, 删除t2 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-强度消弱 上述程序中隐含的有价值的归纳表达式: addr(A[ i ]) 可以表示为: A + i * 40000 , A 为数组开始地址 addr( t3[ j ] ) 可以表示为: t3 + j * 400 t1[ k ] 的地址表示为: t1 + k * 4 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-强度消弱 应用复写传播,再次删除t3和 t1; t6 = A; // A + i * 40000的初值 for ( i = 0 ; i<100; i++) { t3 = t6; t4 = 0; t7 = t3; // t3 + j * 400 的初值 for ( j = 0; j<100; j++) { t1 = t7; t5 = 0; t8 = t1; // t1 + k * 4 的初值; for ( k = 0; k<100; k++) { * t8 = t5; t5 = t5 + t4; t8 = t8 + 4 ; } // Loop k t4 = t4 + i; t7 = t7 + 400; } // Loop j t6 = t6 + 40000; } // Loop i 应用复写传播,再次删除t3和 t1; 2019/4/25 《编译原理与技术》之代码优化

循环优化举例-强度消弱 结果最优了? t6 = A; // A + i * 40000的初值 for ( i = 0 ; i<100; i++) { t4 = 0; t7 = t6; for ( j = 0; j<100; j++) { t5 = 0; t8 = t7; for ( k = 0; k<100; k++) { * t8 = t5; t5 = t5 + t4; t8 = t8 + 4 ; } // Loop k t4 = t4 + i; t7 = t7 + 400; } // Loop j t6 = t6 + 40000; } // Loop i 结果最优了? 2019/4/25 《编译原理与技术》之代码优化