SlideShare a Scribd company logo
1 of 74
第 10 章

代码优化
代码优化的目标

 减少目标程序所占用的存储空间; ( 空间
  少)
 提高目标程序的运行速度。 ( 时间短 )

        优化可以在编译的不同阶段
    进行,本章讨论的是对中间代码进行
    等价变换。
代码优化的分类

    根据优化所涉及的程序范围
 ,中间代码优化分为三类:
 局部优化    循环优化     全局优化

 对一段顺序    对循环中的   在整个程序
语句序列优化   代码序列优化   范围内进行
。        。        的优化。
优化技术简介

P:=0
for I:=1 to 20 do
    P:=P+A[I]*B[I]
(1) P:=0
(2) I:=1                    1. 删除多余运算
                              ( 删除公共子表
(3) T1:=4*I                   达式 )
(4) T2:=addr(A)-4
                                 对于两个相
(5) T3:=T2[T1]
(6) T4:=4*I           T4:=T1
                                同的表达式
(7) T5:=addr(B)-4               计算,若它
(8) T6:=T5[T4]                  的计算结果
(9) T7:=T3*T6                   相同,则没
(10) P:=P+T7                    必要重复的
(11) I:=I+1                     生成两条运
(12) if I<=20 goto(3)           算指令。
(1)P:=0
(2)I:=1
                       2. 代码外提
(4)T2:=addr(A)-4          把结果独立
(7)T5:=addr(B)-4        于循环执行次
                        数的表达式提
(3)T1:=4*I              到循环的前面
(5)T3:=T2[T1]           。
(6)T4:=T1
(8)T6:=T5[T4]
(9)T7:=T3*T6
(10)P:=P+T7
(11)I:=I+1
(12)if I<=20 goto(3)
(1)P:=0
(2)I:=1
(4)T2:=addr(A)-4       3. 强度削弱
(7)T5:=addr(B)-4
(3)T1:=4*I               把强度大的
                        运算换算成强
(5)T3:=T2[T1]           度小的运算。
(6)T4:=T1
                        如把乘法换算
(8)T6:=T5[T4]
(9)T7:=T3*T6            成加法。
(10)P:=P+T7
(11)I:=I+1
(3‘)T1:=T1+4
(12)if I<=20 goto(5)
4. 变换循环控制条件              5. 合并已知量与复
写传播
(1)P:=0                (1)P:=0
(2)I:=1                (2)I:=1
(4)T2:=addr(A)-4       (4)T2:=addr(A)-4
(7)T5:=addr(B)-4       (7)T5:=addr(B)-4
(3)T1:=4*I             (3)T1:=4

(5)T3:=T2[T1]          (5)T3:=T2[T1]
(6)T4:=T1              (6)T4:=T1
(8)T6:=T5[T4]          (8)T6:=T5[ T1
                                   ]
(9)T7:=T3*T6           (9)T7:=T3*T6
(10)P:=P+T7            (10)P:=P+T7
(11)I:=I+1             (11)I:=I+1
(3’)T1:=T1+4           (3’)T1:=T1+4
(12)if I<=20 goto(5)   (12)if T1 <=80 goto(5)
6. 删除无用赋值

(1)P:=0                 (1)P:=0
(2)I:=1                 (4)T2:=addr(A)-4
(4)T2:=addr(A)-4        (7)T5:=addr(B)-4
(7)T5:=addr(B)-4
                        (3)T1:=4
(3)T1:=4

(5)T3:=T2[T1]           (5)T3:=T2[T1]
(6)T4:=T1               (8)T6:=T5[T1]
(8)T6:=T5[T1]           (9)T7:=T3*T6
(9)T7:=T3*T6
                        (10)P:=P+T7
(10)P:=P+T7
(11)I:=I+1              (3’)T1:=T1+4
(3’)T1:=T1+4            (12)if T1<=80 goto(5)
(12)if T1<=80 goto(5)
§ 10.1

 基本块与
程序控制流图
基本块

   基本块:是指程序中一顺序执行的语
    句序列,其中只有一个入口语句 ( 第
    一个语句 ) 和一个出口语句 ( 最后一个
    语句 ) 。

      对于一个基本块来说,执行时只
    能从其入口语句进入,从其出口语
    句退出。
根据基本块的定义,它是一
个按顺序执行的代码序列,而且只
能从它的唯一入口进入,从其唯一
的出口退出,期间不发生任何分叉
。
任何控制转移四元式   出口语句

所转向的目标语句    入口语句
入口语句


1. 程序的第一个语句;或者,
 2. 条件转移语句或无条件转移语句的
转
  移目标语句;或者
3. 紧跟在条件转移语句后面的语句。
划分基本块的步骤
1 、求四元式序列中各个基本块的入口语句。
2 、对每一入口语句,构造所属的基本块,该
  基本块由:
( 1 )该入口语句到下一入口语句(不包括下
  一入口语句)之间的语句序列组成;或,
( 2 )该入口语句到一转移语句(包括该转移
  语句)之间的语句序列组成;或,
( 3 )该入口语句到一停语句(包括该停语句
  )之间的语句序列组成。
3 、凡是未包含在某一基本块中的语句,都是
  程序中控制流程不可达的语句,可删除它们
例子
(1) read a
(2) read b
(3) r:=a mod b
(4) if r=0 goto (8)
(5) a:= b
(6) b:= r
(7) goto (3)
(8) write b
(9) halt
程序控制流程图(流图)

定义:以基本块为结点,控制程序流向
 作
     为有向边,画出的有向图称为
 流图。
    如果一个结点的基本块的入
特点:具有唯一首结点的有向图。
口语句是程序的第一条语句,则称
此结点为首结点。
一个控制流程图可表示成一个三元
组。
G=(N , E , n0)


N :所有结点 ( 基本块 ) 集;
E :所有有向边集;
n0 :首结点。
有向边

       当下述条件有一个成立时,
 从结点 i 有一有向边引向结点 j :
① 基本块 j 在程序的位置紧跟在 i 后 , 且
 i 的出口语句不是无条件转移或停语句
 ;
②i 的出口是 goto(S) 或 if goto(S), 而 (S) 是
 j 的入口语句。
    i        j
构造以下程序的流图
(1) read a
                      B1
(2) read b                      B1
(3) r:=a mod b
                      B2
(4) if r=0 goto (8)
(5) a:= b                       B2

(6) b:= r             B3
(7) goto (3)
(8) write b                B3        B4
                      B4
(9) halt
§ 10.2

局部优化
 局部优化是指基本块内的优化。
 对于一个给定的程序,可以把它划分
  为一系列的基本块。在各个基本块内
  分别进行优化。
基本块的 DAG 表示
DAG Directed Acyclic Graph 无环路有向图
 定义:
(1) 在一个有向图中,若结点 ni 有弧指向
  结点 nj ,则 ni 是 nj 的父结点, nj 是 ni
  的子结点;
(2) 若 n1,n2,…,nk 间存在有向弧
  n1n2…nk ,则称 n1 到 nk 之间存
  在一条通路,若 n1=nk ,则称该通路为
  环路;
(3) 若有向图中任意通路都不是环路,则
基本块的 DAG 表示
   优化中用到的有向图是一种结点带有
    下述标记或附加信息的 DGA:
    (1) 图的叶结点以一标识符或常数做标
      记,表示该结点代表该变量或常数
      的值。
    (2) 图的内部结点以一运算符作为标记
      ;
    (3) 图中各个结点上可能附加一个或多
      个标识符,表示这些标识符具有该
      结点所代表的值,简称附标。
四元式对应的 DAG 结点形式
   按其四元式对应结点的后继个数分成四种
    类型: 0 型、 1 型、 2 型、 3 型。
                                      DAG结点

0 型:A:=B (:=,B,—,A)            n1 A
                               B
                                      n2 A
1 型: A:=op B (op,B, — ,A)              op
                                      n1
                                      n1
                                      B        n3
2 型: A:=B op C (op, B, C ,A)                   op
                                          n1
                                          n1        n2
                                                    n2
                                          B         C
构造以下基本块的 DAG
(1)    T0:=3.14
(2)    T1:=2*T0
(3)    T2:=R+r
(4)    A:=T1*T2
(5)    B:=A
(6)    T3:=2*T0
(7)    T4:=R+r
(8)    T5:=T3*T4
(9)    T6:=R-r
(10)   B:=T5*T6
n1      To
3.14
  (a)
n1 T0         n2     T1
3.14          6.28


        (b)
n5   T2
                                +

n1     T0   n2     T1     n3             n4
3.14        6.28          R               r

                    (c)
n6         A
                 *

                               n5   T2
                                +

n1 T0   n2 T1         n3                 n4
3.14    6.28          R                   r

                (d)
n6           A,B

                     *

                               n5   T2
                                +

n1 T0   n2 T1        n3                  n4
3.14    6.28             R                r

               (e)
n6 A,B
                 *

                         n5   T2
                         +

n1 T0   n2 T1,T3 n3                n4

3.14    6.28         R              r
               (f)
n6    A,B
                *

                         n5   T2,T4
                          +

n1 T0   n2 T1,T3 n3            n4
3.14    6.28         R          r

               (g)
n6   A,B,T5
                     *

                              n5 T2,T4
                               +

n1 T0   n2 T1,T3 n3                 n4

3.14    6.28              R          r

               (h)
n6    A,B,T5
                *
                           T2,T4     T6
                           n5     n7
                           +     -


n1 T0   n2 T1,T3 n3               n4

3.14    6.28           R           r

               (i)
n8   B
                              *


           n6      A,B,T5
                                T2,T4      T6
               *
                              n5        n7
                              +       -

n1 T0   n2 T1,T3 n3                    n4
3.14    6.28              R             r

                    (j)
利用 DAG 进行优化

   DAG 图可做到如下三种优化:
    (1) 合并已知量
           对任何一个四元式,如果其中
      参与运算的对象都是编译时的已知量
      ,那么合并已知量,并用合并后算出
      的常量生成一个叶结点;
(2) 利用公共子表达式,删除多余运
算

   对具有公共子表达式的所有
四元式,只产生一个计算该表达式
值的内部节点,把那些赋值的变量
附加到该节点上。
(3) 删除无用赋值
      如果某变量被赋值之后,
随后又被赋新值,那么可删除对
变量的前一个赋值。
由 DAG 生成优化后的代码序列

           n8 B             (1) T0:=3.14
                            (2) T1:=6.28
            *
                            (3) T3:=6.28
   n6 A,T5
              T2,T4         (4) T2:=R+r
        *           n7 T6
            n5              (5) T4:=T2
               +     -
                            (6) A:=6.28*T2
          T1,T3
                            (7) T5:=A
n1 T0     n2    n3    n4
                            (8) T6:=R-r
 3.14    6.28     R   r
                            (9) B:=A*T6
注意事项

若结点有多个附标 A1,A2,…,An, 有两种
  情况:
(a) 若结点是叶结点,标记为 B ,则
  A1:=B,A2:=B,…,An:=B;
(b) 若为内部结点,则除第一附标 A1 外
  ,其他附标生成 A2:=A1,A3:=A1,
  …,An:=A1 。
DAG 在基本块优化中的作用

  将一基本块的每一个四元式依次表示
  成对应的一个 DAG ,再按原来构造
  DAG 结点的顺序重写四元式序列,便
  可得到 “ 合并已知常量 ” 、 “ 删除无用赋
  值 ” 、 “ 删除多余运算 ” 后的等价基本块
  。
 对于出了基本块以后不再引用的名字,
  可以不生成对其进行的赋值运算,而用
  临时变量存放相应的运算结果。
例:试对基本块 P
 (1) 应用 DAG 进行优化,
    (2) 假定只有 R 、 H 在基本块出口
是活跃的 , 写出优化后的四元式序列。
S0:=2
                                       H
S1:=3/s0                      n7

S2:=T - C                      *
S3:=T + C        n6   R , H , S6
                  /
R:=s0/s3
                            S3,S5 n5       n4 S2
H:=R
                                   +       -
S4:=3/s1
            n0 S0 ,S4 n1    S1 n2              n3
S5:=T + C   2         1.5          T           C
S6:=S4/S5
H:=S6*S2
(1) 应用 DAG 进行优化                        S0:=2
                                       S4:=2
                           H
                  n7
                                       S1:=1.5
                  *
                                       S2:=T - C
     n6   R , H , S6
                                       S3:=T + C
      /
                                       S5:=S3
                S3,S5 n5       n4 S2
                           +   -       R:=2/s3

n0 S0 ,S4 n1    S1 n2           n3
                                       S6:=R
2         1.5          T         C     H:=R*S2
(2) 假定只有 R 、 H 在基本块出口是活跃的
   S0:=2
   S4:=2
   S1:=1.5     S2:=T - C

   S2:=T - C   S3:=T + C

   S3:=T + C   R:=2/s3

   S5:=S3      H:=R*S2

   R:=2/s3
   S6:=R
   H:=R*S2
§ 10.3

循环优化
 循环就是程序中那些可能反复执行的
  代码序列。因为循环中的代码要反复
  执行,所以必须着重考虑循环的代码
  优化。
 首先要找出程序中的循环,这就需要
  对程序的控制流程进行分析。
 使用控制流程图对循环给出定义。
循环的性质

      在程序流图中,称具有下列性
质的结点序列为一个循环:
1. 它们是强连通的。
2. 它们中间有且只有一个是入口结点
。
强连通

一组结点是强连通的,即:
 其中任意两个结点之间,必有一
条通路,使得它们之间相互可达;
 该通路上各结点都属于该结点序
列。
注意:如果序列中只有一个结点,
则必有一有向边从该结点引到其自
身。
入口结点


   所谓入口结点,是指序列中
具有下述性质的结点:
   从序列外某结点,有一有向
边引到它,或者它就是程序流图的
首结点。
循环的定义

                 1
定义:在程序流图中
具有唯一入口结点的
                 2
强连通子图。               3
                 4
注意:从循环外要进
                     5
入循环,必须首先经    6
过循环的入口结点。        7
循环的查找

    上面给出了构成循环应具备
的条件,为了找到程序流图中的循
环,需要分析流图中结点间的控制
关系。
   为此引入必经结点和必经结
点集的定义。
 必经结点:对任意两个结点 d 和
  n ,若从首结点出发,到达 n 的各
  条通路都必须经过的结点 d ,称 d
  为 n 的必经结点,记作 d DOM
  n。
 必经结点集: n 的全部必经结点的
  集合,记作 D(n) 。
求必经结点集的算法


设结点 n 的父结点是 P1,P2,…,Pk ,
则:
D(n)= {n} ∪ (∩ D(Pi)) 1≤i≤k
举例
                 D(1)={1}
    1
                 D(2)={1,2}
    2
        3        D(3)={1,2,3}
    4            D(4)={1,2,4}

        5        D(5)={1,2,4,5}
6
    7            D(6)={1,2,4,6}
                 D(7)={1,2,4,7}
循环的查找— 回边
   回边:设 ab 是流图
                          1
    中一条有向边,若 b
    dom a ,则称 ab 时       2
    流图中的一条回边。                 3
                          4
图中的回边有:
                      6       5
66 , 74 , 42
                          7
查找循环算法
   每一条回边构成一个循环:
         设 nd 是回边,则该回边构
    成的循环包括下列结点: n 、 d 以及
    不经过 d 能到达 n 的所有结点。
1       回边 42
            循环
    2       ={4 , 2 , 3 , 7 , 5
        3   , 6}
            回边 74
    4
            循环
6       5   ={7 , 4 , 5 , 6}

    7       回边 66
            循环 ={6}
查找循环算法
 (1) 找出回边 nd ;
 (2) 则 n 、 d 必定属于 nd 回边组成
  的循环 L 中, L:={n,d}
 (3) 若 n≠ d 且 n 的父节点 n’ 不在 L
  中,则将它添如 L 中, L:=L∪ {n’}
 (4) 对 (3) 求出的父节点 n 重复 (3) ,
  直至不再有新节点加入为止。
循环优化
 在找出了程序流图中的循环之后,就
  可以针对每个循环进行优化工作。
 循环优化的三种重要技术:

  1. 代码外提
  2. 删除归纳变量
  3. 强度削弱
循环优化的一些基本概念

   点:程序中某一个四元式的位置;
   定值点:对某变量赋值或输入值的四元式位
    置;
   引用点:引用某变量的四元式位置;
   变量 A 的到达与定值: d 是 A 的定值点, u
    是 A 的引用点,存在一条从 d 到 u 的通路,
    并此路上没有 A 的其他定值点,称 d 点对 A
    的定值能达到 u 点。
   活跃:存在一条从 p 点开始的通路,在这条
    通路上引用了变量 A 在 p 点的值,则称 A 在
循环不变运算

   定义:形如 (s) A:=B op C 四元式,若
    (1) B 、 C 为常量;
    (2) 到达 (s) 点的 B 、 C 定值点都在循
      环外;
    则 (s) 为循环不变运算, A 、 B 、 C
      为循环不变量。
前置结点

   实行代码外提时,在循环入口节点前建立
    一个新结点 ( 基本块 ) ,称作循环的前置
    结点。
                     前置节点
      入口结点
        …            入口节点
       循环 L            …
        …             循环 L
                       …
代码外提的安全性

 是不是所有循环不变运算的代码都能
  外提到前置结点中?
 不是!

 下面举例说明几种不合法的代码外提
  。
{B2,B3,B4} 是循环
                                      B1        B2 是循环的入口结点
                 (1)i:=1
                                                B4 是循环的出口结点

             ( 2 ) if x < y goto B3        B2



(3) i:=2       B3               (5) y:=y-1             B4
(4) x:=x+1                      (6) if y<=20 goto B5


                                       B5
                  (7)j:=i                                   j=1
                                       B1→B2→B4→B5
B1→ B2’→ B2→B4→B5
            i:=1            B1
                                   原因: B3 不是循环
                            B’2    出口 B4 的必经结点
            i:=2
                                   。

         if x < y goto B3         B2


           B3          y:=y-1
                                         B4
x:=x+1
                       if y<=20 gotoB5

                             B5               j=2
                j:=i
B2 是循环出口 B4 的必经结点。

                            B1→B2→B3→B4→B2→B4→B5
                       B1
           i:=1



         i:=3                B2
         if x < y goto B3



i:=2     B3            y:=y-1            B4
x:=x+1                if y<=20 goto B5


                            B5                j=3
              j:=i
B1→ B2’→ B2→B3→B4→B2→B4→B5

            i:=1            B原因:循环中还有 i 的其他定值点
                             1


                            B’2
            i:=3



         if x < y goto B3         B2


           B3          y:=y-1
                                         B4
i:=2
x:=x+1                 if y<=20 gotoB5

                             B5
                j:=i
                                              j=2
B2 是循环出口 B4 的必经结点
                                  B1     。
                i:=1
                                            循环中没有 i 的其他定值点
                                         B1→B2→B3→B4→B2→B4→B5
             if x < y goto B3          B2



a := i        B3                i:=2                B4
x := x + 1                      y:=y-1
                                 if y<=20 goto B5

                          B5
                  j:=a                                   j=1
B1→ B2’→ B2→B3→B4→B2→B4→B5

            i:=1            B1
                                       原因:循环中的
                                       B3 中有对 i 的引用
                            B’2        ,但到达此处的定
            i:=2
                                       值并不仅是 B4 中
                                       的 i:=2 。
         if x < y goto B3         B2


           B3          y:=y-1
                                          B4
a := i
x:=x+1                 if y<=20 gotoB5

                             B5                j=2
                j:=a
代码外提条件

1) 该不变运算所在结点 ( 基本块 ) 必须是
  循环出口结点的必经结点或者该不变
  运算所定值的不变量在循环出口之后
  不是活跃的。
2) 循环内不变运算所定值的变量只有唯
  一的一个定值点,即在其他地方未再
  定值。
3) 外提循环不变运算 (s) A:=B op C 时循
  环内所有 A 的引用点必须而且仅是 (s)
  所能到达的。
归纳变量

 定义:循环中变量 I 只有唯一的形如
  I:=I±C 的赋值,其中 C 为循环不变量
  ,则称 I 为循环中基本归纳变量。
 如果变量 J 与基本归纳变量 I 可规划为
  线性关系 J:=C1*I+C2 ,其中 C1 、 C2
  为循环不变量,则称 J 是与 I 同族的归
  纳变量。
强度削弱与删除归纳变量
( 1) 利用循环不变运算的信息,找出循
环中基本归纳变量 X ;
 ( 2) 找出所有归纳变量 A ,并指出 A
与 X 的线性关系 A : =C 1 X+C 2 。
 ( 3) 强度减弱,将循环 L 中归纳变量的
算式化为自增赋值算式,然后:
   在循环前置节点中按原式计算初值
    ;
   将自增赋值算式置于 L 中原基本归
(4) 删除归纳变量。
       基本归纳变量除了自身的递归定
  值外,往往只是作为循环控制和其他同
  族归纳变量的计算。
       在强度削弱后,其他同族归纳变
  量在循环中的运算因转换成递归增加一
  个常量,与基本归纳变量无直接关系了
  。
       因此只要将循环控制条件由依赖
  于基本归纳变量转换成依赖于它的同族
  归纳变量,此时基本归纳变量除了唯一
  的递归定值外,已别无用处,可删除。

More Related Content

Viewers also liked

Utah State Today - Utah State University News
Utah State Today - Utah State University NewsUtah State Today - Utah State University News
Utah State Today - Utah State University NewsDaniel Quarnberg
 
99 Usul Kenali Hadith Dhaif Dan Palsu
99 Usul Kenali Hadith Dhaif Dan Palsu99 Usul Kenali Hadith Dhaif Dan Palsu
99 Usul Kenali Hadith Dhaif Dan PalsuAbu Muhammad
 
Kesesatan Kitab Barzanji
Kesesatan Kitab BarzanjiKesesatan Kitab Barzanji
Kesesatan Kitab BarzanjiAbu Muhammad
 
Gn archives eps 1 lab_rats sample
Gn archives eps 1 lab_rats sampleGn archives eps 1 lab_rats sample
Gn archives eps 1 lab_rats sampleDaniel Ruke
 
Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)Yudi WindyatmiKabilly
 
April Newsletter
April NewsletterApril Newsletter
April Newslettermjcunny
 
Reserch methodology
Reserch methodologyReserch methodology
Reserch methodologyIIFP
 
SFM Lesson 3
SFM Lesson 3SFM Lesson 3
SFM Lesson 3TonyC445
 
Crowdfunding il futuro e' gia' qui softlab
Crowdfunding il futuro e' gia' qui softlabCrowdfunding il futuro e' gia' qui softlab
Crowdfunding il futuro e' gia' qui softlabSoftlab SpA
 
Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!
Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!
Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!Studio1542
 
Python @ PiTech - March 2009
Python @ PiTech - March 2009Python @ PiTech - March 2009
Python @ PiTech - March 2009tudorprodan
 
WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道
WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道
WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道schoowebcampus
 
Quelle méthode adopter pour faire de vos élections une expérience unique ?
Quelle méthode adopter pour faire de vos élections une expérience unique ?Quelle méthode adopter pour faire de vos élections une expérience unique ?
Quelle méthode adopter pour faire de vos élections une expérience unique ?arvato France
 

Viewers also liked (16)

Presentacion chicago buena
Presentacion chicago buenaPresentacion chicago buena
Presentacion chicago buena
 
Utah State Today - Utah State University News
Utah State Today - Utah State University NewsUtah State Today - Utah State University News
Utah State Today - Utah State University News
 
99 Usul Kenali Hadith Dhaif Dan Palsu
99 Usul Kenali Hadith Dhaif Dan Palsu99 Usul Kenali Hadith Dhaif Dan Palsu
99 Usul Kenali Hadith Dhaif Dan Palsu
 
Kesesatan Kitab Barzanji
Kesesatan Kitab BarzanjiKesesatan Kitab Barzanji
Kesesatan Kitab Barzanji
 
Gn archives eps 1 lab_rats sample
Gn archives eps 1 lab_rats sampleGn archives eps 1 lab_rats sample
Gn archives eps 1 lab_rats sample
 
Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)
 
April Newsletter
April NewsletterApril Newsletter
April Newsletter
 
Reserch methodology
Reserch methodologyReserch methodology
Reserch methodology
 
SFM Lesson 3
SFM Lesson 3SFM Lesson 3
SFM Lesson 3
 
Crowdfunding il futuro e' gia' qui softlab
Crowdfunding il futuro e' gia' qui softlabCrowdfunding il futuro e' gia' qui softlab
Crowdfunding il futuro e' gia' qui softlab
 
Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!
Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!
Αποκτήστε 1000 ευρώ ΚΑΘΕ μήνα με το πρόγραμμα των 8 εβδομάδων!
 
Python @ PiTech - March 2009
Python @ PiTech - March 2009Python @ PiTech - March 2009
Python @ PiTech - March 2009
 
WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道
WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道
WEBデザインにおける、Photoshopの作業速度向上テクニック 先生:黒葛原 道
 
Quelle méthode adopter pour faire de vos élections une expérience unique ?
Quelle méthode adopter pour faire de vos élections une expérience unique ?Quelle méthode adopter pour faire de vos élections une expérience unique ?
Quelle méthode adopter pour faire de vos élections une expérience unique ?
 
CASE STUDY
CASE STUDY CASE STUDY
CASE STUDY
 
How to Upload a product into magento
How to Upload a product into magentoHow to Upload a product into magento
How to Upload a product into magento
 

More from tjpucompiler

第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法tjpucompiler
 
第11章 目标代码生成
第11章 目标代码生成第11章 目标代码生成
第11章 目标代码生成tjpucompiler
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理tjpucompiler
 
第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成tjpucompiler
 
第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法tjpucompiler
 
第5章 自底向上的语法分析
第5章 自底向上的语法分析第5章 自底向上的语法分析
第5章 自底向上的语法分析tjpucompiler
 
第2章 文法和语言
第2章 文法和语言第2章 文法和语言
第2章 文法和语言tjpucompiler
 
第3章 词法分析
第3章 词法分析第3章 词法分析
第3章 词法分析tjpucompiler
 
第4章 自顶向下的语法分析
第4章 自顶向下的语法分析第4章 自顶向下的语法分析
第4章 自顶向下的语法分析tjpucompiler
 

More from tjpucompiler (11)

第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法
 
第11章 目标代码生成
第11章 目标代码生成第11章 目标代码生成
第11章 目标代码生成
 
第9章 符号表
第9章 符号表第9章 符号表
第9章 符号表
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理
 
第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成
 
第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法
 
第5章 自底向上的语法分析
第5章 自底向上的语法分析第5章 自底向上的语法分析
第5章 自底向上的语法分析
 
第2章 文法和语言
第2章 文法和语言第2章 文法和语言
第2章 文法和语言
 
第3章 词法分析
第3章 词法分析第3章 词法分析
第3章 词法分析
 
第4章 自顶向下的语法分析
第4章 自顶向下的语法分析第4章 自顶向下的语法分析
第4章 自顶向下的语法分析
 
第1章 概论
第1章 概论第1章 概论
第1章 概论
 

Recently uploaded

啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptxbusinesshealthwise
 
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习PUAXINYEEMoe
 
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdftaibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdfjhujyunjhang
 
taibif_資料標準概念介紹_20240509_20240509_20340509.pdf
taibif_資料標準概念介紹_20240509_20240509_20340509.pdftaibif_資料標準概念介紹_20240509_20240509_20340509.pdf
taibif_資料標準概念介紹_20240509_20240509_20340509.pdfjhujyunjhang
 
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂PUAXINYEEMoe
 
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade SixMath Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six611002610
 
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...微信 tytyqqww业务接单
 
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...微信 tytyqqww业务接单
 
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个michaelell902
 

Recently uploaded (9)

啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
 
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
 
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdftaibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
 
taibif_資料標準概念介紹_20240509_20240509_20340509.pdf
taibif_資料標準概念介紹_20240509_20240509_20340509.pdftaibif_資料標準概念介紹_20240509_20240509_20340509.pdf
taibif_資料標準概念介紹_20240509_20240509_20340509.pdf
 
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
 
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade SixMath Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
 
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
 
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
 
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
 

第10章 代码优化

  • 2. 代码优化的目标  减少目标程序所占用的存储空间; ( 空间 少)  提高目标程序的运行速度。 ( 时间短 ) 优化可以在编译的不同阶段 进行,本章讨论的是对中间代码进行 等价变换。
  • 3. 代码优化的分类 根据优化所涉及的程序范围 ,中间代码优化分为三类: 局部优化 循环优化 全局优化 对一段顺序 对循环中的 在整个程序 语句序列优化 代码序列优化 范围内进行 。 。 的优化。
  • 4. 优化技术简介 P:=0 for I:=1 to 20 do P:=P+A[I]*B[I]
  • 5. (1) P:=0 (2) I:=1 1. 删除多余运算 ( 删除公共子表 (3) T1:=4*I 达式 ) (4) T2:=addr(A)-4 对于两个相 (5) T3:=T2[T1] (6) T4:=4*I T4:=T1 同的表达式 (7) T5:=addr(B)-4 计算,若它 (8) T6:=T5[T4] 的计算结果 (9) T7:=T3*T6 相同,则没 (10) P:=P+T7 必要重复的 (11) I:=I+1 生成两条运 (12) if I<=20 goto(3) 算指令。
  • 6. (1)P:=0 (2)I:=1 2. 代码外提 (4)T2:=addr(A)-4 把结果独立 (7)T5:=addr(B)-4 于循环执行次 数的表达式提 (3)T1:=4*I 到循环的前面 (5)T3:=T2[T1] 。 (6)T4:=T1 (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (12)if I<=20 goto(3)
  • 7. (1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 3. 强度削弱 (7)T5:=addr(B)-4 (3)T1:=4*I 把强度大的 运算换算成强 (5)T3:=T2[T1] 度小的运算。 (6)T4:=T1 如把乘法换算 (8)T6:=T5[T4] (9)T7:=T3*T6 成加法。 (10)P:=P+T7 (11)I:=I+1 (3‘)T1:=T1+4 (12)if I<=20 goto(5)
  • 8. 4. 变换循环控制条件 5. 合并已知量与复 写传播 (1)P:=0 (1)P:=0 (2)I:=1 (2)I:=1 (4)T2:=addr(A)-4 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4 (7)T5:=addr(B)-4 (3)T1:=4*I (3)T1:=4 (5)T3:=T2[T1] (5)T3:=T2[T1] (6)T4:=T1 (6)T4:=T1 (8)T6:=T5[T4] (8)T6:=T5[ T1 ] (9)T7:=T3*T6 (9)T7:=T3*T6 (10)P:=P+T7 (10)P:=P+T7 (11)I:=I+1 (11)I:=I+1 (3’)T1:=T1+4 (3’)T1:=T1+4 (12)if I<=20 goto(5) (12)if T1 <=80 goto(5)
  • 9. 6. 删除无用赋值 (1)P:=0 (1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4 (7)T5:=addr(B)-4 (3)T1:=4 (3)T1:=4 (5)T3:=T2[T1] (5)T3:=T2[T1] (6)T4:=T1 (8)T6:=T5[T1] (8)T6:=T5[T1] (9)T7:=T3*T6 (9)T7:=T3*T6 (10)P:=P+T7 (10)P:=P+T7 (11)I:=I+1 (3’)T1:=T1+4 (3’)T1:=T1+4 (12)if T1<=80 goto(5) (12)if T1<=80 goto(5)
  • 11. 基本块  基本块:是指程序中一顺序执行的语 句序列,其中只有一个入口语句 ( 第 一个语句 ) 和一个出口语句 ( 最后一个 语句 ) 。 对于一个基本块来说,执行时只 能从其入口语句进入,从其出口语 句退出。
  • 13. 入口语句 1. 程序的第一个语句;或者, 2. 条件转移语句或无条件转移语句的 转 移目标语句;或者 3. 紧跟在条件转移语句后面的语句。
  • 14. 划分基本块的步骤 1 、求四元式序列中各个基本块的入口语句。 2 、对每一入口语句,构造所属的基本块,该 基本块由: ( 1 )该入口语句到下一入口语句(不包括下 一入口语句)之间的语句序列组成;或, ( 2 )该入口语句到一转移语句(包括该转移 语句)之间的语句序列组成;或, ( 3 )该入口语句到一停语句(包括该停语句 )之间的语句序列组成。 3 、凡是未包含在某一基本块中的语句,都是 程序中控制流程不可达的语句,可删除它们
  • 15. 例子 (1) read a (2) read b (3) r:=a mod b (4) if r=0 goto (8) (5) a:= b (6) b:= r (7) goto (3) (8) write b (9) halt
  • 16. 程序控制流程图(流图) 定义:以基本块为结点,控制程序流向 作 为有向边,画出的有向图称为 流图。 如果一个结点的基本块的入 特点:具有唯一首结点的有向图。 口语句是程序的第一条语句,则称 此结点为首结点。
  • 17. 一个控制流程图可表示成一个三元 组。 G=(N , E , n0) N :所有结点 ( 基本块 ) 集; E :所有有向边集; n0 :首结点。
  • 18. 有向边 当下述条件有一个成立时, 从结点 i 有一有向边引向结点 j : ① 基本块 j 在程序的位置紧跟在 i 后 , 且 i 的出口语句不是无条件转移或停语句 ; ②i 的出口是 goto(S) 或 if goto(S), 而 (S) 是 j 的入口语句。 i j
  • 19. 构造以下程序的流图 (1) read a B1 (2) read b B1 (3) r:=a mod b B2 (4) if r=0 goto (8) (5) a:= b B2 (6) b:= r B3 (7) goto (3) (8) write b B3 B4 B4 (9) halt
  • 21.  局部优化是指基本块内的优化。  对于一个给定的程序,可以把它划分 为一系列的基本块。在各个基本块内 分别进行优化。
  • 22. 基本块的 DAG 表示 DAG Directed Acyclic Graph 无环路有向图  定义: (1) 在一个有向图中,若结点 ni 有弧指向 结点 nj ,则 ni 是 nj 的父结点, nj 是 ni 的子结点; (2) 若 n1,n2,…,nk 间存在有向弧 n1n2…nk ,则称 n1 到 nk 之间存 在一条通路,若 n1=nk ,则称该通路为 环路; (3) 若有向图中任意通路都不是环路,则
  • 23. 基本块的 DAG 表示  优化中用到的有向图是一种结点带有 下述标记或附加信息的 DGA: (1) 图的叶结点以一标识符或常数做标 记,表示该结点代表该变量或常数 的值。 (2) 图的内部结点以一运算符作为标记 ; (3) 图中各个结点上可能附加一个或多 个标识符,表示这些标识符具有该 结点所代表的值,简称附标。
  • 24. 四元式对应的 DAG 结点形式  按其四元式对应结点的后继个数分成四种 类型: 0 型、 1 型、 2 型、 3 型。 DAG结点 0 型:A:=B (:=,B,—,A) n1 A B n2 A 1 型: A:=op B (op,B, — ,A) op n1 n1 B n3 2 型: A:=B op C (op, B, C ,A) op n1 n1 n2 n2 B C
  • 25. 构造以下基本块的 DAG (1) T0:=3.14 (2) T1:=2*T0 (3) T2:=R+r (4) A:=T1*T2 (5) B:=A (6) T3:=2*T0 (7) T4:=R+r (8) T5:=T3*T4 (9) T6:=R-r (10) B:=T5*T6
  • 26. n1 To 3.14 (a)
  • 27. n1 T0 n2 T1 3.14 6.28 (b)
  • 28. n5 T2 + n1 T0 n2 T1 n3 n4 3.14 6.28 R r (c)
  • 29. n6 A * n5 T2 + n1 T0 n2 T1 n3 n4 3.14 6.28 R r (d)
  • 30. n6 A,B * n5 T2 + n1 T0 n2 T1 n3 n4 3.14 6.28 R r (e)
  • 31. n6 A,B * n5 T2 + n1 T0 n2 T1,T3 n3 n4 3.14 6.28 R r (f)
  • 32. n6 A,B * n5 T2,T4 + n1 T0 n2 T1,T3 n3 n4 3.14 6.28 R r (g)
  • 33. n6 A,B,T5 * n5 T2,T4 + n1 T0 n2 T1,T3 n3 n4 3.14 6.28 R r (h)
  • 34. n6 A,B,T5 * T2,T4 T6 n5 n7 + - n1 T0 n2 T1,T3 n3 n4 3.14 6.28 R r (i)
  • 35. n8 B * n6 A,B,T5 T2,T4 T6 * n5 n7 + - n1 T0 n2 T1,T3 n3 n4 3.14 6.28 R r (j)
  • 36. 利用 DAG 进行优化  DAG 图可做到如下三种优化: (1) 合并已知量 对任何一个四元式,如果其中 参与运算的对象都是编译时的已知量 ,那么合并已知量,并用合并后算出 的常量生成一个叶结点;
  • 37. (2) 利用公共子表达式,删除多余运 算 对具有公共子表达式的所有 四元式,只产生一个计算该表达式 值的内部节点,把那些赋值的变量 附加到该节点上。
  • 38. (3) 删除无用赋值 如果某变量被赋值之后, 随后又被赋新值,那么可删除对 变量的前一个赋值。
  • 39. 由 DAG 生成优化后的代码序列 n8 B (1) T0:=3.14 (2) T1:=6.28 * (3) T3:=6.28 n6 A,T5 T2,T4 (4) T2:=R+r * n7 T6 n5 (5) T4:=T2 + - (6) A:=6.28*T2 T1,T3 (7) T5:=A n1 T0 n2 n3 n4 (8) T6:=R-r 3.14 6.28 R r (9) B:=A*T6
  • 40. 注意事项 若结点有多个附标 A1,A2,…,An, 有两种 情况: (a) 若结点是叶结点,标记为 B ,则 A1:=B,A2:=B,…,An:=B; (b) 若为内部结点,则除第一附标 A1 外 ,其他附标生成 A2:=A1,A3:=A1, …,An:=A1 。
  • 41. DAG 在基本块优化中的作用  将一基本块的每一个四元式依次表示 成对应的一个 DAG ,再按原来构造 DAG 结点的顺序重写四元式序列,便 可得到 “ 合并已知常量 ” 、 “ 删除无用赋 值 ” 、 “ 删除多余运算 ” 后的等价基本块 。  对于出了基本块以后不再引用的名字, 可以不生成对其进行的赋值运算,而用 临时变量存放相应的运算结果。
  • 42. 例:试对基本块 P (1) 应用 DAG 进行优化, (2) 假定只有 R 、 H 在基本块出口 是活跃的 , 写出优化后的四元式序列。
  • 43. S0:=2 H S1:=3/s0 n7 S2:=T - C * S3:=T + C n6 R , H , S6 / R:=s0/s3 S3,S5 n5 n4 S2 H:=R + - S4:=3/s1 n0 S0 ,S4 n1 S1 n2 n3 S5:=T + C 2 1.5 T C S6:=S4/S5 H:=S6*S2
  • 44. (1) 应用 DAG 进行优化 S0:=2 S4:=2 H n7 S1:=1.5 * S2:=T - C n6 R , H , S6 S3:=T + C / S5:=S3 S3,S5 n5 n4 S2 + - R:=2/s3 n0 S0 ,S4 n1 S1 n2 n3 S6:=R 2 1.5 T C H:=R*S2
  • 45. (2) 假定只有 R 、 H 在基本块出口是活跃的 S0:=2 S4:=2 S1:=1.5 S2:=T - C S2:=T - C S3:=T + C S3:=T + C R:=2/s3 S5:=S3 H:=R*S2 R:=2/s3 S6:=R H:=R*S2
  • 47.  循环就是程序中那些可能反复执行的 代码序列。因为循环中的代码要反复 执行,所以必须着重考虑循环的代码 优化。  首先要找出程序中的循环,这就需要 对程序的控制流程进行分析。  使用控制流程图对循环给出定义。
  • 48. 循环的性质 在程序流图中,称具有下列性 质的结点序列为一个循环: 1. 它们是强连通的。 2. 它们中间有且只有一个是入口结点 。
  • 50. 入口结点 所谓入口结点,是指序列中 具有下述性质的结点: 从序列外某结点,有一有向 边引到它,或者它就是程序流图的 首结点。
  • 51. 循环的定义 1 定义:在程序流图中 具有唯一入口结点的 2 强连通子图。 3 4 注意:从循环外要进 5 入循环,必须首先经 6 过循环的入口结点。 7
  • 52. 循环的查找 上面给出了构成循环应具备 的条件,为了找到程序流图中的循 环,需要分析流图中结点间的控制 关系。 为此引入必经结点和必经结 点集的定义。
  • 53.  必经结点:对任意两个结点 d 和 n ,若从首结点出发,到达 n 的各 条通路都必须经过的结点 d ,称 d 为 n 的必经结点,记作 d DOM n。  必经结点集: n 的全部必经结点的 集合,记作 D(n) 。
  • 54. 求必经结点集的算法 设结点 n 的父结点是 P1,P2,…,Pk , 则: D(n)= {n} ∪ (∩ D(Pi)) 1≤i≤k
  • 55. 举例 D(1)={1} 1 D(2)={1,2} 2 3 D(3)={1,2,3} 4 D(4)={1,2,4} 5 D(5)={1,2,4,5} 6 7 D(6)={1,2,4,6} D(7)={1,2,4,7}
  • 56. 循环的查找— 回边  回边:设 ab 是流图 1 中一条有向边,若 b dom a ,则称 ab 时 2 流图中的一条回边。 3 4 图中的回边有: 6 5 66 , 74 , 42 7
  • 57. 查找循环算法  每一条回边构成一个循环: 设 nd 是回边,则该回边构 成的循环包括下列结点: n 、 d 以及 不经过 d 能到达 n 的所有结点。
  • 58. 1 回边 42 循环 2 ={4 , 2 , 3 , 7 , 5 3 , 6} 回边 74 4 循环 6 5 ={7 , 4 , 5 , 6} 7 回边 66 循环 ={6}
  • 59. 查找循环算法  (1) 找出回边 nd ;  (2) 则 n 、 d 必定属于 nd 回边组成 的循环 L 中, L:={n,d}  (3) 若 n≠ d 且 n 的父节点 n’ 不在 L 中,则将它添如 L 中, L:=L∪ {n’}  (4) 对 (3) 求出的父节点 n 重复 (3) , 直至不再有新节点加入为止。
  • 60. 循环优化  在找出了程序流图中的循环之后,就 可以针对每个循环进行优化工作。  循环优化的三种重要技术: 1. 代码外提 2. 删除归纳变量 3. 强度削弱
  • 61. 循环优化的一些基本概念  点:程序中某一个四元式的位置;  定值点:对某变量赋值或输入值的四元式位 置;  引用点:引用某变量的四元式位置;  变量 A 的到达与定值: d 是 A 的定值点, u 是 A 的引用点,存在一条从 d 到 u 的通路, 并此路上没有 A 的其他定值点,称 d 点对 A 的定值能达到 u 点。  活跃:存在一条从 p 点开始的通路,在这条 通路上引用了变量 A 在 p 点的值,则称 A 在
  • 62. 循环不变运算  定义:形如 (s) A:=B op C 四元式,若 (1) B 、 C 为常量; (2) 到达 (s) 点的 B 、 C 定值点都在循 环外; 则 (s) 为循环不变运算, A 、 B 、 C 为循环不变量。
  • 63. 前置结点  实行代码外提时,在循环入口节点前建立 一个新结点 ( 基本块 ) ,称作循环的前置 结点。 前置节点 入口结点 … 入口节点 循环 L … … 循环 L …
  • 64. 代码外提的安全性  是不是所有循环不变运算的代码都能 外提到前置结点中?  不是!  下面举例说明几种不合法的代码外提 。
  • 65. {B2,B3,B4} 是循环 B1 B2 是循环的入口结点 (1)i:=1 B4 是循环的出口结点 ( 2 ) if x < y goto B3 B2 (3) i:=2 B3 (5) y:=y-1 B4 (4) x:=x+1 (6) if y<=20 goto B5 B5 (7)j:=i j=1 B1→B2→B4→B5
  • 66. B1→ B2’→ B2→B4→B5 i:=1 B1 原因: B3 不是循环 B’2 出口 B4 的必经结点 i:=2 。 if x < y goto B3 B2 B3 y:=y-1 B4 x:=x+1 if y<=20 gotoB5 B5 j=2 j:=i
  • 67. B2 是循环出口 B4 的必经结点。 B1→B2→B3→B4→B2→B4→B5 B1 i:=1 i:=3 B2 if x < y goto B3 i:=2 B3 y:=y-1 B4 x:=x+1 if y<=20 goto B5 B5 j=3 j:=i
  • 68. B1→ B2’→ B2→B3→B4→B2→B4→B5 i:=1 B原因:循环中还有 i 的其他定值点 1 B’2 i:=3 if x < y goto B3 B2 B3 y:=y-1 B4 i:=2 x:=x+1 if y<=20 gotoB5 B5 j:=i j=2
  • 69. B2 是循环出口 B4 的必经结点 B1 。 i:=1 循环中没有 i 的其他定值点 B1→B2→B3→B4→B2→B4→B5 if x < y goto B3 B2 a := i B3 i:=2 B4 x := x + 1 y:=y-1 if y<=20 goto B5 B5 j:=a j=1
  • 70. B1→ B2’→ B2→B3→B4→B2→B4→B5 i:=1 B1 原因:循环中的 B3 中有对 i 的引用 B’2 ,但到达此处的定 i:=2 值并不仅是 B4 中 的 i:=2 。 if x < y goto B3 B2 B3 y:=y-1 B4 a := i x:=x+1 if y<=20 gotoB5 B5 j=2 j:=a
  • 71. 代码外提条件 1) 该不变运算所在结点 ( 基本块 ) 必须是 循环出口结点的必经结点或者该不变 运算所定值的不变量在循环出口之后 不是活跃的。 2) 循环内不变运算所定值的变量只有唯 一的一个定值点,即在其他地方未再 定值。 3) 外提循环不变运算 (s) A:=B op C 时循 环内所有 A 的引用点必须而且仅是 (s) 所能到达的。
  • 72. 归纳变量  定义:循环中变量 I 只有唯一的形如 I:=I±C 的赋值,其中 C 为循环不变量 ,则称 I 为循环中基本归纳变量。  如果变量 J 与基本归纳变量 I 可规划为 线性关系 J:=C1*I+C2 ,其中 C1 、 C2 为循环不变量,则称 J 是与 I 同族的归 纳变量。
  • 73. 强度削弱与删除归纳变量 ( 1) 利用循环不变运算的信息,找出循 环中基本归纳变量 X ; ( 2) 找出所有归纳变量 A ,并指出 A 与 X 的线性关系 A : =C 1 X+C 2 。 ( 3) 强度减弱,将循环 L 中归纳变量的 算式化为自增赋值算式,然后: 在循环前置节点中按原式计算初值 ; 将自增赋值算式置于 L 中原基本归
  • 74. (4) 删除归纳变量。 基本归纳变量除了自身的递归定 值外,往往只是作为循环控制和其他同 族归纳变量的计算。 在强度削弱后,其他同族归纳变 量在循环中的运算因转换成递归增加一 个常量,与基本归纳变量无直接关系了 。 因此只要将循环控制条件由依赖 于基本归纳变量转换成依赖于它的同族 归纳变量,此时基本归纳变量除了唯一 的递归定值外,已别无用处,可删除。