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