RFR: 8072483: AARCH64: aarch64.ad uses the wrong operand class for some operations

Andrew Dinn adinn at redhat.com
Thu Feb 5 12:56:32 UTC 2015

On 05/02/15 10:32, Andrew Haley wrote:
> In a few instruction patterns we're using iReg<X> (all registers) rather
> than iReg<X>NoSp (all general registers) for an output.  The difference
> between these operand classes is the set of fixed registers such as
> the frame pointer and the thread pointer.  This causes C2's register
> allocator to try to use these registers, and predictably bad stuff
> happens.
> It's hard to find a reproducer for this bug because it only triggers
> at times of very high register pressure and the code generated may not
> even be visibly wrong.  However, it sometimes causes assertion
> failures.
> http://cr.openjdk.java.net/~aph/aarch64-8072483/

Firstly, I'll take the blame for the NoSp suffix -- it was meant to
indicate 'no special' rather than 'no stack pointer'.

Second, I'm not a JDK9 committer, let alone reviewer, but, having
provided these NoSp register classes precisely to avoid the problem
Andrew mentions, I can confirm that the patch is correct and necessary.


Andrew Dinn

More information about the hotspot-dev mailing list