编译原理第九章代码优化解说.ppt

图5–23 复写传播和删除无用赋值后的程序流图 a[T2] = T5 a[T4] = T3 goto B2 i=m-1 j=n T1=4*n v=a[T1] B1 i=i+1 T2=4*i T3=a[T2] if T3v goto B2 j=j-1 T4=4*j T5=a[T4] if T5v goto B3 if i=j goto B6 a[T2] = v a[T1] =T3 B2 B3 B4 B5 B6 F T F F T T 4.代码外提:没有可外提到循环之外的不变运算。 5.强度削弱 观察图5–23的内循环B3,可以把循环中计算T4值的乘法运算变为在循环前进行一次乘法运算而在循环中进行减法运算。同样,对循环B2中的T2=4*i也可以进行强度削弱。经过强度削弱后的程序流图如图5-24所示。 6.删除归纳变量 由图5–24可知,B2中T2与i之间保持着T2=4*i的线性关系;而B3中T4与j之间保持着T4=4*j的线性关系。在对T2=4*i和T4=4*j进行了强度削弱后,i和j仅出现在条件句if I≥j goto B6中。因此,可以变换归纳变量而把此条件句变换为:if T2≥T4 goto B6。经过这种变换,我们又可以将无用赋值i=i+1和j=j–1删去。最后如图5–25所示。试与开始时比较 图5–24 强度削弱后的程序流图 图5–25

文档评论(0)

1亿VIP精品文档

相关文档