编译原理分知识点习题 代码优化Word文档下载推荐.docx

上传人:b****2 文档编号:15372683 上传时间:2022-10-29 格式:DOCX 页数:22 大小:145.12KB
下载 相关 举报
编译原理分知识点习题 代码优化Word文档下载推荐.docx_第1页
第1页 / 共22页
编译原理分知识点习题 代码优化Word文档下载推荐.docx_第2页
第2页 / 共22页
编译原理分知识点习题 代码优化Word文档下载推荐.docx_第3页
第3页 / 共22页
编译原理分知识点习题 代码优化Word文档下载推荐.docx_第4页
第4页 / 共22页
编译原理分知识点习题 代码优化Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

编译原理分知识点习题 代码优化Word文档下载推荐.docx

《编译原理分知识点习题 代码优化Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编译原理分知识点习题 代码优化Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

编译原理分知识点习题 代码优化Word文档下载推荐.docx

(1)(:

=,20,a)

(2)(+,a,10)

(3)(*,a,

(2))

(4)(:

=,a,b)

(5)(*a,b)

(6)(:

=,(5),c)

合并常量后的三元式序列为:

=,20,a)

(2)(:

=,600,b)

(3)(:

=,12000,c)

3、试写出算术表达式

a+b*c-(c*b+a-e)/(b*c+d)

优化后的四元式序列。

该表达式的四元式序列为:

(1)(*,b,c,T1)

(2)(+,a,T1,T2)

(3)(*,c,b,T3)

(4)(+,T3,a,T4)

(5)(-,T4,e,T5)

(6)(*,b,c,T6)

(7)(+,T6,d,T7)

(8)(/,T5,T7,T8)

(9)(-,T2,T8,T9)

可对该表达式进行删除公共子表达式的优化。

优化后的四元式序列为:

(3)(-,T2,e,T5)

(4)(+,T1,d,T7)

(5)(/,T5,T7,T8)

(6)(-,T2,T8,T9)

4.设有算术表示式

(a*b+c)/(a*b-c)+(c*b+a-d)/(a*b+c)

试给出其优化后的三元式序列。

该算术表达式的三元序列为:

(1)(*,a,b)

(2)(+,

(1),c)

(3)(*,a,b)

(4)(-,(3),c)

(5)(/,

(2),(4))

(6)(*,c,b)

(7)(+,(6),a)

(8)(-,(7),d)

(9)(*,a,b)

(10)(+,(9),c)

(11)(/,(8),(10))

(12)(+,(5),(11))

可对其进行删除公共子表达式的优化。

优化后的三元式列为:

(1)(*,a,b)

(2)(+,

(1),c)

(3)(-,

(1),c)

(4)(/,

(2),(3))

(5)(*,c,b)

(6)(+,(5),a)

(7)(-,(6),d)

(8)(/,(7),

(2))

(9)(+,(4),(8))

5.试对以下基本块B1和B2应用DAG进行优化

B1:

A:

=B*C

D:

=B/C

E:

=A+D

F:

=E*2

G:

H:

=G*G

=H*G

L:

=F

M:

=L

B2:

B:

=3

=A+C

=A*C

=D+E

=B*F

I:

J:

=H+I

K:

=B*5

=K+J

并就以下两种情况分别写出优化后的四元式序列:

(1)假设G、L、M在基本块后面要被引用;

(2)假设只有L在基本块后面要被引用。

解答:

一般应用DAG在一个基本块内可以进行三种优化:

合并常量、删除无用赋值以及多余运算。

对于基本块B1,其DAG如图7.1所示。

F,L,M*

E

*+

 

H*A,GD

*/

BC2

图7.1基本块B1的DAG图

优化后的四元式序列如下:

(1)若只有G、L、M在基本块后面要被引用

=B*C或G:

=G*GS:

=H*GL:

=S*G

=LM:

=L(S为临时变量)

(2)若只有L在基本块后面要被引用

G:

=B*C或S1:

=G*GS2:

=S1*S1

=S2*S1(S1、S2为临时变量)

对于基本块B2,其DAG如图7.2所示。

GL,M

*F,J+

+

D,HE,L

+*

BK

3AC15

图7.2基本块B2的DAG图

D:

E:

F:

=3*F

L:

=F+15

M:

(2)若只有L在基本块后面要被引用

=A+C或S1:

=A*CS2:

=D+ES3:

=S1+S2

=F+15L:

=S3+15

(S1、S2、S3为临时变量)

6.对于基本块P

S0:

=2

S1:

=3/S0

S2:

=T-C

S3:

=T+C

R:

=S0/S3

=R

S4:

=3/S1

S5:

S6:

=S4/S5

H:

=S6*S2

(1)试应用DAG进行优化。

(2)假定只有R、H在基本块出口是活跃的,试写出优化后的四元式序列。

(3)假定只有两个寄存器R0、R1试写出上述优化后的四元式序列的目标代码。

(1)构造DAG如图7.3所示。

H

R,,S6

S2

/-

S3,S5

S0,S4S1

21.5TC

图7.3基本块P的DAG图

优化后的四元式序列为:

S0:

S4:

=1.5

S5:

=S3

R:

=2/S3

(2)若只有R、H在基本块出口是活跃的,优化后的四元式序列为:

S2:

=R*S2

(3)假定只有两个寄存器R0、R1,上述优化后的四元式序列的目标代码为:

LDR0T

SUBR0C

STR0S2

ADDR0C

LDR12

DIVR1R0

LDR0S2

MULR1R0

STR1H

7.设有入图7.4所示的程序流程图:

图7.4程序流图

(1)求出流图中各个结点n的必经结点集D(n);

(2)求出该流图中的回边;

(3)求出该流图中的循环。

(1)在程序流图中,对任意的结点ni和nj,如果从流图的首结点出发,到达nj的任一通路都必须经过ni,则称ni是nj的必经结点,记为niDOMnj。

流图中结点n的所有必经结点称为结点n的必经结点集,记为D(n)。

流图中各结点n的必经结点集D(n)为:

D(B1)={B1}

D(B2)={B1,B2}

D(B3)={B1,B2,B3}

D(B4)={B1,B2,B3,B4}

D(B5)={B1,B2,B3,B5}

D(B6)={B1,B2,B3,B6}

D(B7)={B1,B2,B7}

D(B8)={B1,B2,B7,B8}

(2)流图的回边是指:

若a→b是流图中一条有向边,且有bDOMa,则称a→b是流图的一条回边。

题目所给流图中,有有向边B7→B2,又有D(B7)={B1,B2,B7},所以,B2DOMB7,

即B7→B2是流图的回边。

且无其他回边。

(3)该流图中的循环可利用回边求得。

如果以知有向边n→d是一回边,由它组成的循环就是由结点d、结点n以及有通路到达n而该通路不经过d的所有结点组成,且d是该循环的唯一入口结点。

题目所给出流图中,只有一条回边B7→B2,在该流图中,凡是不能经过结点B2有通路到达结点B7的结点,只有B3,B4,B5,B6,所以,由回边B7→B2组成的循环是{B2,B3,B4,B5,B6,B7}。

8.(中国科学院计算机所1997年)试画出如下中间代码序列的程序流图,并求出:

(1)各结点的必经结点集合D(n);

(2)流图中的回边与循环。

J:

=0;

L1:

ifI<

8gotoL3;

L2:

=B+C;

=D*C;

L3:

ifB=0gotoL4;

WriteB;

gotoL5;

L4:

=I+1;

8gotoL2;

L5:

=J+1;

ifJ<

=3gotoL1;

HALT

程序的流图入图7.5所示。

(1)各结点的必经结点集分别为:

D(n0)={n0}

D(n1)={n0,n1}

D(n2)={n0,n1,n2}

D(n3)={n0,n1,n3}

D(n4)={n0,n1,n3,n4}

D(n5)={n0,n1,n3,n5}

D(n6)={n0,n1,n3,n6}

D(n7)={n0,n1,n3,n6,n7}

n0

n1

n2

n3

n4

n5

n6

n7

图7.5程序流图

(2)流图中的回边有一条:

即n6n1

该回边表示的循环为:

(n1,n2,n3,n4,n5,n6),入口为n1,出口为n6

9.(武汉大学1991年)试对下面的程序段进行尽可能的优化:

 

i:

=1

 j:

=10

read k

l:

x:

=k*i

y:

=j*i

z:

=x*y

writej

i:

=i+1

ifi<

100gotol

halt

并指明你进行了何种优化,给出优化过程的简要说明及每种优化后的结果形式。

程序的流程图如下所示:

 

  B1:

B2:

B3:

图7.6程序流图

由程序流图可知,{B2}为一个循环。

对于本题中的循环可进行以下优化:

·

 削减强度

  循环中有

  x:

=x*i

=y*i

j,k在循环中不改变值。

i每次增加1,x和y的赋值运算可进行强度削减,于是程序流图变为图7.7所示。

B1:

       B2ˊ:

B2:

B3:

图7.7削减强度后的程序流图

 删除归纳变量

 由于i是循环中的基本归纳变量,x、y是与y同族的归纳变量,且有线性关系

 x:

=k*iy:

=j*i

所以,i<

100完全可用x<

100*k或y<

100*j代替。

于是,进一步优化为图7.8所示。

 代码外提

将循环中不变运算

  writej

tl:

=100*k

提到循环外的前置节点B21中,于是程序流图变为7.9所示的情形。

2

B2:

B3:

图7.8归纳变量后的程序流图

B1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1