- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 代码优化和目标代码生成 第一节 代码优化 一. 优化的概念 1. 优化是一种等价的,有效的程序变换。 等价 —— 不改变程序运行结果 有效 —— 时空效率要高 一. 优化的概念 1. 优化是一种等价的,有效的程序变换。 等价 —— 不改变程序运行结果 有效 —— 时空效率要高 2. 不同阶段的优化 源程序阶段的优化:考虑数据结构和算法 编译阶段的优化:中间代码优化和目标代码优化 3. 中间代码的优化 局部优化:在基本块内的优化 全局优化:在基本块之间的优化 二. 基本块 基本块的定义 程序中的一段语句序列,它只有一个入口语句,即该语句序列的第一个语句;只有一个出口语句,即该语句序列的最后一个语句。 划分基本块 1. 入口语句 (1) 程序的第一条语句 (2) 能由转向语句(条件或无条件)转移到的语句 (3) 紧跟在条件语句后的语句 2. 出口语句 (1) 转向语句 (2) 停止语句 划分基本块 3. 划分基本块的算法 (1) 求出四元式程序中的所有入口语句 (2) 划分基本块: 入口语句 入口语句 …… …… 入口语句 出口语句 (3) 删除未被划入基本块的语句 三. 程序流图 程序流图是程序结构的图形表示。程序流图可定义为G = ( N , E , n0),其中: (1) N为结点的集合,每个结点代表一个基本块 (2) 含程序第一条语句的基本块为首结点n0 (3) E为有向边的集合,基本块Bi与Bj之间有一条有向边的条件是: Bj 紧跟在 Bi 之后,且 Bi 的出口语句不是无条件转向或停止语句。 Bi 的出口语句为转向语句,其转向点恰为 Bj 的入口语句。 四. 局部优化 局部优化就是基本块内的优化。局部优化包括以下几种方法: 1. 合并已知量 2. 删除公共子表达式 3. 删除无用赋值 4. 删除死代码 1. 合并已知量 对于语句: A := OP B 或 A := B OP C 若B和C为常数,则编译时可将A的值计算出来,存放在临时单元T中,相应语句换成: A := T 2. 删除公共子表达式 对于语句: A := B + C*D U := V – C*D如果两个语句之间C和D的值未改变,则第二个语句可使用第一个语句的计算结果T: A := B + C*D U := V – T 3. 删除无用赋值 如有语句: A := B + C …… A := M + N 在两个语句之间没有使用过A,则第一个语句可以删除: …… A := M + N 4. 删除死代码 语句: if B then S1 else S2 如果B的值固定为“真”或“假”,则其中一个分支永远不会执行,这些分支的代码时“死代码”,可以删除。 例题: (1) F:=1 (2) C:=F+E (3) D:=F+3 (4) B:=A*A (5) G:=B-D (6) H:=E (7) I:=H*G (8) J:=D/4 (9) K:=J+C (10) L:=H (11) L:=I-J 第一步:合并已知量,由(1) F:=1,可得: (1) F:=1 (2) C:=1+E (3) D:=4 (4) B:=A*A (5) G:=B-4 (6) H:=E (7) I:=H*G (8) J:=1 (9) K:=2+E (10) L:=H (11) L:=I-1 第二步:删除公共子表达式,由(6)将(7)改为: (1) F:=1 (2) C:=1+E (3) D:=4 (4) B:=A*A (5) G:=B-4 (6) H:=E (7) I:=E*G (8) J:=1 (9) K:=2+E (10) L:=H (11) L:=I-1 第三步:删除无用赋值 (10); 其它可能的无用赋值 (1)、(2)、(3)、(6)、(8)。 (4) B:=A*A (5) G:=B-4 (7) I:=E*G (9) K:=2+E (11) L:=I-1 五. 全局优化 循环优化是一种重要的全局优化方法。循环是程序中重复执行的代码序列,一个程序运行的大部分时间是用在循环上的,因此循环优化对提高程序的执行效率具有非常重要的意义。循环优化包括以下几种方法: 1. 代码外提 2. 强度削弱 3. 删除归纳变量 1. 代码外提 对x:=op y或x:=y op z,如果y、z均为循环不变量(常数或定值点在L之外),则该运算为循环不变运算,优化时将该运算提到循环入口结点之前所增设的结点中去。 2. 强度削弱 基本归纳变量:i := i ? c (c为常数) 同族归纳变量:j := c1*i ? c2 (c1、c2为常数) 基本归纳变量i每循环一次增加或减少c,与i同族的归纳变量
您可能关注的文档
- 成都理工大学商学院统计学课件第7章 方差分析.ppt
- 成都理工大学文法学院经济法学课件 第八章.ppt
- 成都理工大学文法学院经济法学课件 第二章.ppt
- 成都理工大学文法学院经济法学课件 第九章.ppt
- 成都理工大学文法学院经济法学课件 第六章.ppt
- 成都理工大学文法学院经济法学课件 第七章.ppt
- 成都理工大学文法学院经济法学课件 第三章.ppt
- 成都理工大学文法学院经济法学课件 第十二章.ppt
- 成都理工大学文法学院经济法学课件 第十六章.ppt
- 成都理工大学文法学院经济法学课件 第十三章.ppt
- [常州]2024年江苏常州经开区社会保障和卫生健康局下属事业单位招聘70人笔试历年参考题库(频考点试.docx
- [山东]2024年山东省通信管理局所属事业单位招聘笔试历年参考题库(频考点试卷)解题思路附带答案详解.docx
- [安顺]2025年贵州安顺市平坝第一高级中学免费师范生及高层次人才引进12人笔试历年参考题库(频考点.docx
- [广东]2024年广东文艺职业学院第三批合同制人员招聘笔试历年参考题库(频考点试卷)解题思路附带答案.docx
- [宜宾]2024年四川宜宾屏山县交通运输局招聘编外聘用人员2人笔试历年参考题库(频考点试卷)解题思路.docx
- [宜宾]2024年四川宜宾高县公安局招聘警务辅助人员16人笔试历年参考题库(频考点试卷)解题思路附带.docx
- [广州]广东广州海珠区司法局招聘雇员笔试历年参考题库(频考点试卷)解题思路附带答案详解.docx
- [广东]2024年岭南师范学院人才引进55人(第三批)笔试历年参考题库(频考点试卷)解题思路附带答案.docx
- [广元]四川广元市妇幼保健院招聘急需紧缺岗位工作人员7人笔试历年参考题库(频考点试卷)解题思路附带答.docx
- [宜昌]2024年湖北宜昌市兴山县事业单位进华中师范大学人才引进22人笔试历年参考题库(频考点试卷).docx
文档评论(0)