- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
t4 = 0 ; f0 = t4; t5 = 1 ; f1 = t5; t6 = 2 ; i = t6 ; f0 = 0 ; f1 = 1 ; i = 2 ; x+0 = x 0+x = x x*1 = x 1*x = x 0/x = 0 x-0 = x i*2 = 2*i = i+i = i1 (“”为C语言中的移位运算符,表示左移一位) b) i/2 = (int)(i*0.5) c) 0-1 = -1 d) f*2 = 2.0 * f = f + f e) f/2.0 = f*0.5 基本块的入口可能是下述3种情况之一: (1)程序的第一个语句; (2)转移的目标语句; (3)条件语句之后的第一个语句。 例:对下列语句划分基本块 (1) read (C) (2) A:= 0 (3) B:= 1 (4) L1: A:=A + B (5) if B= C goto L2 (6) B:=B+1 (7) goto L1 (8) L2: write (A) (9) halt *信息学院 孙丽云 第7章 代码优化 7.1 优化概述 源程序经过词法分析、语法分析、语义分析等阶段的编译工作,得到与源程序功能等价的中间代码。但是,由于这种中间代码是“机械生成”的,必然存在效率不高,有冗余代码的现象,还需进行代码的优化。 代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。 代码优化的目的是:提高目标代码的质量。 代码优化 与机器无关的优化 ——在中间代码上进行 与机器有关的优化(窥孔优化) ——在目标代码上进行 局部优化 循环优化 全局优化 t1 = i * 5 ; t2 = t1 + 6 ; t3 = i * 5 ; t4 = b/t3 ; t5 = t2-t4; a=t5 t1 = i * 5 ; t2 = t1 + 6 ; t3 = t1 ; t4 = b/t3 ; t5 = t2-t4; a=t5 局部优化技术 ■ 删除公共子表达式 a = i * 5 + 6 – b/(i*5); t1 = 56 ; t2 = t1 – b ; a = t2 ; ■ 常数合并 a = 10 * 5 + 6 - b; t1 = 10 * 5 ; t2 = t1 + 6 ; t3 = t2 - b ; a = t3 ; ■ 常数传播 b true = b b false = false b || true = true b || false = b ■ 代数简化 ■ 降低运算强度 基本块:是指程序中顺序执行的语句序列。 基本块内的语句要么全执行,要么全不执行,而不能只执行一部分。 基本块只有一个入口和一个出口,只能从入口进入,出口退出,不存在转入、分支等操作。 局部优化——基本块内的优化 例:下面的三地址语句序列组成了一个基本块。 T1=a*a T2=T1+a T3=5+T2 为了叙述方便,本章将四元式写成更为直观的三地址代码形式。 基本块的出口可能是下述3种情况之一: (1)下一个入口语句的前导语句; (2)转移语句; (3)停语句。 ■ 基本块的入口 ■ 划分基本块的算法 1. 求基本块的入口语句; 2. 求基本块的出口语句; 3. 凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,把它们删除。 解:划分成四个基本块B1,B2,B3,B4 (1) (2) (3) (4) (5) (6) (7) (8) (9) B1 B2 B3 B4 B=C BC 基本块的入口: (1)程序的第一个语句; (2)转移的目标语句; (3)条件语句之后的第一个语句。 基本块的出口: (1)下一个入口语句的前导语句; (2)转移语句; (3)停语句。 ■ 练习 1、将下面程序划分为基本块并作出其程序流图: read(A,B) F=1 C=A*A D=B*B if (CD) goto L1 E=A*A F=F+1 E=E+F write(E) halt L1: E=B*B F=F+2 E=E+F write(E) if (E100) goto L2 halt L2: F=F-1 goto L1 19 F=F+1 ■ 思考 有语句如下: while(A || C E) if(x= =0) x=y*z; else x=y+z; z=x; (1)求其四元式序列; (2)对四元式序列划分基本块且画出程序流图。 ■ 基本块的DAG表示及其应用 DAG是一种有向无环图,常用来对基本块进行优化。基本块内一般可实行3种优化:合并已知
文档评论(0)