[9] RFR (M): 8068038: C2: large constant offsets aren't handled on SPARC

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Feb 25 23:54:58 UTC 2016

On 2/25/16 2:09 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8068038/webrev.00

Looks fine but leave 32-bit removal to JDK-8150388.

> https://bugs.openjdk.java.net/browse/JDK-8068038
> C2 doesn't handle large constant offsets ((>=2^12 bytes) on SPARC and
> simply bails out the compilation and marks the method as non-compilable.
> It has severe performance impact For example, some Octane benchmarks
> suffer >10x slowdown.
> The fix is to use variable-sized encoding and put large offsets in the
> register. It means that all match rules and instructions which depend on
> emit_form3_mem_reg become variable-sized as well and their size should
> be computed dynamically.
> I verified C2 compilation times and code emission still takes ~3-4%.
> Also, did some cleanups: got rid of size computations in
> MachSpillCopyNode::implementation and helper methods, refactored
> printing logic.
> Testing: octane, JPRT.
> Thanks!
> Best regards,
> Vladimir Ivanov
> PS: there's an additional cleanup [1] in sparc.ad (mostly 32-bit SPARC
> removal, but also added some comments). It can go along with this fix or
> as part of the 32-bit SPARC complete removal (JDK-8150388). Let me know
> what do you prefer.

Should be part of JDK-8150388 changes.


> [1] http://cr.openjdk.java.net/~vlivanov/8068038/webrev.cleanup

More information about the hotspot-compiler-dev mailing list