《编译原理实践及应用》PPT教学课件-第7章 代码优化汇
第七章 代码优化 代码优化所地位和作用: 实际上很多地方可以对代码的执行效率进行改进,主要讲对中间代码的优化 优化分类 按阶段分: 与机器无关的优化--对中间代码进行 依赖于机器的优化--对目标代码进行 根据优化所涉及的程序范围分成: (1)局部优化:(基本块) (2)循环优化:对循环中的代码进行优化 (3)全局优化:大范围的优化 中间代码优化技术 优化工作 数据流分析(control-flow analysis) 控制流分析(data-flow analysis) 变换(transformations) 快速排序程序 void quicksort(int m,int n) { int i,j, v,x; if (nm) return; 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); } 入口语句: 1.程序的第一个语句;或者, 2.条件转移语句或无条件转移语句的转移目标语句(此处的转移语句包括各种控制的转向,如call,return,end,stop等) ;或者 3.紧跟在条件转移语句后面的语句。 练习 以快速排序的C代码为例: void quicksort(int m,int n) { int i,j, v,x; if (nm) return; 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; 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; 优化技术1—删除公共子表达式 如果表达式E已经在前面计算过,并在计算之后E的值没有改变,则称该表达式为公共子表达式。可以避免重复计算。 在更大的范围内删除4*i,4*j的计算,得到: 优化技术2—复写传播 T6:=T2 x=a[T6] T7:=T6 T8:=T4 T9=a[T8] a[T7]:=T9 T10:=T8 a[T10]:=x goto B2 T6:=T2 x=T3 T7:=T2 T8:=T4 T9=T5 a[T2]:=T5 T10:=T4 a[T4]:=T3 goto B2 优化技术3—删除无用代码 优化技术4——对程序进行代数恒等变换(合并已知量) T1:=2 …… T2:=4*T1 优化技术4—对程序进行代数恒等变换(降低运算强度) a) i*2 = 2*i = i+i = i2 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 优化技术4——对程序进行代数恒等变换(代数化简) x+0 = x 0+x = x x*1 = x 1*x = x 0/x = 0 x-0 = x b true = b b false = false b || true = true b || false = b 基本块的DAG表示及其应用 DAG Directed Acyclic Graph 有向无环路图 基本块的DAG是在结点上带有标记的DAG DAG表示了基本块的计算过程 叶结点表示标识符或常数的值,以标识符或常数作为标记 内部结点以运算符作为标记,表示运算结果 边表示了操作间的前驱和后继的关系 每个结点:附加标识符标记,可以是一个或多个标识符都具有该结点代表的值 基本块的DAG构造算法: 首先,DAG为空。 对基本块的每一四元式,依次执行1,2,3,4步: 1. 如果NODE(B)无定义,则构造一标记为B的叶结点并定义NODE(B)为这个结点; 如果当前四元式是0型,则记NODE(B)的值为n,
您可能关注的文档
- 《C++程序设计》课程设计说明书-电影院售票系统汇.doc
- 《C++语言程序设计》课程设计报告-学生信息查询系统汇.doc
- 《C++语言与面向对象的设计》习题及参考解答汇.doc
- 《C语言程序设计》课程设计报告-体育器材借还信息管理系统汇.doc
- 《C程序设计》实验报告汇.doc
- ZPW-2000A无绝缘轨道电路系统介绍汇.ppt
- 《C语言程序设计》课程设计报告-职工信息管理系统汇.doc
- XX集团公司可视通讯系统建议方案汇.doc
- 《C语言程序设计》课程设计报告-商品订购系统设计汇.doc
- 《DSP技术与应用》课程设计报告- 基于DSP的MP3播放器的设计汇.doc
- 2025年中国物流职业经理(CPLM)中级资格证书考试考前冲刺试题卷五.docx
- 苏教版高中化学必修第一册 02-专题2-第一单元-第2课时 蒸馏、萃取和分液 【答案讲评】.pptx
- 轻钢龙骨隔墙施工技术说明.docx
- 2025年二级秘书资格考试(理论知识)强化训练试题卷三.docx
- 2026届陕西咸阳武功县普集高级中学物理高三第一学期期末质量检测模拟试题含解析.doc
- 导乐运营合作方案.docx
- 猎头服务行业年终人才推荐总结【PPT文档课件】.pptx
- 音乐厅舞台灯光施工方案.docx
- 2025年中国物流职业经理(CPLM)中级资格证书考试经典试题卷四.docx
- 2025年二级秘书资格考试(专业能力)试题卷二.docx
原创力文档

文档评论(0)