例 i:=0 0 while i<10 do begin while j<10 do beg in A[i[j]:=A[i[j+A[i][j+1]; j:=j+1 d+ en en d
例 i:=0; j:=0; while i<10 do begin while j<10 do begin A[i][j]:=A[i][j]+A[i][j+1]; j:=j+1; end i:=i+1; end
第九章中间代码优化 引言 c常量表达式优化 C公共表达式优化 C循环不变式外提
第九章 中间代码优化 引言 常量表达式优化 公共表达式优化 循环不变式外提
优化的目标: 优化的要求: 优化的对象:深层循环和下标变量地址的计算 优化的种类 常表达式优化(合并常数项) 公共表达式优化(消除重复操作) 循环不变表达式外提 削减运算强度等等 优化方法 全局优化:全局信息 局部优化:局部信息
优化的目标: 优化的要求: 优化的对象:深层循环和下标变量地址的计算 优化的种类: 常表达式优化(合并常数项) 公共表达式优化(消除重复操作) 循环不变表达式外提 削减运算强度等等 优化方法: 全局优化:全局信息 局部优化:局部信息
基本块和程序流图 的基本块:单入口单出口的程序段。 程序流图:以基本块为结点的有向图,有向边表示 程序执行的流程。 中间代码基本块的划分: 令初始代码为第一个基本块的入口 令遇转移性中间代码时,结束当前基本块,下一条 代码作为新基本块的入口 令遇标号性代码结束当前基本块,代码本身作为新 基本块的入口。 遇( ASSIG,A,X)时,如果X为引用型形参时结 束当前块,并作为该块的出口
基本块和程序流图 基本块:单入口单出口的程序段。 程序流图:以基本块为结点的有向图,有向边表示 程序执行的流程。 中间代码基本块的划分: ❖ 初始代码为第一个基本块的入口 ❖ 遇转移性中间代码时,结束当前基本块,下一条 代码作为新基本块的入口 ❖ 遇标号性代码结束当前基本块,代码本身作为新 基本块的入口。 ❖ 遇(ASSIG, A, X)时,如果X为引用型形参时结 束当前块,并作为该块的出口
基本块划分的例子 B,:( ASSIGN, 1,Y)B:( LABEL, L6) B,:( LABEL, LO (ADDI, X,Y,t3) B AND, A, b, t) (GT,t3,0,t4) B JUMPO, t, L4 (JUMPO, t4, L8) B3: ASSIGN,0,X)B,: SUBI, X, 1, t5 3 B JUMP, L5 ( ASSIGN, t5, x) B:( LABEL, L4) JUMP, L6) B (ASSIG, 0, Y) B:( LABEL, L8 B:( LABEL, L5) ASSIGN, 0,Z) B 6 ADDI, X,1, t1) STOP B7 B ASSIGN, t1, X suBY 1. t2 程序流图例 ASSIGN, t2, y
基本块划分的例子 B1 :( ASSIGN,1, Y ) B6 :( LABEL, L6) B2 :( LABEL, L0 ) (ADDI, X, Y,t3 ) ( AND,A, B, t ) (GT, t3, 0, t4 ) ( JUMP0, t, L4) (JUMP0, t4, L8) B3 :( ASSIGN, 0, X ) B7 :( SUBI, X, 1,t5 ) ( JUMP, L5 ) ( ASSIGN, t5, X ) B4 :( LABEL, L4) ( JUMP, L6 ) ( ASSIG,0, Y ) B8 :( LABEL, L8 ) B5 :( LABEL, L5 ) ( ASSIGN, 0, Z ) ( ADDI, X, 1, t1) ( STOP ) ( ASSIGN, t1, X ) ( SUBI Y, 1, t2 ) ( ASSIGN, t2, Y) B1 B2 B3 B4 B5 B6 B7 B8 程序流图例