RFR: JDK-8217909: Make unused r12 register (without compressed oops) available to regalloc in C2
rkennke at redhat.com
Wed Feb 13 11:26:26 UTC 2019
I started a version based on Dean's approach:
Unfortunately it barks on ptr_reg class:
246: User defined register classes are not allowed to spill to the stack.
Interestingly, it doesn't do that when I only handle any_reg class.
However, I am not sure what that means or how to fix it. Any hints?
> There is a way to do it without cloning all the register class variants.
> For the arm64 port we massaged the register masks in
> It might be worth considering, as the number of variants grows.
> On 2/11/19 3:02 AM, Roman Kennke wrote:
>> When running with compressed oops, the r12 register holds the heapbase,
>> and thus is not available to register allocation in C2. However, when
>> *not* running with compressed oops, it is still not available and
>> remains unused. It should be made available to register allocation in
>> this case.
>> This patch implements this by introducing with_r12 and no_r12 variants
>> of basically all register classes, and add dynamic reg classes to select
>> one or the other, based on current settings. I needed to add UseZGC in
>> those flags because ZGC asserts to not get r12 in its barriers. Not sure
>> that this is necessary.
>> Note that we might want to use the r12 register in Shenandoah later to
>> keep GC state. In this case, we'd need to add UseShenandoahGC or such to
>> the test. Do we want to abstract this whole check? Not sure that this is
>> possible/feasible to do in .ad though...
>> Testing: tier1 no regressions locally, eyeball generated code, yes it
>> does use r12 now.
>> Can I please get reviews?
More information about the hotspot-compiler-dev