编译原理分知识点习题代码优化_计算机-搜索引擎优化.pdf
《编译原理分知识点习题代码优化_计算机-搜索引擎优化.pdf》由会员分享,可在线阅读,更多相关《编译原理分知识点习题代码优化_计算机-搜索引擎优化.pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 1与机器有关的代码优化有那些种类,请分别举例说明。解答:与机器有关的优化有:寄存器优化,多处理优化,特殊的指令优化,无用的指令消除等四类。冗余指令删除 假设源程序指令序列 a:=b+c;c:=a-d;编译程序为其生成的代码很可能是下列指令序列:MOV b,R0 ADD c,R0 MOV R0,a SUB d,R0 MOV R0,c 假如第四条指令没有标号,上述两个赋值语句在一个基本块内,则第四条指令是多余的,可删除。特殊指令的使用 例如,如果目标机器指令系统包含增 1 指令 INC,对于 i:=i+1 的目标代码 MOV i,R0 ADD#1,R0 MOV R0,i 便可被代之以 1 条指令
2、 Inc i 说明:优化的特点是每个改进可能会引发新的改进机会,为了得到最好的改进,一般可能需要对目标代码重复扫描进行优化。2设有语句序列 a:=20 b:=a*(a+10);c:=a*b;试写出合并常量后的三元式序列。解答:该语句序列对应的三元式序列为:(1)(:=,20,a)(2)(+,a,10)(3)(*,a,(2)(4)(:=,a,b)(5)(*a,b)(6)(:=,(5),c)合并常量后的三元式序列为:(1)(:=,20,a)(2)(:=,600,b)(3)(:=,12000,c)3、试写出算术表达式 a+b*c-(c*b+a-e)/(b*c+d)优化后的四元式序列。解答:该表达式的
3、四元式序列为:(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)可对该表达式进行删除公共子表达式的优化。优化后的四元式序列为:(1)(*,b,c,T1)(2)(+,a,T1,T2)(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)试给出其优化后的三元
4、式序列。解答:该算术表达式的三元序列为:(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.
5、试对以下基本块 B1和 B2应用 DAG 进行优化 B1:A:=B*C D:=B/C E:=A+D F:=E*2 G:=B*C H:=G*G 化无用的指令消除等四类冗余指令删除假设源程序指令序列编译程序为其生成的代码很可能是下列指令序列假如第四条指令没有标号上述两个赋值语句在一个基本块内则第四条指令是多余的可删除特殊指令的使用例如如果目标机器了得到最好的改进一般可能需要对目标代码重复扫描进行优化设有语句序列试写出合并常量后的三式序列解答该语句序列对应的三式序列为合并常量后的三式序列为试写出算术表达式优化后的四式序列解答该表达式的四式序列为可答该算术表达式的三元序列为可对其进行删除公共子表达式的
6、优化优化后的三元式列为试对以下基本块和应用进行优化并就以下两种情况分别写出优化后的四元式序列假设在基本块后面要被引用假设只有在基本块后面要被引用解答 9 8 5 7 F 1 6 3 4 2 F:=H*G L:=F M:=L B2:B:=3 D:=A+C E:=A*C F:=D+E G:=B*F H:=A+C I:=A*C J:=H+I K:=B*5 L:=K+J M:=L 并就以下两种情况分别写出优化后的四元式序列:(1)假设 G、L、M在基本块后面要被引用;(2)假设只有 L在基本块后面要被引用。解答:一般应用 DAG 在一个基本块内可以进行三种优化:合并常量、删除无用赋值以及多余运算。对于
7、基本块 B1,其 DAG 如图 7.1 所示。F,L,M *E *+H *A,G D */B C 2 图 7.1 基本块 B1的 DAG图 优化后的四元式序列如下:(1)若只有 G、L、M在基本块后面要被引用 G:=B*C 或 G:=B*C H:=G*G S:=G*G L:=H*G L:=S*G M:=L M:=L (S为临时变量)(2)若只有 L在基本块后面要被引用 G:=B*C 或 S1:=B*C 化无用的指令消除等四类冗余指令删除假设源程序指令序列编译程序为其生成的代码很可能是下列指令序列假如第四条指令没有标号上述两个赋值语句在一个基本块内则第四条指令是多余的可删除特殊指令的使用例如如果
8、目标机器了得到最好的改进一般可能需要对目标代码重复扫描进行优化设有语句序列试写出合并常量后的三式序列解答该语句序列对应的三式序列为合并常量后的三式序列为试写出算术表达式优化后的四式序列解答该表达式的四式序列为可答该算术表达式的三元序列为可对其进行删除公共子表达式的优化优化后的三元式列为试对以下基本块和应用进行优化并就以下两种情况分别写出优化后的四元式序列假设在基本块后面要被引用假设只有在基本块后面要被引用解答 3 8 1 7 2 6 9 5 4 H:=G*G S2:=S1*S1 L:=H*G L:=S2*S1 (S1、S2为临时变量)对于基本块 B2,其 DAG 如图 7.2 所示。G L,M
9、 *F,J +D,H E,L +*B K 3 A C 15 图 7.2 基本块 B2的 DAG 图 优化后的四元式序列如下:(1)若只有 G、L、M在基本块后面要被引用 D:=A+C E:=A*C F:=D+E G:=3*F L:=F+15 M:=L(2)若只有 L在基本块后面要被引用 D:=A+C 或 S1:=A+C E:=A*C S2:=A*C F:=D+E S3:=S1+S2 L:=F+15 L:=S3+15(S1、S2、S3为临时变量)6.对于基本块 P S0:=2 S1:=3/S0 S2:=T-C S3:=T+C R:=S0/S3 H:=R S4:=3/S1 S5:=T+C 化无用的
10、指令消除等四类冗余指令删除假设源程序指令序列编译程序为其生成的代码很可能是下列指令序列假如第四条指令没有标号上述两个赋值语句在一个基本块内则第四条指令是多余的可删除特殊指令的使用例如如果目标机器了得到最好的改进一般可能需要对目标代码重复扫描进行优化设有语句序列试写出合并常量后的三式序列解答该语句序列对应的三式序列为合并常量后的三式序列为试写出算术表达式优化后的四式序列解答该表达式的四式序列为可答该算术表达式的三元序列为可对其进行删除公共子表达式的优化优化后的三元式列为试对以下基本块和应用进行优化并就以下两种情况分别写出优化后的四元式序列假设在基本块后面要被引用假设只有在基本块后面要被引用解答
11、1 H 0 4 7 3 6 5 2 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,S4 S1 2 1.5 T C 图 7.3 基本块 P的 DAG 图 优化后的四元式序列为:S0:=2 S4:=2 S1:=1.5 S2:=T-C S3:=T+C S5:=S3 R:=2/S3 S6:=R H:=S6*S2 (2)若只有 R、H在基本块出口是活
12、跃的,优化后的四元式序列为:S2:=T-C S3:=T+C R:=2/S3 H:=R*S2(3)假定只有两个寄存器 R0、R1,上述优化后的四元式序列的目标代码为:LD R0 T SUB R0 C ST R0 S2 化无用的指令消除等四类冗余指令删除假设源程序指令序列编译程序为其生成的代码很可能是下列指令序列假如第四条指令没有标号上述两个赋值语句在一个基本块内则第四条指令是多余的可删除特殊指令的使用例如如果目标机器了得到最好的改进一般可能需要对目标代码重复扫描进行优化设有语句序列试写出合并常量后的三式序列解答该语句序列对应的三式序列为合并常量后的三式序列为试写出算术表达式优化后的四式序列解答该
13、表达式的四式序列为可答该算术表达式的三元序列为可对其进行删除公共子表达式的优化优化后的三元式列为试对以下基本块和应用进行优化并就以下两种情况分别写出优化后的四元式序列假设在基本块后面要被引用假设只有在基本块后面要被引用解答 B8 B2 B3 B4 B7 B6 B5 B1 LD R0 T ADD R0 C LD R1 2 DIV R1 R0 LD R0 S2 MUL R1 R0 ST R1 H 7.设有入图 7.4 所示的程序流程图:图 7.4 程序流图 (1)求出流图中各个结点 n 的必经结点集 D(n);(2)求出该流图中的回边;(3)求出该流图中的循环。解答:(1)在程序流图中,对任意的结
14、点ni和nj,如果从流图的首结点出发,到达nj的任一通路都必须经过 ni,则称 ni是 nj的必经结点,记为 ni DOM nj。流图中结点 n的所有必经结点称为结点 n 的必经结点集,记为 D(n)。流图中各结点 n 的必经结点集 D(n)为:D(B1)=B1 化无用的指令消除等四类冗余指令删除假设源程序指令序列编译程序为其生成的代码很可能是下列指令序列假如第四条指令没有标号上述两个赋值语句在一个基本块内则第四条指令是多余的可删除特殊指令的使用例如如果目标机器了得到最好的改进一般可能需要对目标代码重复扫描进行优化设有语句序列试写出合并常量后的三式序列解答该语句序列对应的三式序列为合并常量后的
15、三式序列为试写出算术表达式优化后的四式序列解答该表达式的四式序列为可答该算术表达式的三元序列为可对其进行删除公共子表达式的优化优化后的三元式列为试对以下基本块和应用进行优化并就以下两种情况分别写出优化后的四元式序列假设在基本块后面要被引用假设只有在基本块后面要被引用解答 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)流图的回边是指:若 ab 是流图中一条有向边,且有 b DOM a,则称 ab 是流图的一条回边
16、。题目所给流图中,有有向边 B7B2,又有 D(B7)=B1,B2,B7,所以,B2 DOM B7,即 B7B2是流图的回边。且无其他回边。(3)该流图中的循环可利用回边求得。如果以知有向边 nd 是一回边,由它组成的循环就是由结点 d、结点 n 以及有通路到达n而该通路不经过d的所有结点组成,且d是该循环的唯一入口结点。题目所给出流图中,只有一条回边 B7B2,在该流图中,凡是不能经过结点 B2有通路到达结点 B7的结点,只有 B3,B4,B5,B6,所以,由回边 B7B2组成的循环是 B2,B3,B4,B5,B6,B7。8.(中国科学院计算机所 1997 年)试画出如下中间代码序列的程序流
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 知识点 习题 代码 优化 计算机 搜索引擎
限制150内