# HG changeset patch # User Christos Kotselidis # Date 1366241038 -7200 # Node ID 34eba4e78a0a81a22555d50c529bd7d3436004cd # Parent c433aad055b987a00fec737cee9de7af4963aaca Attach LocationNode to CompareAndSwapNode diff -r c433aad055b9 -r 34eba4e78a0a 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 Wed Apr 17 22:59:36 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Apr 18 01:23:58 2013 +0200 @@ -580,6 +580,8 @@ } else if (n instanceof CompareAndSwapNode) { // Separate out GC barrier semantics CompareAndSwapNode cas = (CompareAndSwapNode) n; + LocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, cas.expected().kind(), cas.displacement(), cas.offset(), graph, 1); + cas.setLocation(location); cas.setWriteBarrierType(getCompareAndSwapBarrier(cas)); } else if (n instanceof LoadIndexedNode) { LoadIndexedNode loadIndexed = (LoadIndexedNode) n; diff -r c433aad055b9 -r 34eba4e78a0a 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 Wed Apr 17 22:59:36 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Thu Apr 18 01:23:58 2013 +0200 @@ -61,11 +61,9 @@ private static void addCASBarriers(CompareAndSwapNode node, StructuredGraph graph) { WriteBarrierType barrierType = node.getWriteBarrierType(); if (barrierType == WriteBarrierType.PRECISE) { - LocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, node.expected().kind(), node.displacement(), node.offset(), graph, 1); - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), location, true))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getLocation(), true))); } else if (barrierType == WriteBarrierType.IMPRECISE) { - LocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, node.expected().kind(), node.displacement(), node.offset(), graph, 1); - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), location, false))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getLocation(), false))); } else { assert barrierType == WriteBarrierType.NONE; } diff -r c433aad055b9 -r 34eba4e78a0a 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 Wed Apr 17 22:59:36 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Thu Apr 18 01:23:58 2013 +0200 @@ -42,6 +42,7 @@ @Input private ValueNode offset; @Input private ValueNode expected; @Input private ValueNode newValue; + @Input private LocationNode location; private final int displacement; private WriteBarrierType barrierType; @@ -65,6 +66,15 @@ return displacement; } + public LocationNode getLocation() { + return location; + } + + public void setLocation(LocationNode location) { + updateUsages(this.location, location); + this.location = location; + } + public WriteBarrierType getWriteBarrierType() { return barrierType; }