Looks like only 32-bit is affected. Both Server (C2) and Client (C1) VMs.

64-bit VM pass all combinations: Tiered, C2 only (-TieredCompilation), C1 only (-XX:+TieredCompilation -XX:TieredStopAtLevel=1) with and without intrinsics.

32-bit Client VM (C1) fails with both, -XX:-UseUnalignedAccesses and -XX:+UseUnalignedAccesses.

$ bin/java -client -XX:+UnlockDiagnosticVMOptions -XX:-UseUnalignedAccesses HeapByteBufferTest
Exception in thread "main" java.lang.RuntimeException
        at MyByteBuffer.ck(HeapByteBufferTest.java:201)
        at MyByteBuffer.getLong(HeapByteBufferTest.java:211)
        at HeapByteBufferTest.step(HeapByteBufferTest.java:311)
        at HeapByteBufferTest.run(HeapByteBufferTest.java:347)
        at HeapByteBufferTest.main(HeapByteBufferTest.java:362)

$ bin/java -client -XX:+UnlockDiagnosticVMOptions -XX:+UseUnalignedAccesses HeapByteBufferTest
Exception in thread "main" java.lang.RuntimeException
        at MyByteBuffer.ck(HeapByteBufferTest.java:201)
        at MyByteBuffer.getLong(HeapByteBufferTest.java:211)
        at HeapByteBufferTest.step(HeapByteBufferTest.java:311)
        at HeapByteBufferTest.run(HeapByteBufferTest.java:347)
        at HeapByteBufferTest.main(HeapByteBufferTest.java:362)

32-bit Server VM without tiered (-TieredCompilation) FAILS too in both cases! Note, without intrinsics it failed in different place.

$ bin/java -server -XX:-TieredCompilation -XX:+UnlockDiagnosticVMOptions -XX:-UseUnalignedAccesses HeapByteBufferTest
Exception in thread "main" java.lang.RuntimeException
        at MyByteBuffer.ck(HeapByteBufferTest.java:207)
        at MyByteBuffer.getDouble(HeapByteBufferTest.java:215)
        at HeapByteBufferTest.step(HeapByteBufferTest.java:329)
        at HeapByteBufferTest.run(HeapByteBufferTest.java:347)
        at HeapByteBufferTest.main(HeapByteBufferTest.java:362)

$ bin/java -server -XX:-TieredCompilation -XX:+UnlockDiagnosticVMOptions -XX:+UseUnalignedAccesses HeapByteBufferTest
Exception in thread "main" java.lang.RuntimeException
        at MyByteBuffer.ck(HeapByteBufferTest.java:201)
        at MyByteBuffer.getLong(HeapByteBufferTest.java:211)
        at HeapByteBufferTest.step(HeapByteBufferTest.java:311)
        at HeapByteBufferTest.run(HeapByteBufferTest.java:347)
        at HeapByteBufferTest.main(HeapByteBufferTest.java:362)

For some reasons Server VM only pass when TieredCompilation is enabled.

Looking on -XX:+PrintCompilation -XX:+PrintInlining output I see that UseUnalignedAccesses affects intrinsics as designed.

Thanks,
Vladimir

On 3/25/15 2:13 AM, Andrew Haley wrote:
On 24/03/15 23:40, Vladimir Kozlov wrote:

The test failed when run it in JPRT with 32-bit fastdebug *Client* VM (-client) 
on linux-x86:

java.lang.RuntimeException
        at MyByteBuffer.ck(HeapByteBufferTest.java:201)
        at MyByteBuffer.getLong(HeapByteBufferTest.java:211)
        at HeapByteBufferTest.step(HeapByteBufferTest.java:311)
        at HeapByteBufferTest.run(HeapByteBufferTest.java:347)
        at HeapByteBufferTest.main(HeapByteBufferTest.java:362)

Could be intrinsic in C1 does not work correctly? Please, look.

I certainly will.  That is odd: there's no reason I can think of why
this might happen, and I know that the test running on a server build
runs C1 code for a while so it has been tested.  I guess it must be a
rare edge case.  Still, I'm quite pleased that the test I wrote
detected the failure.

Do you know if this was running with +UseUnalignedAccesses?

I'm not going to be able to analyse this for a few days.  Expect a
report (and hopefully a fix) next week.

Thanks,
Andrew.

Reply via email to