Mercurial > hg > truffle
changeset 7864:b66a826acf4b
add location identity to MemoryCheckpoint and let WriteNode implement MemoryCheckpoint
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -52,6 +52,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGenerator gen) { gen.lock(); StackSlot lockData = gen.peekLock();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -50,11 +50,6 @@ this.newValue = newValue; } - @Override - public void generate(LIRGenerator gen) { - ((HotSpotLIRGenerator) gen).visitDirectCompareAndSwap(this); - } - public ValueNode object() { return object; } @@ -71,6 +66,16 @@ return newValue; } + @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override + public void generate(LIRGenerator gen) { + ((HotSpotLIRGenerator) gen).visitDirectCompareAndSwap(this); + } + /** * Compares an expected value with the actual value in a location denoted by an object and a * given offset. Iff they are same, {@code newValue} is placed into the location and the
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -44,6 +44,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGenerator gen) { gen.unlock(); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -109,6 +109,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void lower(LoweringTool tool) { tool.getRuntime().lower(this, tool); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -161,6 +161,11 @@ return true; } + @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + public FrameState stateDuring() { FrameState tempStateAfter = stateAfter(); FrameState stateDuring = tempStateAfter.duplicateModified(bci(), tempStateAfter.rethrowException(), kind());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -29,4 +29,8 @@ */ public class StartNode extends BeginStateSplitNode implements MemoryCheckpoint { + @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -43,6 +43,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGeneratorTool generator) { generator.emitMembar(barriers); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MemoryCheckpoint.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MemoryCheckpoint.java Wed Feb 13 15:52:26 2013 +0100 @@ -24,4 +24,6 @@ public interface MemoryCheckpoint { + Object getLocationIdentity(); + }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/RuntimeCallNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/RuntimeCallNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -49,6 +49,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGeneratorTool gen) { gen.visitRuntimeCall(this); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteMemoryCheckpointNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteMemoryCheckpointNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -37,6 +37,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGeneratorTool generator) { // nothing to do... }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -29,7 +29,7 @@ /** * Writes a given {@linkplain #value() value} a {@linkplain AccessNode memory location}. */ -public final class WriteNode extends AccessNode implements StateSplit, LIRLowerable { +public final class WriteNode extends AccessNode implements StateSplit, LIRLowerable, MemoryCheckpoint { @Input private ValueNode value; @Input(notDataflow = true) private FrameState stateAfter; @@ -64,4 +64,9 @@ @NodeIntrinsic public static native void writeMemory(Object object, Object value, Object location); + + @Override + public Object getLocationIdentity() { + return location().locationIdentity(); + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -71,6 +71,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGeneratorTool gen) { gen.visitCompareAndSwap(this); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -42,6 +42,11 @@ } @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + + @Override public void generate(LIRGeneratorTool gen) { gen.visitExceptionObject(this); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -40,6 +40,11 @@ super(object); } + @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + public void lower(LoweringTool tool) { tool.getRuntime().lower(this, tool); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Wed Feb 13 15:52:26 2013 +0100 @@ -41,6 +41,11 @@ super(object); } + @Override + public Object getLocationIdentity() { + return LocationNode.ANY_LOCATION; + } + public void lower(LoweringTool tool) { tool.getRuntime().lower(this, tool); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Tue Feb 12 14:22:38 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Wed Feb 13 15:52:26 2013 +0100 @@ -185,8 +185,6 @@ private void processNode(FixedNode node, MemoryMap state) { if (node instanceof ReadNode) { processRead((ReadNode) node, state); - } else if (node instanceof WriteNode) { - processWrite((WriteNode) node, state); } else if (node instanceof MemoryCheckpoint) { processCheckpoint((MemoryCheckpoint) node, state); } else if (node instanceof LoopExitNode) { @@ -195,22 +193,13 @@ } private static void processCheckpoint(MemoryCheckpoint checkpoint, MemoryMap state) { - processAnyLocationWrite((ValueNode) checkpoint, state); - } - - private static void processWrite(WriteNode writeNode, MemoryMap state) { - if (writeNode.location().locationIdentity() == LocationNode.ANY_LOCATION) { - processAnyLocationWrite(writeNode, state); + if (checkpoint.getLocationIdentity() == LocationNode.ANY_LOCATION) { + for (Map.Entry<Object, ValueNode> entry : state.lastMemorySnapshot.entrySet()) { + entry.setValue((ValueNode) checkpoint); + } + state.loops.clear(); } - state.lastMemorySnapshot.put(writeNode.location().locationIdentity(), writeNode); - } - - private static void processAnyLocationWrite(ValueNode modifiying, MemoryMap state) { - for (Map.Entry<Object, ValueNode> entry : state.lastMemorySnapshot.entrySet()) { - entry.setValue(modifiying); - } - state.lastMemorySnapshot.put(LocationNode.ANY_LOCATION, modifiying); - state.loops.clear(); + state.lastMemorySnapshot.put(checkpoint.getLocationIdentity(), (ValueNode) checkpoint); } private void processRead(ReadNode readNode, MemoryMap state) {