7.3基本块和流图 7.3.3流图 。 把控制流信息加到基本块集合,形成一个有 向图来表示程序 流图中的节点 初始结点、前驱、后继
7 3. 基本块和流图 7.3.3 流图 • 把控制流信息加到基本块集合,形成 个有 一 向图来表示程序 • 流图中的节点 初始结点、前驱、后继
7.3基本块和流图 ·什么是循环? - - 所有结点是强连通的 唯一的循环入口 4*1 ·外循环和内循环 alti] 25456 ==== bl t4 B2 prod + prod = +1 i= if i <20 goto B2
7 3. 3 基本块和流图 prod = 0 • 什么是循环 ? – 所有结点是强连通的 prod = 0 i=1 B 1 所有结点是强连通的 – 唯一的循环入口 t 1 = 4 i • 外循环和内循环 1 t 2= a[t 1 ] t 3 = 4 i t b[t ] 4 = 3 ] t 5 = t 2 t 4 t = prod + t B 2 t 6 = prod + t 5 prod = t 6 t 7 = i + 1 i=t 7 i f i <= 20 goto B 2
7.3基本块和流图 7.3.4下次引用信息 为每个三地址语句x=yopz决定x、y和z的下 次引用信息 i:x =yopz 一一没有对x的赋值 =X -一没有对x的赋值 k:
7 3. 基本块和流图 7.3.4 下次引用信息 • 为每个三地址语句 为每个三地址语句x = y op z决定x、y和z的下 次引用信息 i: x = y op z ... 没有对x的赋值 j: … = x … ... 没有对x的赋值 k: … = … x
7.3基本块和流图 ·对每个基本块从最后一个语句反向扫描到第 一个语句,可以得到下次引用信息 i:x =yopz -一没有对x的赋值 i: 三X -一没有对x的赋值 k: 。。 X 利用下次引用信息,可以压缩临时变量需要 的空间
7 3. 基本块和流图 • 对每个基本块从最后一个语句反向扫描到第 一个语句,可以得到下次引用信息 i: x = y op z ... 没有对x的赋值 j: … = x … ... 没有对x的赋值 k: … = … x • 利用下次引用信息,可以压缩临时变量需要 的空间
7.4一个简单的代码生成器 基本考虑: 依次考虑基本块的每个语句,为其产生代码 假定三地址语句的每种运算都有对应的目标 机器指令 假定计算结果尽量长时间地留在寄存器中, 除非: 该寄存器要用于其他计算,或者 到基本块的出口点
7 4. 一个简单的代码生成器 基本考虑: • 依次考虑基本块的每个语句,为其产生代码 • 假定三地址语句的每种运算都有对应的目标 机器指令 • 假定计算结果尽量长时间地留在寄存器中, 除非: – 该寄存器要用于其他计算,或者 – 到基本块的出口点