《《目标代码生成》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《目标代码生成》PPT课件.ppt(15页珍藏版)》请在金锄头文库上搜索。
1、第十一章第十一章 目标代码生成目标代码生成源程序编译前端中间代码代码优化中间代码代码生成器目标程序符 号 表代码生成器的位置代码生成器的位置目标代码一般有以下三种形式: (1)能独立执行的机器语言代码,所有地址均已定位。 (2)待装配的机器语言模块。当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码。(3)汇编语言代码,尚须经过汇编程序汇编,转换成可执行的机器代码。 代码生成器着重考虑两个问题:如何使生成的目标代码较短;是如何充分利用计算机的寄存器,减少目标代码中访问存储单元的次数。这两个问题直接影响代码的执行速度。基本问题代码生成器的输入目标程序选择适当的代
2、码指令寄存器分配方案计算顺序例例: :考察下面中间代码序列考察下面中间代码序列 G1:G1: T1 := A+BT1 := A+B T2 := A- B T2 := A- B F := T1 * T2 F := T1 * T2 T1 := A- B T1 := A- B T2 := A C T2 := A C T3 := B - C T3 := B - C T1 := T1 * T2 T1 := T1 * T2 G := T1 * T3 G := T1 * T3对应的DAG如图A A A AB B B BC C C C+ + + +n1n1n1n1- - - - - - -n2n2n2n2n4
3、n4n4n4T2T2T2T2* * * * * * *- - - -F F F Fn3n3n3n3* * * *G G G Gn7n7n7n7T3T3T3T3n5n5n5n5T1T1T1T1n6n6n6n6A A A A 上图的上图的DAG含有含有7个结点,我们应用课本中的算法。把它个结点,我们应用课本中的算法。把它们排序,主要步骤如下。们排序,主要步骤如下。 第一步置初值:第一步置初值: i = 7; T的所有元素全为空的所有元素全为空null。内内部结点部结点n3和和n7均满足第三步的要求,假定我们选取均满足第三步的要求,假定我们选取T7为结点为结点n3。结点结点n3的最左子结点(内部)的
4、最左子结点(内部)n1满足第满足第5步步的要求,因此按第的要求,因此按第6步,步,T6=n1.但但n1的最左子结的最左子结A为为叶结,不满足第叶结,不满足第6步的要求。则现在只有步的要求。则现在只有n7满足第满足第3步要步要求,于是求,于是T5=n7。 结点结点n7 的最左子结的最左子结n6满足第满足第5步步的要求,因此的要求,因此T4=n6。 结点结点n6的最左子结点的最左子结点n2同样同样满足第满足第5步的要求,因此步的要求,因此T3=n2. 余下的满足第余下的满足第3步要步要求的尚有求的尚有n4和和n5,假定选取假定选取T2=n4。当把当把n5列为列为T1后,算法工作结束。至此,我们求出
5、的图的内结点后,算法工作结束。至此,我们求出的图的内结点顺序为:顺序为:n5, n4, n2, n6, n1, n3.按这个次序从新表示按这个次序从新表示中间代码序列为中间代码序列为G1为:为: T3 := B-C ; T2 := A- C ; S1 := A B ; T1 := S1 * T2; G := T1 * T3; S2 := A + B ; F := S2 * S1 。如前所如前所述按后一个中间代码序列生成中间代码将会较优。述按后一个中间代码序列生成中间代码将会较优。 窥孔优化窥孔优化 几种窥孔优化的方法都比较好理解,这里不再重述课本几种窥孔优化的方法都比较好理解,这里不再重述课本
6、内容。内容。例题与习题解答例题与习题解答例11。1假设只有假设只有R0和和R1两个寄存器,对赋值语句两个寄存器,对赋值语句d = (a-b) + (a-c) + (a-c)生成目标代码。并写出寄生成目标代码。并写出寄存器描述数组存器描述数组RVALUE和变量地址描述数组和变量地址描述数组AVALUE. 该赋值语句的三地址序列:该赋值语句的三地址序列: t := a-b t1 := a-c t2 := t + t1 d := t1 + t2 将此代码看成一基本块,并设在基本块末尾,变将此代码看成一基本块,并设在基本块末尾,变量量d是活跃的。生成目标代码表如图:是活跃的。生成目标代码表如图: 中间
7、代码中间代码 目标代码目标代码 RVALUE AVALUE t :=a-b LD R0, a R0 含含 t t在在 R0 中中 SUB R0, b t1 :=a-c LD R1 , a R0含含t t在在R0中中 SUB R1, c R1含含t1 t1在在R1中中 t2 := t+ t1 ADD R0, R1 R0含含t2 t2 在在R0中中 R1含含t1 t1在在R1中中d := t1+t2 ADD R0, R1 R0含含d d在在R0中中 ST R0, d d在在R0和存和存储器中储器中 例例11。2(k3) 假设假设R0,R1 和和R2为可用寄存器,试对以下各表达式为可用寄存器,试对以
8、下各表达式分别生成最优目标代码。分别生成最优目标代码。 A+ (B+( C *( D + E/F + G)* H ) + ( I * J )解:首先生成三地址中间代码序列:解:首先生成三地址中间代码序列: T1 := E/F T2 := D + T1 T3 := G + T2 T4 := C * T3 T5 := H * T4 T6 := B + T5 T7 := A + T6 T8 := I * J T9 := T7 + T8 最优的目标代码:最优的目标代码: LD R0, E DIV R0, F ADD R0, G MUL R0, H MUL R0, C ADD R0, B ADD R0,
9、 A LD R1, I MUL R1, J ADD R0,R1例例11。3(K1) 对以下中间代码序列对以下中间代码序列 G : T1 := B C T2 := A * T1 T3 := D + 1 T4 := E F T5 := T3 * T4 W := T2/T5 假设可用寄存器为假设可用寄存器为R0和和R1,W是基本块出口的活是基本块出口的活跃变量,用简单代码生成算法生成目标代码,同时列跃变量,用简单代码生成算法生成目标代码,同时列出代码生成过程中的寄存器描述和变量地址描述。出代码生成过程中的寄存器描述和变量地址描述。 中间代码中间代码 目标代码目标代码 RVALUE AVALUET1:
10、=B-C LD R0, B R0含含 T1 T1 在在 R0中中 SUB R0, C T2:= A*T1 MUL R0, A R0 含含 T2 T2 在在 R0 中中 ST R0, T2 T2同时在同时在R0和存储和存储器中器中T3:= D +1 LD R1, D R1 含含 T3 T3 在在 R1 中中 ADD R1, #1 T4 := E-F LD R0, E R0含含 T4 T4 在在 R0 中中 SUB R0, F T5:=T3* T4 MUL R1, R0 R1含含 T5 T5 在在R1中中 LD R0, T2 R0含含T2 T2在在R0和存和存储器中储器中W:=T2/T5 DIV
11、R0, R1 R0含含W W在在 R0中中 ST R0, W W在在R0和存和存储器中储器中第十二章并行编译基础第十二章并行编译基础 并行计算机是近二十几年来发展迅速的一类计算并行计算机是近二十几年来发展迅速的一类计算机。并行编译系统已经成为了现代高性能计算机系机。并行编译系统已经成为了现代高性能计算机系统中一个重要的部分。并行程序设计主要有两种途统中一个重要的部分。并行程序设计主要有两种途径,即使用并行程序设计语言编写并行程序,或将径,即使用并行程序设计语言编写并行程序,或将串行程序并行化。因此,并行编译系统就是能够处串行程序并行化。因此,并行编译系统就是能够处理并程序设计语言,能够实现串行程序并行化。具理并程序设计语言,能够实现串行程序并行化。具有并行优化能力的编译系统。在这个问题上我们只有并行优化能力的编译系统。在这个问题上我们只是要求了解。是要求了解。