RFR: 8173472: AArch64: C1 comparisons with null only use 32-bit instructions
Stuart Monteith
stuart.monteith at linaro.org
Wed Feb 1 11:56:57 UTC 2017
We're testing with "-XX:+TiedCompilation -XX:TieredStopAtLevel=1" to
try and catch C1 errors. I switched from building a special client
build to this as it seemed more sustainable and supported.
I've been trawling through the code, and there is definite confusion.
For example:
hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
1290:LIRGenerator::do_getClass(Intrinsic *x)
// FIXME T_ADDRESS should actually be T_METADATA but it can't because the
// meaning of these two is mixed up (see JDK-8026837).
See https://bugs.openjdk.java.net/browse/JDK-8026837 "Currently
metadata klass pointers (Klass*) are of type T_ADDRESS which is wrong;
the type should be T_METADATA."
There are places where T_ADDRESS type arguments are used as an array
element pointer, and others where it is used as metadata
pointers/offsets. Why treating T_ADDRESS types as jints works, I've
yet to find out, but I'm working from the assumption that is is as
much through luck as design.
BR,
Stuart
On 1 February 2017 at 09:32, Roland Westrelin <rwestrel at redhat.com> wrote:
>
> Hi David,
>
>> Well that's what I'm questioning. Maybe one of the compiler folk
>> (Roland?) can chime in. C1 was 32-bit only but there was a proprietary
>> 64-bit version. I don't know if OpenJDK ever supported a 64-bit C1. The
>> code would have to have been adapted for tiered compilation.
>
> Tiered runs 64-bit c1 so the code is well tested. Building a client only
> 64 bit VM is forbidden by the build scripts and is as far as I know
> considered unsupported but given how much testing it gets with tiered
> compilation, in practice, it's on par with 32 bit c1.
>
> Roland.
More information about the hotspot-dev
mailing list