# HG changeset patch # User twisti # Date 1397845500 36000 # Node ID dea854d572a97df31ac3e4c09df3a1fd8e5c0d07 # Parent 0eff788983f92d3965df536fea4a13a171e3b98c add LocationIdentity to CompareAndSwapNode diff -r 0eff788983f9 -r dea854d572a9 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 Thu Apr 17 14:41:48 2014 -1000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Fri Apr 18 08:25:00 2014 -1000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,19 @@ private final Kind valueKind; private final int displacement; + private final LocationIdentity locationIdentity; + + public CompareAndSwapNode(ValueNode object, int displacement, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) { + super(StampFactory.forKind(Kind.Boolean.getStackKind())); + assert expected.stamp().isCompatible(newValue.stamp()); + this.object = object; + this.offset = offset; + this.expected = expected; + this.newValue = newValue; + this.displacement = displacement; + this.valueKind = valueKind; + this.locationIdentity = locationIdentity; + } public ValueNode object() { return object; @@ -70,20 +83,9 @@ return valueKind; } - public CompareAndSwapNode(ValueNode object, int displacement, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind) { - super(StampFactory.forKind(Kind.Boolean.getStackKind())); - assert expected.stamp().isCompatible(newValue.stamp()); - this.object = object; - this.offset = offset; - this.expected = expected; - this.newValue = newValue; - this.displacement = displacement; - this.valueKind = valueKind; - } - @Override public LocationIdentity getLocationIdentity() { - return LocationIdentity.ANY_LOCATION; + return locationIdentity; } @Override @@ -94,19 +96,19 @@ // specialized on value type until boxing/unboxing is sorted out in intrinsification @NodeIntrinsic public static boolean compareAndSwap(Object object, @ConstantNodeParameter int displacement, long offset, Object expected, Object newValue, - @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind) { + @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { return unsafe.compareAndSwapObject(object, displacement + offset, expected, newValue); } @NodeIntrinsic public static boolean compareAndSwap(Object object, @ConstantNodeParameter int displacement, long offset, long expected, long newValue, - @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind) { + @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { return unsafe.compareAndSwapLong(object, displacement + offset, expected, newValue); } @NodeIntrinsic public static boolean compareAndSwap(Object object, @ConstantNodeParameter int displacement, long offset, int expected, int newValue, - @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind) { + @SuppressWarnings("unused") @ConstantNodeParameter Kind valueKind, @SuppressWarnings("unused") @ConstantNodeParameter LocationIdentity locationIdentity) { return unsafe.compareAndSwapInt(object, displacement + offset, expected, newValue); } } diff -r 0eff788983f9 -r dea854d572a9 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java Thu Apr 17 14:41:48 2014 -1000 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java Fri Apr 18 08:25:00 2014 -1000 @@ -42,17 +42,17 @@ @MethodSubstitution(isStatic = false) public static boolean compareAndSwapObject(@SuppressWarnings("unused") final Object thisObj, Object o, long offset, Object expected, Object x) { - return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Object); + return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Object, LocationIdentity.ANY_LOCATION); } @MethodSubstitution(isStatic = false) public static boolean compareAndSwapInt(@SuppressWarnings("unused") final Object thisObj, Object o, long offset, int expected, int x) { - return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Int); + return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Int, LocationIdentity.ANY_LOCATION); } @MethodSubstitution(isStatic = false) public static boolean compareAndSwapLong(@SuppressWarnings("unused") final Object thisObj, Object o, long offset, long expected, long x) { - return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Long); + return CompareAndSwapNode.compareAndSwap(o, 0, offset, expected, x, Kind.Long, LocationIdentity.ANY_LOCATION); } @MethodSubstitution(isStatic = false)