This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1r<mode> pattern
- From: "Yangfei (Felix)" <felix dot yang at huawei dot com>
- To: Joey Ye <joey dot ye dot cc at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Marcus Shawcroft <marcus dot shawcroft at gmail dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>, Jiangjiji <jiangjiji at huawei dot com>
- Date: Fri, 14 Nov 2014 02:34:44 +0000
- Subject: Re: [PATCH, trivial][AArch64] Fix mode iterator for *aarch64_simd_ld1r<mode> pattern
- Authentication-results: sourceware.org; auth=none
- References: <DA41BE1DDCA941489001C7FBD7A8820E55556F8D at szxema507-mbx dot china dot huawei dot com> <CAL0py24A9P+sJ1Bu8NBAqFABx8mfDS7w1rqrSTu+ZtqHeTUf9w at mail dot gmail dot com> <DA41BE1DDCA941489001C7FBD7A8820E55557C41 at szxema507-mbx dot china dot huawei dot com> <CAL0py25fjP-QxEu+J=J0iW8rYp8e9cUmRzD7D65Cayc=Or_r5w at mail dot gmail dot com>
Hmm, I don't think so.
The pattern *aarch64_simd_ld1r<mode> is used for pure matching, and GCC will never generate a pattern as follows:
[(set (match_operand:DI 0 "register_operand" "=w")
(vec_duplicate:DI
(match_operand:DI 1 "aarch64_simd_struct_operand" "Utv")))]
>
> Can a new case be rewritten then?
>
> - Joey
>
> On Fri, Nov 14, 2014 at 9:32 AM, Yangfei (Felix) <felix.yang@huawei.com> wrote:
> > No, we noticed this issue when improving the vld1(q?)_dup intrinsics. Thanks.
> >
> >
> >> Is there a case or PR to demonstrate the issue? If yes, better to
> >> include it as a test case.
> >>
> >> Thanks,
> >> Joey
> >>
> >> On Thu, Nov 13, 2014 at 2:14 PM, Yangfei (Felix)
> >> <felix.yang@huawei.com>
> >> wrote:
> >> > Hi,
> >> >
> >> > We find that the VALLDI mode iterator used in
> >> > *aarch64_simd_ld1r<mode>
> >> pattern is not appropriate.
> >> > The reason is that it's impossible to get a new operand of DImode
> >> > by
> >> vec_duplicating an operand of the same mode.
> >> > So this patch just excludes the DImode and uses VALL instead.
> >> > Reg-tested for aarch64-linux-gnu with QEMU. OK for the trunk?
> >> >
> >> >
> >> > Index: gcc/ChangeLog
> >> >
> >>
> =============================================================
> >> ======
> >> > --- gcc/ChangeLog (revision 217394)
> >> > +++ gcc/ChangeLog (working copy)
> >> > @@ -1,3 +1,9 @@
> >> > +2014-11-13 Felix Yang <felix.yang@huawei.com>
> >> > + Jiji Jiang <jiangjiji@huawei.com>
> >> > +
> >> > + * config/aarch64/aarch64-simd.md (*aarch64_simd_ld1r<mode>):
> >> Use
> >> > + VALL mode iterator instead of VALLDI.
> >> > +
> >> > 2014-11-11 Andrew Pinski <apinski@cavium.com>
> >> >
> >> > Bug target/61997
> >> > Index: gcc/config/aarch64/aarch64-simd.md
> >> >
> >>
> =============================================================
> >> ======
> >> > --- gcc/config/aarch64/aarch64-simd.md (revision 217394)
> >> > +++ gcc/config/aarch64/aarch64-simd.md (working copy)
> >> > @@ -4936,8 +4936,8 @@
> >> > })
> >> >
> >> > (define_insn "*aarch64_simd_ld1r<mode>"
> >> > - [(set (match_operand:VALLDI 0 "register_operand" "=w")
> >> > - (vec_duplicate:VALLDI
> >> > + [(set (match_operand:VALL 0 "register_operand" "=w")
> >> > + (vec_duplicate:VALL
> >> > (match_operand:<VEL> 1 "aarch64_simd_struct_operand"
> >> "Utv")))]
> >> > "TARGET_SIMD"
> >> > "ld1r\\t{%0.<Vtype>}, %1"