[9] RFR (M): VM should constant fold Unsafe.get*() loads from final fields
Paul Sandoz
paul.sandoz at oracle.com
Wed Jun 24 13:37:53 UTC 2015
On Jun 24, 2015, at 2:59 PM, Vladimir Ivanov <vladimir.x.ivanov at oracle.com> wrote:
> Thanks, Paul!
>
>> I like the test, you have almost hand rolled your own specializer :-)
> I tried hard to avoid bytecode generation, but having 8 almost identical copies of the same logic is too much :-)
>
I agree, i like it and will likely use a similar approach in some tests i need to write.
>> A minor point. Since you have created a ClassWriter with "ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES" can you remove the "mv.visitMax(0, 0)" calls?
>>
>>
>> I was a little confused by the code that checked the expected result against the actual result.
>>
>> I am guessing the white box methods return -1 if the value is not a constant and 1 if it is. (Perhaps that can be documented, if even those methods may eventually reside somewhere else.) Whereas, Generator.expected returns 0 or 1.
>>
>> 118 if (direct != unsafe || // difference between testDirect & testUnsafe
>> 119 (unsafe != -1 && expected != unsafe)) // differs from expected, but ignore "unknown"(-1) result
>> 120 {
>> 121 throw new AssertionError(String.format("%s: e=%d; d=%d; u=%d", t.name(), expected, direct, unsafe));
>> 122 }
>>
>> I don't quite understand why "unknown"(-1) can be ignored.
>>
>> Can that be changed to the following if Generator.expected returned the same values as the WB methods?
>>
>> if (direct != unsafe || unsafe != expected) { ... }
>>
>> ?
> Though I've removed WB.isCompileConstat() in the updated version,
Ok, i definitely understand the updated version :-)
> I'll elaborate on that. WB.isCompileConstat() returns 3 values:
> * 0: the argument is not a compile-time constant;
> * 1: the argument is a compile-time constant;
> * -1: it's not known whether it is constant or not
>
> "-1" signals that there's no data from JIT. WB.isCompileConstat() is intrinsified by a JIT-compiler. I implemented the intrinsics only in C2, so if you run the test in -Xint mode or with Client VM, WB.isCompileConstant() will always return -1.
>
> In order to be resilient, the test ignores "-1" when it checks the results.
>
Ah, thanks, that makes sense now,
Paul.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150624/9d44c22a/signature.asc>
More information about the hotspot-compiler-dev
mailing list