# HG changeset patch # User Christos Kotselidis # Date 1375803047 -7200 # Node ID 7244c8366d4401b43babe7f33f44948c729e2e92 # Parent 8f33568d693dc71726fcfb64de9494407691e29a# Parent 113a303da13bafd5bdbfcc17d692201715020175 Merge diff -r 8f33568d693d -r 7244c8366d44 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Tue Aug 06 14:39:47 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Tue Aug 06 17:30:47 2013 +0200 @@ -593,6 +593,7 @@ LocationNode location = IndexedLocationNode.create(ANY_LOCATION, cas.expected().kind(), cas.displacement(), cas.offset(), graph, 1); LoweredCompareAndSwapNode atomicNode = graph.add(new LoweredCompareAndSwapNode(cas.object(), location, cas.expected(), cas.newValue(), getCompareAndSwapBarrier(cas), cas.expected().kind() == Kind.Object)); + atomicNode.setStateAfter(cas.stateAfter()); graph.replaceFixedWithFixed(cas, atomicNode); } else if (n instanceof LoadIndexedNode) { LoadIndexedNode loadIndexed = (LoadIndexedNode) n; diff -r 8f33568d693d -r 7244c8366d44 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Tue Aug 06 14:39:47 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Tue Aug 06 17:30:47 2013 +0200 @@ -99,17 +99,17 @@ BarrierType barrierType = node.getBarrierType(); if (barrierType == BarrierType.PRECISE) { if (useG1GC()) { - graph.addBeforeFixed(node, graph.add(new G1PreWriteBarrier(node.object(), node.getExpectedValue(), node.getLocation(), false, false))); - graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), true))); + graph.addBeforeFixed(node, graph.add(new G1PreWriteBarrier(node.object(), node.getExpectedValue(), node.location(), false, false))); + graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.getNewValue(), node.location(), true))); } else { - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), true))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getNewValue(), node.location(), true))); } } else if (barrierType == BarrierType.IMPRECISE) { if (useG1GC()) { - graph.addBeforeFixed(node, graph.add(new G1PreWriteBarrier(node.object(), node.getExpectedValue(), node.getLocation(), false, false))); - graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), false))); + graph.addBeforeFixed(node, graph.add(new G1PreWriteBarrier(node.object(), node.getExpectedValue(), node.location(), false, false))); + graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.getNewValue(), node.location(), false))); } else { - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), false))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getNewValue(), node.location(), false))); } } else { assert barrierType == BarrierType.NONE; diff -r 8f33568d693d -r 7244c8366d44 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java diff -r 8f33568d693d -r 7244c8366d44 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Aug 06 14:39:47 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Aug 06 17:30:47 2013 +0200 @@ -40,7 +40,6 @@ @Input private ValueNode offset; @Input private ValueNode expected; @Input private ValueNode newValue; - @Input private LocationNode location; private final int displacement; public ValueNode object() { @@ -63,15 +62,6 @@ return displacement; } - public LocationNode getLocation() { - return location; - } - - public void setLocation(LocationNode location) { - updateUsages(this.location, location); - this.location = location; - } - public CompareAndSwapNode(ValueNode object, int displacement, ValueNode offset, ValueNode expected, ValueNode newValue) { super(StampFactory.forKind(Kind.Boolean.getStackKind())); assert expected.kind() == newValue.kind(); diff -r 8f33568d693d -r 7244c8366d44 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Tue Aug 06 14:39:47 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Tue Aug 06 17:30:47 2013 +0200 @@ -34,10 +34,8 @@ */ public class LoweredCompareAndSwapNode extends AccessNode implements StateSplit, LIRLowerable, MemoryCheckpoint.Single, Node.IterableNodeType { - @Input private ValueNode object; @Input private ValueNode expectedValue; @Input private ValueNode newValue; - @Input private LocationNode location; @Input(notDataflow = true) private FrameState stateAfter; public FrameState stateAfter() { @@ -54,10 +52,6 @@ return true; } - public ValueNode getObject() { - return object; - } - public ValueNode getExpectedValue() { return expectedValue; } @@ -66,26 +60,20 @@ return newValue; } - public LocationNode getLocation() { - return location; - } - public LoweredCompareAndSwapNode(ValueNode object, LocationNode location, ValueNode expectedValue, ValueNode newValue, BarrierType barrierType, boolean compressible) { super(object, location, StampFactory.forKind(Kind.Boolean.getStackKind()), barrierType, compressible); assert expectedValue.kind() == newValue.kind(); - this.object = object; this.expectedValue = expectedValue; this.newValue = newValue; - this.location = location; } @Override public LocationIdentity getLocationIdentity() { - return location.getLocationIdentity(); + return location().getLocationIdentity(); } @Override public void generate(LIRGeneratorTool gen) { - gen.visitCompareAndSwap(this, getLocation().generateAddress(gen, gen.operand(getObject()))); + gen.visitCompareAndSwap(this, location().generateAddress(gen, gen.operand(object()))); } }