[AArch64] [BE] Fix vector load/stores to not use ld1/st1
Christophe Lyon
christophe.lyon@linaro.org
Thu Nov 6 10:15:00 GMT 2014
On 6 November 2014 10:28, Alan Hayward <alan.hayward@arm.com> wrote:
>
>
> On 06/11/2014 09:09, "Yangfei (Felix)" <felix.yang@huawei.com> wrote:
>
>>> On 10 October 2014 16:19, Alan Hayward <alan.hayward@arm.com> wrote:
>>> > This patch is dependant on "[AArch64] [BE] [1/2] Make large opaque
>>> > integer modes endianness-safe.”
>>> >
>>> > It fixes up movoi/ci/xi for Big Endian, so that we end up with the lsb
>>> > of a big-endian integer to be in the low byte of the highest-numbered
>>> > register.
>>> >
>>> > movoi uses stp/ldp
>>> > movxi needs a split version (which is shared with register->register
>>> > movxi), which just splits to two new movs movci can then split to
>>> > three movs. A future patch will instead split to an movoi and a movti.
>>> >
>>> >
>>> > There are no changes for LE.
>>> >
>>> > Ran whole of check with both parts of "Make large opaque integer modes
>>> > endianness-safe”. No regressions.
>>> >
>>> >
>>> > ChangeLog:
>>> >
>>> > gcc/:
>>> > 2014-10-10 Alan Hayward <alan.hayward@arm.com>
>>> > * config/aarch64/aarch64.c
>>> > (aarch64_classify_address): Allow extra addressing modes for
>>>BE.
>>> > (aarch64_print_operand): new operand for printing a q
>>>register+1.
>>> > (aarch64_simd_emit_reg_reg_move): replacement for
>>> > aarch64_simd_disambiguate_copy that plants the required mov.
>>> > * config/aarch64/aarch64-protos.h
>>> > (aarch64_simd_emit_reg_reg_move): replacement for
>>> > aarch64_simd_disambiguate_copy.
>>> > * config/aarch64/aarch64-simd.md
>>> > (define_split) Use new aarch64_simd_emit_reg_reg_move.
>>> > (define_expand "mov<mode>") less restrictive predicates.
>>> > (define_insn "*aarch64_mov<mode>") Simplify and only allow
>>>for LE.
>>> > (define_insn "*aarch64_be_movoi") New. BE only. Plant ldp or
>>> stp.
>>> > (define_insn "*aarch64_be_movci") New. BE only. No
>>> instructions.
>>> > (define_insn "*aarch64_be_movxi") New. BE only. No
>>> instructions.
>>> > (define_split) OI mov. Use new
>>> aarch64_simd_emit_reg_reg_move.
>>> > (define_split) CI mov. Use new
>>> aarch64_simd_emit_reg_reg_move.
>>> > On BE
>>> > plant movs for reg to/from mem case.
>>> > (define_split) XI mov. Use new
>>> aarch64_simd_emit_reg_reg_move.
>>> > On BE
>>> > plant movs for reg to/from mem case.
>>> >
>>>
>>> OK /Marcus
>>
>>
>>Hello,
>>
>> It seems that this patch breaks the compile of some testcases under
>>big-endian.
>> On example: testsuite/gcc.target/aarch64/advsimd-intrinsics/ vldX.c
>> Any thing I missed? Please confirm. Thanks.
>>
>>$ aarch64_be-linux-gnu-gcc vldX.c
>>
>>vldX.c: In function 'exec_vldX':
>>vldX.c:686:1: internal compiler error: in change_address_1, at
>>emit-rtl.c:2096
>> }
>> ^
>>0x73b18c change_address_1
>> /home/jjj/p660/p660_build_dir_be/src/trunk/gcc/emit-rtl.c:2096
>>0xdbd278 gen_split_2991(rtx_insn*, rtx_def**)
>>
>>/home/jjj/p660/p660_build_dir_be/src/trunk/gcc/config/aarch64/aarch64-simd
>>.md:4436
>>0x743aa1 try_split(rtx_def*, rtx_def*, int)
>> /home/jjj/p660/p660_build_dir_be/src/trunk/gcc/emit-rtl.c:3639
>>0x9b8c93 split_insn
>> /home/jjj/p660/p660_build_dir_be/src/trunk/gcc/recog.c:2901
>>0x9b8ee7 split_all_insns_noflow()
>> /home/jjj/p660/p660_build_dir_be/src/trunk/gcc/recog.c:3042
>>Please submit a full bug report,
>>with preprocessed source if appropriate.
>>Please include the complete backtrace with any bug report.
>>See <http://gcc.gnu.org/bugs.html> for instructions.
>>
>
>
> Did you try my patch with or without it’s dependency ?
> "[AArch64] [BE] [1/2] Make large opaque integer modes endianness-safe.”
> (David Sherwood)
>
> Without that above patch then I would expect some tests to fail.
>
Yes, we already have vldX and vuzp/vzip tests failing in aarch64_be.
They are PR63652 and 636523.
> In addition, it looks like David has had some problems merging that patch
> to the latest head - I’d suggest not using this patch until David has
> sorted his.
I've been looking at these PRs, but I should probably give a try to
David's patch once it's updated.
>
> Alan.
>
>
>
More information about the Gcc-patches
mailing list