(+,D,E,F) (=,F, ,J) (*,3,F,G) (=,15, ,K) (+,15,J,L) (=,L, ,M)
10.2 对下面程序段画出程序流图,并进行循环优化。 I=1; J=10; K=5; L1:X=K*I; Y=J*I; Z=X*Y; I=I+1
IF I<100 GOTO L1; 解:程序流图如下: B1:I=1; J=10; K=5; B2:X=K*I; Y=J*I; Z=X*Y; I=I+1; IF I<100 GOTO B2; 从程序流图可知,要优化的循环是基本块B2。对循环B2中代码分别实行代码外提、强度删弱和删除归纳变量优化如下:
(1) 代码外提:循环中无不变运算、 (2) 强度删弱:由于循环中有 X=K*I; Y=J*I;
其中,K,J在循环中值不发生改变,I每次增加1。因此,对X,Y可进行强度删弱,将乘法运算(*)改为加法运算(+)。强度删弱后程序流图如下图所示:
Y
B1:I=1; J=10; K=5; B2’:X=K*I; Y=J*I; B2:Z=X*Y; X=X+K; Y=Y+J; I=I+1; IF I<100 GOTO B2; (3) 删除基本归纳变量:循环中I是基本归纳变量,X、Y是与I同族的归纳变量,且有
如下线性关系:
X=K*I; Y=J*I;
于是,条件I<100可用X