编译算法:SSA上的条件常数传播



背景: 

SSA有phi语句,有def-use边。CFG以每条语句(普通语句或phi语句)作为节点。


算法思想:


在CFG的流边上进行符号执行:从entry开始执行,记录每个变量的lattice值(初始值top,常数,非常数bottom)。处理完当前节点(语句),则将其后继节点放入流边的worklist。

1. 符号执行:在处理分支节点时,如果能确定分支条件为常数值,则仅仅将确定的分支放入流边的worklist;反之,无法确定哪个分支会执行,则所有后继节点都放入流边的worklist。

2. 流边都初始化为不可执行,处理之后则标记为可执行(表示程序可以执行到这里)。每条流边仅处理一次(其目的就是标记该边可执行)。


在SSA的def-use边上进行常数传播,前提是当前节点的前驱节点已经被流边处理过(表示当前节点是可执行的)。

1. SSA边可以反复处理,直到SSA的worklist空了为止。


【总结:流边负责标记CFG中哪些语句是可执行的(可达的),也做一部分常数传播的工作。SSA负责将进行快速的常数传播(如果CFG存在循环,则会在CFG上进行多次迭代,直到变量的常数值稳定为止)。】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值