[PATCH][AArch64] Improve LDP/STP generation that requires a base register

Kyrill Tkachov kyrylo.tkachov@foss.arm.com
Tue May 29 15:39:00 GMT 2018


[sending on behalf of Jackson Woodruff]

Hi all,

This patch generalizes the formation of LDP/STP that require a base register.

In AArch64, LDP/STP instructions have different sized immediate offsets than
normal LDR/STR instructions. This part of the backend attempts to spot groups
of four LDR/STR instructions that can be turned into LDP/STP instructions by
using a base register.

Previously, we would only accept address pairs that were ordered in ascending
or descending order, and only strictly sequential loads/stores. In fact, the
instructions that we generate from this should be able to consider any order
of loads or stores (provided that they can be re-ordered). They should also be
able to accept non-sequential loads and stores provided that the two pairs of
addresses are amenable to pairing. The current code is also overly restrictive
on the range of addresses that are accepted, as LDP/STP instructions may take
negative offsets as well as positive ones.

This patch improves that by allowing us to accept all orders of loads/stores
that are valid, and extending the range that the LDP/STP addresses can reach.

OK for trunk?

Jackson

ChangeLog:

gcc/

2017-05-29  Jackson Woodruff  <jackson.woodruff@arm.com>

     * config/aarch64/aarch64.c (aarch64_host_wide_int_compare): New.
     (aarch64_ldrstr_offset_compare): New.
     (aarch64_operands_adjust_ok_for_ldpstp): Update to consider all
     load/store orderings.
     (aarch64_gen_adjusted_ldpstp): Likewise.

gcc/testsuite

2017-05-29  Jackson Woodruff  <jackson.woodruff@arm.com>

     * gcc.target/aarch64/simd/ldp_stp_9: New.
     * gcc.target/aarch64/simd/ldp_stp_10: New.
     * gcc.target/aarch64/simd/ldp_stp_11: New.
     * gcc.target/aarch64/simd/ldp_stp_12: New.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jacwoo-3.patch
Type: text/x-patch
Size: 16197 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20180529/a7dd226f/attachment.bin>


More information about the Gcc-patches mailing list