CompareAndSwapNode support
Christian Thalinger
christian.thalinger at oracle.com
Sun Oct 27 11:18:06 PDT 2013
On Oct 25, 2013, at 6:07 AM, Deneau, Tom <tom.deneau at amd.com> wrote:
> Just to further clarify...
>
> We had a HSAIL junit test that called AtomicInteger.getAndAddInt from a lambda. This made it java 8 specific. This test worked fine (building and running graal with java 8) up until we started doing this merge with the new infrastructure changes.
>
> We now have a version of this test that does the same thing but does not use lambdas.
By “does the same thing” you mean calling AtomicInteger.getAndAdd? The code for AtomicInteger.getAndAdd is different on 7 and 8:
http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/raw-file/tip/src/share/classes/java/util/concurrent/atomic/AtomicInteger.java
public final int getAndAdd(int delta) {
for (;;) {
int current = get();
int next = current + delta;
if (compareAndSet(current, next))
return current;
}
}
http://hg.openjdk.java.net/jdk8/jdk8/jdk/raw-file/tip/src/share/classes/java/util/concurrent/atomic/AtomicInteger.java
public final int getAndAdd(int delta) {
return unsafe.getAndAddInt(this, valueOffset, delta);
}
That's why you get different code in the compiler.
> So this new version can be invoked from java 7. This new java7-style junit test still fails when we build our newly merged graal (newly merged with the new infrastructure) with java 8-b109 and try to run the test. The top of the stack trace is shown below.
>
> But if I build our merged graal with java7 b21 this new junit test succeeds.
>
> -- Toim
>
> ________________________________________
> From: Christian Thalinger [christian.thalinger at oracle.com]
> Sent: Thursday, October 24, 2013 8:00 PM
> To: Deneau, Tom
> Cc: graal-dev at openjdk.java.net
> Subject: Re: CompareAndSwapNode support
>
> On Oct 24, 2013, at 3:24 PM, Deneau, Tom <tom.deneau at amd.com> wrote:
>
>> Some additional information on this...
>>
>> The original junit test was written using lambdas and so could not be run under java 7. Since our junit framework also supports java7 style tests, I rewrote the test to be java 7, and rebuilt graal with java 7. And with no other changes to graal, the test now passes.
>>
>> Does this make any sense?
>>
>> -- Tom
>>
>> From: Deneau, Tom
>> Sent: Thursday, October 24, 2013 3:21 PM
>> To: graal-dev at openjdk.java.net
>> Subject: CompareAndSwapNode support
>>
>> In the HSAIL backend, we had support for CompareAndSwapNode. (we had not pushed this out to the trunk yet).
>>
>> As part of the merge with the new runtime infrastructure changes, I see that our CompareAndSwapNode support is broken.
>> I'm trying to understand how to get it working again.
>>
>> In the particular test I'm looking at the java code calls atomicInt.getAndAdd(constant)
>
> Do you mean getAndAddInt? If you are talking about the Unsafe guys these exist since 1.8. So compiling (and running) with 7 or 8 definitely makes a difference.
>
>>
>> First I noticed that we were getting Invoke nodes for things like getIntVolatile and compareAndSwapInt.
>> So I assumed the UnsafeSubstitutions needed to be enabled for our backend.
>>
>> When I enabled these, I got the following error which doesn't mean anything to me...
>>
>> java.lang.AssertionError: <unknown> has unexpected usage 20|LoadField#value of checkcast 19|GuardingPi at <unknown>
>> at com.oracle.graal.replacements.NodeIntrinsificationPhase.checkCheckCastUsage(NodeIntrinsificationPhase.java:387)
>> at com.oracle.graal.replacements.NodeIntrinsificationPhase.checkCheckCastUsage(NodeIntrinsificationPhase.java:382)
>> at com.oracle.graal.replacements.NodeIntrinsificationPhase.cleanUpReturnCheckCast(NodeIntrinsificationPhase.java:328)
>> at com.oracle.graal.replacements.NodeIntrinsificationPhase.run(NodeIntrinsificationPhase.java:67)
>>
>> Any suggestions?
>>
>> -- Tom
>>
>
>
>
More information about the graal-dev
mailing list