第七章 中间代码优化 优化方法概述 基本块划分 常量表达式优化 公共表达式优化 循环不变式外提.

Slides:



Advertisements
Similar presentations
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
Advertisements

阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
第一章 有理数 一.本章学习目标 1.理解有理数的意义,能用数轴上的点表示有理数,能比较有理数的大小.
这是一个数字的 乐园 这里埋藏着丰富的 宝藏 请跟我一起走进数学的 殿堂.
肖 冰 深圳市达晨创业投资有限公司 副总裁 深圳市达晨财信创业投资管理公司 总裁
我为何为我?——那些历史并没有消失,它们就存在于我们心灵最隐秘的地方,时时在引导我们的行为准则,在操纵着我们的喜怒哀乐。
诸葛亮广场.
主题七 关注三农,重视民生 .
食品营养成分的检验. 食品营养成分的检验 科学探究的一般过程: 形成假设 设计方案 收集数据 表达交流 处理信息 得出结论 探究:馒头和蛋糕中是否含有淀粉和脂肪 假设:馒头和蛋糕中含有淀粉和脂肪.
1.1.2 四 种 命 题.
第六课 我们的 中华文化.
故事:《一叶障目新编》 思考: 俊媳妇为什么能优雅地拿走东西?书呆子为什么会羞愧万分?
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
第八章二元一次方程组 8.3实际问题与二元一次方程组.
苏教版小学数学六年级(下册) 认识正比例的量 执教者:朱勤.
第八章二元一次方程组 8.3实际问题与二元一次方程组 (第3课时).
幼儿心理学.
在PHP和MYSQL中实现完美的中文显示
霸气车辆.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
6 下标变量的中间代码生成 下标:数组;变量: 下标变量:即数组分量: 简单变量:id,其地址可查到;
走进编程 程序的顺序结构(二).
元素替换法 ——行列式按行(列)展开(推论)
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第4章 非线性规划 一维搜索方法 2011年11月.
第二章 Java语言基础.
动态规划(Dynamic Programming)
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
使用矩阵表示 最小生成树算法.
绿色圃中小学教育网 绿色圃中小学教育网
第九章 目标代码生成.
第六章 中间代码生成 主要内容 常见的中间代码结构 语法制导方法概论 四元式中间代码生成过程.
第4章 PHP流程控制语句.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
Partial Differential Equations §2 Separation of variables
4 公共表达式局部优化 设有下列语句: t := b * c ; e := b * c + b * c ;
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
 复 习 1. 曲线的方程和方程的曲线。 2. 求曲线方程的步骤。.  复 习 1. 曲线的方程和方程的曲线。 2. 求曲线方程的步骤。
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
1.2 有理数 第1课时 有理数 伏家营中学 付宝华.
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
3.1.2 空间向量的数量积运算 1.了解空间向量夹角的概念及表示方法. 2.掌握空间向量数量积的计算方法及应用.
树和图 tree and graph 蔡亚星.
College of Computer Science & Technology
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第七、八次实验要求.
第二章 Java基本语法 讲师:复凡.
第7章 代码优化 学习目标: 掌握:基本块的划分、基本块的DAG优化 理解:什么是局部优化、循环优化、全局优化 了解:循环优化技术.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
正弦、余弦函数的性质 华容一中 伍立华 2017年2月24日.
4.7 二倍角的正弦、 余弦、正切.
§4 连续型随机变量.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
6.1.1 平方根.
第四章 UNIX文件系统.
插入排序的正确性证明 以及各种改进方法.
编译原理实践 6.程序设计语言PL/0.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
99 教育部專案補助計畫案明細 大類 分項 教育部補助 學校配合款 工作項目 計畫主 持人 執行期限 文號 備註 設備費 業務費 管理學院
Presentation transcript:

第七章 中间代码优化 优化方法概述 基本块划分 常量表达式优化 公共表达式优化 循环不变式外提

1 优化方法概述 优化的目标:提高程序的质量,尤其是程序的运行速度。 优化的要求: 1.优化要保证程序的正确性; 1 优化方法概述 优化的目标:提高程序的质量,尤其是程序的运行速度。 优化的要求: 1.优化要保证程序的正确性; 2.优化后要使程序的运行速度有数量级上的提高; 3.优化要适度。 优化的对象:主要针对循环内下标变量地址的计算.

中间代码优化的分类 源程序阶段的优化: 用户基于候选算法的时间复杂度和空间复杂度的比较而作出选择。 编译阶段的优化 1.编译前端的中间代码级的优化: (1) 局部优化:基本块内的优化。 ①常表达式优化(合并常数项) ②公共表达式优化(消除重复操作) (2)非局部优化:涉及的范围比基本块要大。 ①循环上的优化:循环不变表达式外提; ②全局优化; 2.编译后端的目标代码级的优化:有效而合理地使用机器资源,或者减少目标程序指令个数来提高执行效率。

2 基本块划分 基本块是指程序的一组顺序执行的语句序列,其中只有一个出口和一个入口。 入口:基本块的第一条语句; 出口:基本块的最后一条语句; 语句1 语句1 语句1 语句2 语句2 语句2 语句n 语句n 语句n

基本块划分 对于一个基本块而言,执行时只能从它的入口进入,从出口退出; 一个基本块内部的语句要么全执行,要么全不执行,不能执行其中的一部分,不能在中间转出,也不能从中间转入。 基本块可以基于源代码、中间代码和目标代码。

标号性中间代码:也称定位性四元式,起到一个定位的作用不产生跳转指令。例如: ( LABEL , — , — , L ) ( ENTRY , Label , Size , Level ) ( WHILE , — , — , —) ( ENDIF , — , — , —)

转移性中间代码:在生成目标代码时一定产生跳转指令的四元式。例如: ( JMP , — , — , L ) ( ENDPROC , — , — , — ) ( ENDFUNC , — , — , — ) ( THEN , E , — , — ) ( ELSE , — , — , —) ( DO , E , — , —) ( ENDWHILE , — , — , — )

基于四元式中间代码基本块的划分原则 初始四元式为第一个基本块的入口; 遇到转移性中间代码时,结束当前基本块,并把该转移性中间代码作为当前基本块的出口,下一条代码作为新基本块的入口; 遇到标号性代码结束当前基本块,代码本身作为新基本块的入口; 遇到(ASSIG, A, - ,X)时,如果X为引用型变量时结束当前块,并作为该块的出口。(*X=…) 第4条是为了避免对X指向的地址变量进行错误的局部优化决定。如a=10; X=&a ,*p=20, 这时的a不是不变表达式,但如何判断a是否改变困难。

基本块划分的例子 设有源程序如下: (ASSIGN,1,_, y ) (LABEL,_ ,_ ,L) (AND,A, B, t0 ) (THEN,t0 ,-,-) (ASSIG, 0, _,x ) (ELSE,-,-,-) (ASSIG,0, _,y ) (ENDIF,-,-,-) (ADDI, x, 1, t1) (ASSIG,t1,_, x ) (SUBI y, 1, t2 ) (ASSIGN, t2, _,y) (WHILE,-,-,-) (ADDI, x, y,t3 ) (GT, t3, 0, t4 ) (DO,t4,-,-) (SUBI, x, 1,t5 ) (ASSIG, t5, x ) (ENDWHILE,-,-,-) (ASSIGN, 0,_ ,Z ) 设有源程序如下: y := 1 ; L: if A and B then x := 0 else y := 0 ; x := x + 1 ; y := y – 1 ; while x + y > 0 do x := x - 1 ; z := 0 ; 注:x,y为非引用型整数类型形参。

(ASSIG,1,-,y) (SUBI,y,1,t2) B1 (LABEL,-,-,L) (ASSIG,t2,-,y) (AND,A,B,t0) (THEN,t0,-,-) (ASSIG,0,-,x) (ELSE,-,-,-) (ASSIG,0,-,y) (ENDIF,-,-,-) (ADDI,x,1,t1) (ASSIG,t1,-,x) (SUBI,y,1,t2) (ASSIG,t2,-,y) (WHILE,-,-,-) (ADDI,x,y,t3) (GT,t3,0,t4) (DO,t4,-,-) (SUBI,x,1,t5) (ASSIG,t5,-,x) (ENDWHILE,-,-,-) (ASSIG,0,-,z) B1 B2 B6 基本块划分的例子 B3 B4 B7 B5 B8

程序流图 B1 B2 B3 B4 B5 B6 B7 B8 程序流图是以基本块为节点的有向图。 B1:(ASSIGN,1,_, y ) B6:(WHILE, -, -, -) B2:(LABEL,_ ,_ ,L) (ADDI, x,y,t3 ) (AND,A, B, t0 ) (GT, t3, 0, t4 ) (THEN, t0 , - ,- ) (DO, t4, -, - ) B3:(ASSIGN, 0, _,x ) B7:(SUBI, x, 1,t5 ) (ELSE, -, -,- ) (ASSIGN, t5, x ) B4:(ASSIG,0, _,y ) (ENDWHILE, -, -, -) B5: (ENDIF, - ,- ,-) B8 :( ASSIGN, 0 ,_ , z ) (ADDI, x, 1, t1) (ASSIGN,t1, _ , x ) (SUBI ,y, 1, t2 ) (ASSIGN, t2, _,y) B2 B3 B4 B5 B6 程序流图是以基本块为节点的有向图。 B7 B8

3 常表达式节省 常表达式:任何时候都取固定常数值的表达式。 优化范围通常为基本块。 处理思想:针对每个基本块,如果一个四元式的两 个分量的值已知,则由编译器将其值计 算出来,并用所求的值替换原来的运算结 果变量,并删掉相应的中间代码。

例:假设有下列语句: m:=10; a := m + 10 ; b := a + m ; c := a + b – d ; 则上列语句可优化如下: a := 20 ; b := 30 ; c := 50 – d ;

常表达式节省 原理: 常量定值表ConstDef:表元素为二元组(Var,Val)。如果在ConstDef中有元素(V,c),表示变量此时一定取常数值c,在V被更改之前出现的V均可替换成c。

常表达式节省 基本块上常量表达式的局部优化算法: 基本块入口置ConstDef为空; 读当前四元式; 对当前四元式的分量利用ConstDef表进行值代换得新四元式newtuple; 如果新多元式newtuple 形如(,A, B,t): 若A和B是常数,则计算AB的值v,并将(t,v)填入ConsDef表。删除当前四元式。 如果新多元式newtuple形如(ASSIG,A, -, B): 如果A是常数,则把(B,A)填入ConsDef表,若已有B项, 只需修改其值;否则(A为非常数)从ConsDef中删除B的登记 项。 重复②~⑤直到基本块结束。

常表达式局部优化的例子 优化后中间代码 (ASSIG,10,-,x) (ASSIG,11,-,y) (ASSIG,a,-,x) ConDef 中间代码 优化后中间代码 (ASSIG,10,-,x) (ASSIG,11,-,y) (ASSIG,a,-,x) (ASSIG,16,-,z) 源程序 x := 10 y := x+1; x:=a; z:=y+5; x 10 (ASSIG,10,-,x) (ADDI,x,1,t1) (ASSIG,t1,-,y) (ASSIG,a,-,x) (ADDI,y,5,t2) (ASSIG,t2,-,z) t1 11 10 11 y 11 t2 16 11 z 16 16