This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH AARCH64]load store pair optimization using sched_fusion pass.


On Fri, Dec 5, 2014 at 9:08 AM, Marcus Shawcroft
<marcus.shawcroft@gmail.com> wrote:
> On 18 November 2014 at 08:34, Bin Cheng <bin.cheng@arm.com> wrote:
>
>> 2014-11-18  Bin Cheng  <bin.cheng@arm.com>
>>
>>         * config/aarch64/aarch64.md (load_pair<mode>): Split to
>>         load_pairsi, load_pairdi, load_pairsf and load_pairdf.
>>         (load_pairsi, load_pairdi, load_pairsf, load_pairdf): Split
>>         from load_pair<mode>.  New alternative to support int/fp
>>         registers in fp/int mode patterns.
>>         (store_pair<mode>:): Split to store_pairsi, store_pairdi,
>>         store_pairsf and store_pairdi.
>>         (store_pairsi, store_pairdi, store_pairsf, store_pairdf): Split
>>         from store_pair<mode>.  New alternative to support int/fp
>>         registers in fp/int mode patterns.
>>         (*load_pair_extendsidi2_aarch64): New pattern.
>>         (*load_pair_zero_extendsidi2_aarch64): New pattern.
>>         (aarch64-ldpstp.md): Include.
>>         * config/aarch64/aarch64-ldpstp.md: New file.
>>         * config/aarch64/aarch64-protos.h (aarch64_gen_adjusted_ldpstp):
>> New.
>>         (extract_base_offset_in_addr): New.
>>         (aarch64_operands_ok_for_ldpstp): New.
>>         (aarch64_operands_adjust_ok_for_ldpstp): New.
>>         * config/aarch64/aarch64.c (enum sched_fusion_type): New enum.
>>         (TARGET_SCHED_FUSION_PRIORITY): New hook.
>>         (fusion_load_store): New functon.
>>         (extract_base_offset_in_addr): New function.
>>         (aarch64_gen_adjusted_ldpstp): New function.
>>         (aarch64_sched_fusion_priority): New function.
>>         (aarch64_operands_ok_for_ldpstp): New function.
>>         (aarch64_operands_adjust_ok_for_ldpstp): New function.
>>
>> 2014-11-18  Bin Cheng  <bin.cheng@arm.com>
>>
>>         * gcc.target/aarch64/ldp-stp-1.c: New test.
>>         * gcc.target/aarch64/ldp-stp-2.c: New test.
>>         * gcc.target/aarch64/ldp-stp-3.c: New test.
>>         * gcc.target/aarch64/ldp-stp-4.c: New test.
>>         * gcc.target/aarch64/ldp-stp-5.c: New test.
>>         * gcc.target/aarch64/lr_free_1.c: Disable scheduling fusion
>>         and peephole2 pass.
>
> Committed, thanks. /Marcus


This patch has a bug in it dealing with volatile mems.  It will do a
peephole of two volatile mems into a pair which is not correct as the
order in the architecture is not defined and might even swap the order
of the load/store incorrectly.
I noticed this when I was merging in my changes for an improved
peephone which already has a check for volatile.

Thanks,
Andrew Pinski


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]