@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;
 }