常表达式局部优化 常表达式:任何时候都取固定常数值的表达式 处理思想:针对每个基本块,如果一个多元式的两 个分量的值已知,则计算其值,并删掉 相应的中间代码。 原理:常量定值表 ConstDef;(Var,Va) 基本块入口置 ConstDef为空 ◆对当前多元式的分量利用 ConstDef表进行值代换; ◆新多元式形如(o,A,B,t):如果A和B是常数, 则计算AωB的值v,并将(t,ν)填入 Cons Def表 形如( ASSIG,A,B):如果A是常数,则把(B,A) 填入 Cons Def表,若已有B项,只需修改其值; 否则从 ConsDefi中删除B的登记项
常表达式局部优化 常表达式:任何时候都取固定常数值的表达式 处理思想:针对每个基本块,如果一个多元式的两 个分量的值已知,则计算其值,并删掉 相应的中间代码。 原理:常量定值表ConstDef:(Var,Val)。 ❖ 基本块入口置ConstDef为空; ❖ 对当前多元式的分量利用ConstDef表进行值代换; ❖ 新多元式形如(,A, B,t):如果A和B是常数, 则计算AB的值v,并将(t,v)填入ConsDef表。 形如(ASSIG,A, B):如果A是常数,则把(B,A) 填入ConsDef表,若已有B项,只需修改其值; 否则从ConsDef中删除B的登记项
常表达式局部优化的例子 源程序中间代码 ConstDef优化后的代码 (ASSIGN, 1, a( a,1) (ASSIGN, 1, a) b:=a+1(ADDI,a,1,t1)(a,1)(t1,2) (ASS IGN, t1, b)( a, 1)(t1, 2)(b, 2)(ASS IGN, 2, b) a:-X (ASS|GN,x,a)(t1,2)(b,2) (ASSIGN, a, x) c:=b+5(ADD,b,5,t2)(t1,2)(b,2)(t2,7)( ( ASSIGN,t2,c)(t1,2)(b,2)(t2,7)(o,7) (ASSIGN, 7, c)
常表达式局部优化的例子 源程序 中间代码 ConstDef 优化后的代码 a:=1 (ASSIGN, 1,a) (a,1 ) (ASSIGN,1,a) b:=a+1 (ADDI,a,1,t1) (a,1)(t1,2) ( ) (ASSIGN,t1,b) (a,1)(t1,2)(b,2) (ASSIGN,2,b) a:=x (ASSIGN, x,a) (t1,2)( b,2) (ASSIGN,a,x) c:=b+5 (ADDI,b,5,t2) (t1,2)(b,2)(t2,7) ( ) (ASSIGN,t2,c) (t1,2)(b,2) (t2,7)(c,7) (ASSIGN,7,c)