1. 基于谓词的IF转换
1.1if转换的实现过程需要考虑两个方面的问题
(1)如何为每个基本块分配谓词
(2)将谓词定义指令放在程序的什么位置
程序段的代码都可以根据其自身的控制依赖,表示为相关的程序依赖图(PDG),图中每个顶点表示一个基本块,每条边,代表了一个可能的控制转移。因此每个基本块的谓词由它所在的分支路径和PDG中的分支条件决定,所以第一个问题就相当于如何为PDG中每个顶点指定谓词。第二个问题需要考虑分支转移的最早位置。
当前有关的if转换都是基于一个经典的IF转换算法,它能够将谓词的使用和谓词定义指令的数目最小化
1、 计算后必经节点;
2、 计算指令间的控制依赖;
3、 将控制依赖分解成R,K,函数;
4、 根据R,K函数分配谓词并用对应的限定谓词将指令转换为谓词指令;
5、 合并谓词定义指令;
6、 减少谓词数目
我们通过两个函数来解决,R规定了每个块的赋值命名和相关谓词,K规定了使用中的每个谓词的位置指示,而位置取决于(1)谓词操作的语义(2)执行风格
2. 计算后必经节点信息
必经节点:如果控制流图节点d是节点i的必经节点,记作d dom i,如果从entry节点到i的每一条可能执行的路径都包括d,显然d是自反的(每个节点都是自己的必经节点)、传递的(a dom b 且b dom c,则a dom c)、和反对称的(a dom b 且b dom a,则a=b),任何节点的必经节点是一个集合。
后必经