主观题:h0035. 对如下程序段划分基本块,画出流图,进行尽可能多的优化,并指出进行了何种优化,给出建议说明及优化后的结果形式。
对如下程序段划分基本块,画出流图,进行尽可能多的优化,并指出进行了何种优化,给出建议说明及优化后的结果形式。
I = 1
read J, K
L: A = K * I
B = J * I
C = A * B
write C
I = I + 1
if I < 100 goto L
答案:解答:
(1) 首先划分基本块并画出其程序流图,其中有三个基本块B1,B2,B3,有一条回边B2 → B2,相应的循环是{B2}。--------5分

(2) 强度削弱: 在B2中A和B为乘法运算,可以削弱它们的运算强度,变乘法为加法,优化结果如下图。--------5分

(3) 删除归纳变量:在循环中,i是循环的基本归纳变量,A,B是同族的归纳变量,且有线性关系,变换循环控制条件,流图如下。--------5分

(4) 代码外提:由于删除归纳变量后有R :=K * 100,是循环不变运算,可以提到前置结点B2'中。--------5分
I = 1
read J, K
L: A = K * I
B = J * I
C = A * B
write C
I = I + 1
if I < 100 goto L
答案:解答:
(1) 首先划分基本块并画出其程序流图,其中有三个基本块B1,B2,B3,有一条回边B2 → B2,相应的循环是{B2}。--------5分

(2) 强度削弱: 在B2中A和B为乘法运算,可以削弱它们的运算强度,变乘法为加法,优化结果如下图。--------5分

(3) 删除归纳变量:在循环中,i是循环的基本归纳变量,A,B是同族的归纳变量,且有线性关系,变换循环控制条件,流图如下。--------5分

(4) 代码外提:由于删除归纳变量后有R :=K * 100,是循环不变运算,可以提到前置结点B2'中。--------5分