(1)P:=0 (1)P:=0 (2)l:=1 (4)T2:=adr(A)-4 (4T2: -addr(A)-4 (⑦)Ts=addr(B)-4 (Ts:addr(B)-4 3)T1:=4 3)T1=4 5)T3:=T2 (5)T3:=T2T 6 (8)T6:=Ts[T1 (9)T7 316 10)P:=P+T (10)P:=P+T7 (11)l:=H+1 (3)T1:=T1+4 (3)T1:=T1+4 12if T<=80 goto(5) (12)ifT1<=80goto(5)
(1)P:=0 (2)I:=1 (4)T 2 :=addr(A) - 4 (7)T 5 :=addr(B) - 4 (3)T 1 :=4 (5)T 3 :=T 2 [T 1 ] (6)T 4 :=T 1 (8)T 6 :=T 5 [T 1 ] (9)T 7 :=T 3*T 6 (10)P:=P+T 7 (11)I:=I+1 (3’)T 1 :=T 1+4 (12)if T 1<=80 goto(5) (1)P:=0 (4)T 2 :=addr(A) - 4 (7)T 5 :=addr(B) - 4 (3)T 1 :=4 (5)T 3 :=T 2 [T 1 ] (8)T 6 :=T 5 [T 1 ] (9)T 7 :=T 3*T 6 (10)P:=P+T 7 (3’)T 1 :=T 1+4 (12)if T 1<=80 goto(5)
112局部优化:基本块内的优化 基本块:是指程序中一顺序执行的语句序列,其中只有一个入 口语句和一个出口语句。 入口语句: 程序的第一个语句;或者, 2.条件转移语句或无条件转移语句的转移目标语句;或者 3.紧跟在条件转移语句后面的语句
11.2 局部优化:基本块内的优化 基本块:是指程序中一顺序执行的语句序列,其中只有一个入 口语句和一个出口语句。 入口语句: 1.程序的第一个语句;或者, 2.条件转移语句或无条件转移语句的转移目标语句;或者 3.紧跟在条件转移语句后面的语句
划分基本块的算法: 1.求出四元式程序之中各个基本块的入口语句。 2.对每一入口语句,构造其所属的基本块。它是由该语句到 下一入口语句(不包括下一入口语句),或到一转移语句 (包括该转移语句),或到一停语句(包括该停语句)之 间的语句序列组成的 3.凡未被纳入某一基本块的语句,都是程序中控制流程无法 到达的语句,因而也是不会被执行到的语句,我们可以把 它们删除
划分基本块的算法: 1.求出四元式程序之中各个基本块的入口语句。 2.对每一入口语句,构造其所属的基本块。它是由该语句到 下一入口语句(不包括下一入口语句),或到一转移语句 (包括该转移语句),或到一停语句(包括该停语句)之 间的语句序列组成的。 3.凡未被纳入某一基本块的语句,都是程序中控制流程无法 到达的语句,因而也是不会被执行到的语句,我们可以把 它们删除
(1) read(C) (2) AB 0 (4)L1:A:=A+B (5) if B>=c goto L2 (6)B:=B+1 goto LI (8 )L2: write(A)
(1) read (C) (2) A:= 0 (3) B:= 1 (4) L1: A:=A + B (5) if B>= C goto L2 (6) B:=B+1 (7) goto L1 (8) L2: write (A) (9) halt
划分成四个基本块B1,B2,B3,B4 B1「(I (2) 3) 基本块内实行的优化:合并已知量 删除多余运算 B2(4 删除无用赋值 (5) B3(6) B4(8) (9)
划分成四个基本块 B1,B2,B3,B4 B1 (1) (2) (3) 基本块内实行的优化:合并已知量 删除多余运算 B2 (4) 删除无用赋值 (5) B3 (6) (7) B4 (8) (9)