304 |
(checkPhi (nd, VSet.union(Avail.inValue nd, bvs), !mask)) |
(checkPhi (nd, VSet.union(Avail.inValue nd, bvs), !mask)) |
305 |
(!phis) |
(!phis) |
306 |
| IR.COND{cond, ...} => |
| IR.COND{cond, ...} => |
307 |
if VSet.member(Avail.inValue nd, cond) |
if VSet.member(Avail.inValue nd, !cond) |
308 |
orelse VSet.member(bvs, cond) |
orelse VSet.member(bvs, !cond) |
309 |
then () |
then () |
310 |
else errFn [S "unbound variable ", V cond, S " in conditional"] |
else errFn [S "unbound variable ", V(!cond), S " in conditional"] |
311 |
| IR.FOREACH{phis, mask, var, src, ...} => ( |
| IR.FOREACH{phis, mask, var, src, ...} => ( |
312 |
if VSet.member(Avail.inValue nd, src) |
if VSet.member(Avail.inValue nd, !src) |
313 |
orelse VSet.member(bvs, src) |
orelse VSet.member(bvs, !src) |
314 |
then () |
then () |
315 |
else errFn [S "unbound variable ", V src, S " in foreach"]; |
else errFn [S "unbound variable ", V(!src), S " in foreach"]; |
316 |
List.app |
List.app |
317 |
(checkPhi (nd, VSet.union(Avail.inValue nd, bvs), !mask)) |
(checkPhi (nd, VSet.union(Avail.inValue nd, bvs), !mask)) |
318 |
(!phis)) |
(!phis)) |