[aarch64-port-dev ] hg: aarch64-port/jdk8/hotspot: corrected register match rules, ensured rule outputs are all iRegXNoSp

adinn at redhat.com adinn at redhat.com
Tue Oct 29 08:49:45 PDT 2013


Changeset: 74bfec34e208
Author:    adinn
Date:      2013-10-29 15:49 +0000
URL:       http://hg.openjdk.java.net/aarch64-port/jdk8/hotspot/rev/74bfec34e208

corrected register match rules, ensured rule outputs are all iRegXNoSp

the iRegPXXX operand declarations were matching registers the wrong
way round and as a consequence were allowing matches which were
unnecessary. they are now correct and this avoids unnecessary work in
the generated DFA code.

more seriously, some of the rules were declaring their outputs with
type iRegX instead of iRegXNoSp i.e. allowing the allocator to
allocate the destination output from the special register set R27 to
R31. this results in an asser in the register pressure computation in
build_ifg_physical. specifically, this happens when a which rule
generates an output declared with type iRegX produces a live range
which crosses a VM callout. the fat projection following the callout
kills the SOC registers but does not remove the special registers from
the range, leaving the range still live even when it ought to have
been yanked. this is caught by the assert because the register
pressure for the block gets decremented by the amount associated with
the yanked projection and it does not tally with the count associated
with the live ranges.

! src/cpu/aarch64/vm/aarch64.ad
! src/cpu/aarch64/vm/c2_globals_aarch64.hpp




More information about the aarch64-port-dev mailing list