Java数组边界检查消除的综合方法
1. 约束图状态变化示例
首先来看一个简单的代码示例及其对应的约束图状态变化:
s0 : i = j + 2;
s1 : a[i] = · · · ;
s2 : i = · · · ;
s3 : a[j] = · · · ;
语句 s1 会生成约束 i - a ≤ -1 和 0 - i ≤ 0 ,从而在约束图中产生从 a 到 i 以及从 i 到 0 的边。通过累加边的权重,从 a 到 j 的路径意味着约束 j - a ≤ -3 。在语句 s2 中, i 失去了来自 a 和 j 的约束,路径 a → i → j 不再存在,但通过一条权重为 -3 的直接从 a 到 j 的新边,约束条件仍然得以保留。因此,在执行语句 s3 之前,约束 j - a ≤ -3 仍然有效,这使得 s3 的上界检查可以被证明是安全的。
超级会员免费看
订阅专栏 解锁全文
47

被折叠的 条评论
为什么被折叠?



