RFR: Implement better address lowering for AArch64

Doug Simon doug.simon at oracle.com
Mon Apr 3 12:30:29 UTC 2017

Hi Andrew,

Thanks for the PR. Obviously we're relying 100% of you/RedHat to test these changes as we don't have any AArch64 hardware in our gates. We will review the PR over the next few days.

Unfortunately, the Travis based gating we do for github PRs is currently broken pending Travis updating the OpenJDK package to 8u121[1]


[1] https://github.com/travis-ci/travis-ci/issues/7337

> On 3 Apr 2017, at 13:37, Andrew Dinn <adinn at redhat.com> wrote:
> The following pull request includes changes to improve address lowering
> for AArch64.
>  https://github.com/graalvm/graal-core/pull/266
> I would be grateful for review and feedback and, if acceptbale, a pull
> to the main repo.
> Purpose
> -------
> The point of this change is to allow AArch64 addresses to be converted
> to use either index or displacement mode (n.b. index and displacement
> cannot be combined on AArch64). This requires a different approach to
> AMD64/SPARC because the suitability of a displacement for embedding in a
> load/store instruction depends on the nature of that usage
> (specifically, the transfer size for the datum affects the decision as
> to whether a given displacement can be embedded).
> A secondary part of the change is to implement address improvement
> during lowering to allow certain patterns of address combination to be
> simplified.
> Implementation
> --------------
> The basic change is to provide a new phase AddressLoweringByUsePhase
> which schedules addresses to an address lowering implementation per use,
> providing it with the ability to take the use into account when doing
> the lowering.
> AArch64 provides a callback class AArch64AddressLoweringByUse which
> implements this phase. This replaces the previous lowering callback
> AArch64AddressLowering which has been deleted. It includes optimization
> of certain nested address combinations as per the other address lowering
> implementations (there are less such opportunities for AArch64).
> Making use of the new phase also requires modifying the
> HotSpotSuiteProvider classes which previously configured the
> AddressLoweringPhase used by AMD64, SPARC and AArch64.
> A superclass HotSpotSuiteProviderBase has been factored out of the
> original class HotSpotSuiteProvider making it a subclass specific to
> AMD64 and SPARC. An alternative subclass, AArch64HotSpotSuiteProvider,
> has been provided for AArch64. The two subclasses perform almost all
> their work by delegating to the super class. They only differ in how
> they configure address lowering. The step which previously added an
> AddressLoweringPhase to the low tier is now performed in each subclass.
> HotSpotSuiteProvider configures an AddressLoweringPhase while
> AArch64HotSpotSuiteProvider configures an AddressLoweringByUsePhase.
> Testing
> -------
> I have run several small Java programs. I have eyeballed the generated
> code for these programs and for JDK runtime methods to verify that
> address lowering is being done correctly.
> regards,
> Andrew Dinn
> -----------
> Senior Principal Software Engineer
> Red Hat UK Ltd
> Registered in England and Wales under Company Registration No. 03798903
> Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander

More information about the graal-dev mailing list