快乐学习 一个网站喵查铺子(catpuzi.com)全搞定~

对以下程序,给出四元式形式的中间代码,并进行可能的代码优化,给出优化后的代码程序。 (1)D=D

热门题目 网课答案 2023-03-20 扫描二维码

题目:对以下程序,给出四元式形式的中间代码,并进行可能的代码优化,给出优化后的代码程序。 (1)D=D

对以下程序,给出四元式形式的中间代码,并进行可能的代码优化,给出优化后的代码程序。 (1)D=D+C*B A=D+C*B C=D+C*B (2)J=1 B=(5*J-2)+J (3)for I=1 to 10 do x=2*J+I

喵查答案:(1)四元式表示如下所示:
题目给出的代码段中包含三个语句,且都含有C*B和D+C*B;值得注意的是,第一个赋值表达式中对D进行了重定值,因此第一个表达式D=D+C*B中的D+C*B和后续两个赋值表达式中的D+C*B并不相同。三个语句中都包含了C*B,且中间没有对C和B进行重定值,因此C*B是出现在三个语句中的公共子表达式。通过上面的分析可以看出,语句D=D+C*B中的子表达式C*B的结果可以在第二个语句中直接使用;而第二个语句A=D+C*B中D+C*B的计算结果可以直接在第三个语句中使用。(2)J的初值为常量,计算B的表达式中包含了常量和对变量J的引用,因此B的值在编译时就可以确定。(3)循环中只有一个赋值表达式,由于J的定值点在循环外,因此可以将子表达式2*J的计算提至循环外。这样降低循环体的复杂度。但是由于循环的边界是常量,且循环次数较少,因此将循环展开,将会得到如下代码:x=2*J+1;x=2*J+2;x=2*J+3;x=2*J+4;x=2*J+5;x=2*J+6;x=2*J+7;x=2*J+8;x=2*J+9:x=2*J+10;观察展开的代码可以发现,x的两次定值之间没有对x的引用,因此前9次对x的定值都是无用赋值。可以采用删除无用赋值的方式将前9条语句删除,留下最后一条语句即可。
喜欢 (0)
关于作者: