六.引例:优化主要方法简介 2.删除公共子表示式(删除多余运算) 如果一个表达式E在前面已计算过,并且在这之后E中 变量的值没有改变,则称E为公共子表达式。 对于公共子表达式,我们可以避免对它的重复计算,称 为删除公共子表达式(有时称删除多余运算)。 公共子表达式可以在基本块内,也可以在全局范围内消除
如果一个表达式 E 在前面已计算过,并且在这之后E 中 变量的值没有改变,则称 E 为公共子表达式。 2. 删除公共子表示式(删除多余运算) 对于公共子表达式,我们可以避免对它的重复计算,称 为删除公共子表达式(有时称删除多余运算)。 公共子表达式可以在基本块内,也可以在全局范围内消除
六。引例:优化主要方法简介 3.删除公共子表示式示例 m-】 T::-a[Tal 4* 1*i Ts-afTd] if Ts>v goto B 4*1 if goto Be T AL T4= 4*i T8:=4*j T8=T4 111.=41 11.=18
3. 删除公共子表示式示例 T6 := 4*i T7 := 4*i T7 := T6 T8 := 4*j T11 := 4*j T11 := T8 T2 := 4*i T6 := 4*i T6 := T2 T4 := 4*j T8 := 4*j T8 := T4
六。引例: 优化主要方法简介 4.复写传播(重复传送) T6:=T2(复写语句)把T2赋给T6,x:=a[T6]中引用了T6 的值,而这中间没有改变T的值。因此,可以把 x:=a[Ts]变换为x:=a[T2]这种变换称为复写传播。 “复写”强调了重复性,传播是由复写引起的 复写传播的目的是使对某些变量的赋值变为无用 换言之,将来可以删除这些无用赋值语句
T6:=T2(复写语句)把T2赋给T6,x:=a[T6]中引用了T6 的值,而这中间没有改变T6的值。因此,可以把 x:=a[T6]变换为x:=a[T2] 这种变换称为复写传播。 4.复写传播(重复传送) “复写”强调了重复性,传播是由复写引起的 复写传播的目的是使对某些变量的赋值变为无用 换言之,将来可以删除这些无用赋值语句
六。引例:优化主要方法简介 5.复写传播示例 左D)h右T·-T1 T6=T2 在B3中有T5:=a[T4] X=aT、l x:=T3 T8=T4 在B3中有T5:=aT4 3 163 T9:=a[T4l To:=Ts T11=T8 T ·一。T】 ·一T a[T a[T2]:To a[T2]:Ts a[T]:X a[T4]:x a[T4]:=T3
5.复写传播示例 T6 := T2 x := a[T6 ] x := a[T2 ] T6 := T2 T7 := T6 T7 := T2 T6 := T2 a[T7 ] := T9 a[T2 ] := T9 T7 := T6 T8 := T4 T9 := a[T8 ] T9 := a[T4 ] T8 := T4 T11 := T8 T11 := T4 T8 := T4 a[T11] := x a[T4 ] := x T11 := T8 在B2中有T3 := a[T2 ] x := a[T2 ] x := T3 在B2中有T3 := a[T2 ] a[T4 ] := x a[T4 ]:= T3 x := a[T2 ] 在B3中有T5 := a[T4 ] T9 := a[T4 ] T9 := T5 在B3中有T5 := a[T4 ] a[T2 ] := T9 a[T2 ] := T5 T9 := a[T4 ]
六。引例;优化主要方法简介 6.删除无用代码(删除无用赋值) 由于某些变量的值在整个程序中不再被使用,因 此,这些变量的赋值对程序运算结果没有任何作 用。我们可以删除对这些变量赋值的代码。我们 称之为删除无用赋值或删除无用代码
由于某些变量的值在整个程序中不再被使用,因 此,这些变量的赋值对程序运算结果没有任何作 用。我们可以删除对这些变量赋值的代码。我们 称之为删除无用赋值或删除无用代码。 6. 删除无用代码(删除无用赋值)