# HG changeset patch # User Lukas Stadler # Date 1361972116 -3600 # Node ID f7b40e9d490c7439eee990bed006ee17ffcd7766 # Parent fed868d1aefdd9b54884df6340309cd75f920f4d ValueProxyNodes for memory locations at loop exits diff -r fed868d1aefd -r f7b40e9d490c graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Wed Feb 27 09:53:49 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Wed Feb 27 14:35:16 2013 +0100 @@ -230,6 +230,16 @@ phi.initializeValueAt(endIndex, entry.getValue().getLastLocationAccess(key)); } } + for (Map.Entry entry : loopInfo.exitStates.entrySet()) { + LoopExitNode exit = entry.getKey(); + MemoryMap state = entry.getValue(); + for (Object location : modifiedLocations) { + ValueNode lastAccessAtExit = state.lastMemorySnapshot.get(location); + if (lastAccessAtExit != null) { + state.lastMemorySnapshot.put(location, loop.graph().add(new ValueProxyNode(lastAccessAtExit, exit, PhiType.Memory))); + } + } + } return loopInfo.exitStates; } }