编译原理之代码优化共47页文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解决的问题
- 定值“传播”
数据流归属
- 任意路径、向前流的数据流分析 - IN[B],到达基本块入口处定值集合 - OUT[B],到达基本块出口处定值集合 - GEN[B],基本块产生且能到达基本块出口的定值集合 - KILL[B],由基本块注销的定值集合(这些定值不能传 播或到达到块出口)
数据流应用
OUT[B] = GEN[B] ∪(IN[B]-KILL[B])
全路径
IN[B] = ∩OUT[P] , P∈Pred(B)
IN[B] = GEN[B] ∪(OUT[B]-KILL[B]) OUT[B] = ∩IN[S] , S∈Succ(B)
表1. 数据流分析方程
25.06.2020
《编译原理与技术》之代码优化
《编译原理与技术》之代码优化
7
1 2 3
4
6
5
7
1
2 3
4
5
6
7
8
8
10
9
e.g.深度优先扩
展树
9
Leabharlann Baidu
10
e.g. 一个流图
前序遍历:1->2->3->4->6->7->8->10->8->9->8->7->6->4->5->4->3->2->1
深度优先次序:1,2,3,4,5,6,7,8,9,10
25.06.2020
•代码优化的目标
提高最终目标代码的运行效率(性能) - 时间:运行的更快 - 空间:降低内存需求
• 保持源程序的语义
代码优化(续)
- 全局数据流分析技术
25.06.2020
《编译原理与技术》之代码优化
2
•全局数据流分析
基本块“产生” 的相关数据流信

到达基本块出口 处的相关数据流
信息
IN[B]
15
前驱1 OUT: dm : x:= …
前驱2 OUT: dn : x:= …
IN[B] … ds : s := …x… … dt : x := … … du : x := …

dm和dn :我们被dt所 “屏蔽”。不知何时上 了“注销”榜?
dt : 你们歇着吧。我要 Go Go Go
25.06.2020
OUT[B]《=编?译原理与技术》之代码优化
14
前驱1 OUT: dm : x:= …
前驱2 OUT: dn : x:= …
IN[B] … ds : s := …x… … dt : x := … … du : x := …

dm和dn :再走一 程见 dt, ^_^
25.06.2020
OUT[B]《=编?译原理与技术》之代码优化
IN[B]

25.06.2020
OUT[B]《=编?译原理与技术》之代码优化
13
前驱1
前驱2
OUT: dm : x:= …
OUT: dn : x:= …
IN[B] … ds : s := …x… … dt : x := … … du : x := …
dm和dn :一路无险 遇 ds

25.06.2020
《编译原理与技术》之代码优化
8
•全局数据流方程求解
向前流
向后流
问题
初始值
问题
初始值
任意 到达-定值/ud链

活跃变量

路径 未初始化变量 所有变量
du链

全路 径
可用表达式 复写传播
∅ 非常忙表达式 ∅ ∅
表2. 常用的数据流分析
25.06.2020
《编译原理与技术》之代码优化
9
•到达-定值数据流分析
6
•全局数据流方程求解
迭代计算:直至某先后两次迭代计算结果一样 迭代次序
- 向前流:流图深度优先次序 - 向后流:流图深度优先次序的逆序 - 流图深度优先次序:
- 对流图进行深度优先遍历,得到流图深度 优先扩展树;对该树进行前序遍历时最后
访问结点的逆序 迭代初始计算(值)
25.06.2020
到达基本块入口处 的相关数据流信息
GEN[B] KILL[B]
基本块
OUT[B]
基本块“注销” 的相关数据流信

25.06.2020
《编译原理与技术》之代码优化
3
•全局数据流分析
数据流的“方向”
- 正向(向前)数据流:与控制流方向一致
前驱1 控制流
25.06.2020
前驱2 基本块B
- OUT[B]由IN[B]来计算 - IN[B]则由B的所有前驱结
数据流
《编译原理与技术》之代码优化
5
•全局数据流分析
向前流
任意 路径
OUT[B] = GEN[B] ∪ (IN[B]-KILL[B]) IN[B] = ∪OUT[P] , P∈Pred(B)
向后流
IN[B] = GEN[B] ∪(OUT[B]-KILL[B]) OUT[B] = ∪IN[S] , S∈Succ(B)
点的OUT来决定
表示数据流信息交汇(合流)处
数据流
《编译原理与技术》之代码优化
4
•全局数据流分析
数据流的“方向”
- 反向(向后)数据流:与控制流方向相逆
基本块B
后继1 控制流
25.06.2020
- IN[B]由OUT[B] 来计算 - OUT [B]则由B的所有后继结
点的IN来决定
后继2
表示数据流信息交汇(合流)处
OUT[B]《=编?译原理与技术》之代码优化
16
前驱1 OUT: dm : x:= …
前驱2 OUT: dn : x:= …
IN[B] … ds : s := …x… … dt : x := … … du : x := …

dt:等等,我咋也上榜 了?唉,既生t,何生u? du:数“流”人,还 看…
定值与引用
d : x := y + z // 语句d 是变量x的一个定值点
流图中有路径d---->u, 且该路径上没有x的其 它(无二义)定值。
u : w := x + v // 语句u 是变量x的一个引用点
变量x在d点的定值到达u点
25.06.2020
《编译原理与技术》之代码优化
10
•到达-定值数据流分析

控制流
OUT[B] = ?
25.06.2020
《编译原理与技术》之代码优化
12
前驱1 OUT: dm : x:= …
前驱2 OUT: dn : x:= …
IN[B] … ds : s := …x… … dt : x := … … du : x := …
英雄惜英雄,dm 和 dn 相会在汇流点,共赴
- ud链,即引用-定值链。可以据此判断基本块内的某 变量引用,其值来自何方(定值)。如应用于循环不变式 的寻找。
25.06.2020
《编译原理与技术》之代码优化
11
前驱1 OUT: dm : x:= …
前驱2 OUT: dn : x:= …
IN[B] … ds : s := …x… … dt : x := … … du : x := …
相关文档
最新文档