logo资料库

编译原理课后第十章答案.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
10.1 对下列基本块应用 DAG 进行优化: (=,3, ,B) (+,A,C,D) (*,A,C,E) (+,D,E,F) (*,B,F,G) (+,A,C,H) (*,A,C,I) (+,H,I,J) (*,B,5,K) (+,K,J,L) (=,L, ,M) 解:构造 DAG 如下: G n7 * L,M n9 + B n1 3 K n8 15 F,J n6 + D,H E,I n4 + n5 * n2 A n3 C 按照上图的 DAG 结点顺序,优化后生成的程序如下: (=,3, ,B) (+,A,C,D) (=,D, ,H) (*,A,C,E) (=,E, ,I) (+,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 可进行强度删弱,将乘 法运算(*)改为加法运算(+)。强度删弱后程序流图如下图所示: 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
分享到:
收藏