91优化的主要种类 91.4复写传播 复写语句:形式为f=g的赋值 优化过程中会大量引入复写 复写传播变换的做法是在复写语句f=g后, 尽可能用g代表f B X=t3 at2=ts atl at4= t3 goto B2 goto B2
9.1 优化的主要种类 9.1.4 复写传播 • 复写语句:形式为f = g的赋值 • 优化过程中会大量引入复写 • 复写传播变换的做法是在复写语句f = g后, 尽可能用g代表f B5 x = t3 a[t2 ] = t5 a[t4 ] = t3 goto B2 x = t3 a[t2 ] = t5 a[t4 ] = x goto B2
91优化的主要种类 91.4复写传播 复写语句:形式为f=g的赋值 优化过程中会大量引入复写 复写传播变换的做法是在复写语句f=g后, 尽可能用g代表f 复写传播变换本身并不是优化,但它给其它 优化带来机会 常量合并(编译时可完成的计算)pi=314 死代码删除 y= pi 5
9.1 优化的主要种类 9.1.4 复写传播 • 复写语句:形式为f = g的赋值 • 优化过程中会大量引入复写 • 复写传播变换的做法是在复写语句f = g后, 尽可能用g代表f • 复写传播变换本身并不是优化,但它给其它 优化带来机会 – 常量合并(编译时可完成的计算) – 死代码删除 pi = 3.14 … y = pi 5
91优化的主要种类 915死代码删除 死代码是指计算的结果决不被引用的语句 些优化变换可能会引起死代码 例:为便于调试,可能在程序中加打印语句,测试 后改成右边的形式 debug=true debug= false if(debug) print if( debug) print∴ 靠优化来保证目标代码中没有该条件语句部分
9.1 优化的主要种类 9.1.5 死代码删除 • 死代码是指计算的结果决不被引用的语句 • 一些优化变换可能会引起死代码 例: 为便于调试,可能在程序中加打印语句,测试 后改成右边的形式 debug = true; | debug = false; . . . | . . . if (debug) print … | if (debug) print … 靠优化来保证目标代码中没有该条件语句部分
91优化的主要种类 915死代码删除 死代码是指计算的结果决不被引用的语句 些优化变换可能会引起死代码 例:复写传播可能会引起死代码删除 atl=t5 at2 at2=t5 at=t3 at=t3 goto B goto B goto B2
9.1 优化的主要种类 9.1.5 死代码删除 • 死代码是指计算的结果决不被引用的语句 • 一些优化变换可能会引起死代码 例:复写传播可能会引起死代码删除 B5 x = t3 a[t2 ] = t5 a[t4 ] = t3 goto B2 a[t2 ] = t5 a[t4 ] = t3 goto B2 x = t3 a[t2 ] = t5 a[t4 ] = x goto B2
91优化的主要种类 91.6代码外提 代码外提是循环优化的一种 循环优化的其它重要技术 归纳变量删除 强度削弱 例: while(<= limit-2) 代码外提后变换成 t=limit-2 while (i<=t
9.1 优化的主要种类 9.1.6 代码外提 • 代码外提是循环优化的一种 • 循环优化的其它重要技术 – 归纳变量删除 – 强度削弱 例:while (i <= limit − 2 ) … 代码外提后变换成 t = limit − 2; while (i <= t ) …