changeset 7895:f7b40e9d490c

ValueProxyNodes for memory locations at loop exits
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 27 Feb 2013 14:35:16 +0100
parents fed868d1aefd
children 649379d3f88d
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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<LoopExitNode, MemoryMap> 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;
         }
     }