编译原理chapter10-11(2016.06.27)详解.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter10 优化;10.1 概述;优化主要为两类:;10.1 概述;例: void quicksort(int m,int n) { 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; quicksort(m,j); quicksort(i+1,n); };快速排序;i=m-1; j=n ; T1=4*n; v=a[T1];;1. 删除公共子表达式(多余运算);2. 复写传播;3. 删除无用代码;4. 代码外提;6. 删除归纳变量;经前述各种优化处理后,最终的中间代码如下:;1. 删除公共子表达式(多余运算);10.2 局部优化;②对以上入口语句,构造其所属的基本块: 此入口语句到下一条入口语句前,或下一条跳转 语句前,或一条停语句前的语句序列组成一个基本块。;例: (5) x=y (1) read x (6) y=R (2) read y (7) goto (3) (3) R=x%y (8) write y (4) if R=0 goto (8) (9) halt ;对基本块内的语句可以进行如下一些优化变换:;2. 基本块的DAG表示及其应用;构造基本块的DAG的算法:;2型:A=B OP C 或 A=B[C] 1.NODE(B)无定义,则构造叶结点B; NODE(C)无定义,则构造叶结点C; 2.若B,C均为常数,则计算B OP C= P, 若NODE(P)无 定义,则构造叶结点n, NODE(P)=n, 执行0型2。 3.若B,C不是常数,查有无 B OP C 子树: 有:设 NODE(OP)=n, 执行0型2; 无:构造n结点OP, 执行0型2 。;(0) A:=B;(3) A:=B[C];例: T0=3.14 T1=2*T0 T2=R+r A=T1*T2 B=A T3=2*T0 T4=R+r T5=T3*T4 T6=R-r B=T5*T6 ;假设T0--T6在基本块后不再使用,即可删除对其的赋值, 得到如下代码:;例题(自学);;;10.3 循环优化 对循环中的代码可以实行代码外提、强度削弱和删除归纳变量等优化。 1.代码外提 循环中的代码要随着循环反复执行,但其中某些运算的结果并不因循环而改变,对于这种不随循环变化的运算,可以将其外提到循环外。这样,程序的运行结果仍保持不变,但程序的运行效率却提高了。我们称这种优化为代码外提。 ; 实行代码外提时,在循环入口结点前面建立一个新结点(基本块),称为循环的前置结点。循环前置结点以循环入口结点为其唯一后继,原来流图中从循环外引到循环入口结点的有向边改成引到循环前置结点,如图10.10所示。 因为在我们所定义的循环结构中,其入口结点是唯一的,所以前置结点也是唯一的。循环中外提的代码将统统外提到前置结点中。 ;;但是,循环中的不变运算并不是在任何情况下都可以外提的;对循环L中的不变运算: S:A=B op C或A= op B或A=B,要求满足下述条件(A在离开循环L后仍是活跃的): (1) S所在的结点是循环L的所有出口结点的必经结点; (2) ?A在循环L中其它地方未再定值; (3) ?循环L中的所有A的引用点只有S中A的定值才能到达。 例 p288-289 图10.11-14。 ;Chapter11 目标代码生成;11.1 基本问题;编译前端;基本问题;例 现有赋值语句: A:=(B+C)*D+E 其对应的中间码: T1:=B+C T2:=T1*D A:=T2+E ; 为此,我们引进 “待用信息”、“寄存器描述数组”、 “变量地址描述数组”等数据结构,记录所需信息。;第十二章 并行编译基础 ;并行编译器的组成及任务;并行与分布计算技术是实现高性能计算的重要技术途径。高性能计算机技术是现代科学研究、工程技术开发和大规模

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档