@Override protected List<Set<FloatingReadNode>> processLoop( Loop<Block> loop, Set<FloatingReadNode> initialState) { HIRLoop l = (HIRLoop) loop; for (MemoryPhiNode memoryPhi : ((LoopBeginNode) l.getHeader().getBeginNode()).phis().filter(MemoryPhiNode.class)) { for (FloatingReadNode r : cloneState(initialState)) { if (r.getLocationIdentity().overlaps(memoryPhi.getLocationIdentity())) { initialState.remove(r); } } } return ReentrantBlockIterator.processLoop(this, loop, initialState).exitStates; }
public static boolean check(Block startBlock, BlockMap<List<Node>> blockToNodesMap) { ReentrantBlockIterator.apply(new MemoryScheduleVerification(blockToNodesMap), startBlock); return true; }