三:划分四元式程序为基本快的方法:(这里看起来比较抽象,大家跟着看后面的例题就会
理解)
对求出的每个入口语句,确定其所属的基本块。它是由
A一个入口语句到下一入口语句(不包括该入口语句)之间的语句序列 B一个入口语句到一转移语句(包括该转移语句)之间的语句序列 C 一个入口语句到一停语句(包括该停语句)之间的语句序列组成的
四:流图的画法:(这里看起来也比较抽象,大家跟着看后面的例题就会理解)
每个流图以基本块为结点。如果一个结点的基本块的入口语句是程序的第一条语句,则称此结点为首结点。如果在某个执行顺序中,有B1和B2 两个基本块,如果存在以下两种情况中的任意一种
1.有一个条件或无条件转移语句从B1的最后一条语句转移到B2的第一条语句; 2.在程序的序列中,B2紧接在B1的后面,并且B1的最后一条语句不是一个无条件转移语句。
我们就说B1是B2的前驱,B2是B1的后继,并从B1画一条有向边到B2 五:给出实际的例题(这是复习PPT上的例题) 给出程序的四元式表达形式,画出基本块和流图 (1) read C (2) A:=0 (3) B:=1 (4) A:=A+B (5) If B>=C goto (8) (6) B:=B+1 (7) goto (4) (8) write A (9) halt 解:
第一步是找出入口语句:(1)为程序的第一句; (4)为(7)的GOTO得来; (6)为(5)
的后一句;(8)为(5)的GOTO得来
第二步画基本块:(画基本块的方法是用方框把语句框起来,这里不好画,我没有框) (1)(2)(3)为一基本块(对应三种A的方法) (4)(5)为一基本块(对应B) (6)
(7)为一基本块(对应B) (8)(9)为一基本块(对应C) 第三步画流图:
3. 局部优化的方法
DAG是对基本块进行优化的有效工具 利用DAG可以实现局部优化 (1)合并已知量 (2)删除多余运算 (3)删除无用赋值
4. 不变运算的代码外提的条件
不变运算所在的结点是循环L所有出口结点的必经结点.
对于循环不变运算A:=B op C,只有A在循环中其他地方未再定值,才能把A:=B op C外提; 循环中所有A的引用点只有S中的A的定值才能到达。
5. 循环优化中的强度削弱的含义
把程序中执行时间较长的运算转换为执行时间较短的运算。 强度消弱主要是对与归纳变量有线性关系的变量赋值进行; 经过强度消弱后,循环中可能出现一些新的无用赋值; 对于消弱下标变量地址计算的强度非常有效
七、目标代码生成
? 目标代码一般有以下三种形式:
? 能够立即执行的机器语言代码。所有地址已经定位;
? 待装配的机器语言模块。执行时,由连接装配程序把它们和某些运行程序连接
起来,转换成能执行的机器语言代码;
? 汇编语言代码。尚须经过汇编程序汇编,转换成可执行的机器语言代码。
相关推荐: