[aarch64-port-dev ] Fixed register pressure problem at last!
Andrew Dinn
adinn at redhat.com
Tue Oct 29 09:03:02 PDT 2013
I finally worked out what was causing the register pressure problem
which was causing eclipse to break. The root problem was to do with a
few of the instructions definitions which were still declaring their
output register dst to be of type iRegX instead of iRegXNoSp (where X is
one of P, L or I). The specific instruction which was causing the
problem was ConvI2B but there were about half a dozen others which also
needed to be corrected.
This manifests as a register pressure error during construction of the
physical interference graph in the situation where the instruction
produces a live range which crosses a callout to the VM. The callout is
followed by a fat projection (special type of MachProj node) which is
meant to kill all the save-on-call (SOC) registers (i.e. cause them to
be spilled). Since the live range built by the instruction includes
R0-R31, which are no-save (NS), the kill merely reduces it to a live
range containing R27-R31 rather than an empty range. The register
pressure count for the block is reduced by 1 after the fat projection is
processed but the register pressure count associated with the live
ranges remains as it was. Luckily an assert detects this disparity.
I am continuing to run Eclipse on beyond this point. Perhaps we could
consider including Andrew's optimizations now? That would at least mean
that I hit Eclipse problems quicker (since it substantially reduces the
instruction count for the compiled code).
regards,
Andrew Dinn
-----------
More information about the aarch64-port-dev
mailing list