On Mon, 29 Mar 2021 at 12:56, Kyrylo Tkachov via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
>
>
> > -----Original Message-----
> > From: Jakub Jelinek <ja...@redhat.com>
> > Sent: 29 March 2021 11:45
> > To: Kyrylo Tkachov <kyrylo.tkac...@arm.com>
> > Cc: gcc-patches@gcc.gnu.org
> > Subject: Re: [PATCH] aarch64: PR target/99037 Fix RTL represntation in
> > move_lo_quad patterns
> >
> > On Mon, Mar 29, 2021 at 10:41:17AM +0000, Kyrylo Tkachov wrote:
> > > Hi all,
> > >
> > > This patch fixes the RTL representation of the move_lo_quad patterns to
> > use aarch64_simd_or_scalar_imm_zero
> > > for the zero part rather than a vec_duplicate of zero or a const_int 0.
> > > The expander that generates them is also adjusted so that we use and
> > match the correct const_vector forms throughout.
> > >
> > > Bootstrapped and tested on aarch64-none-linux-gnu and aarch64_be-
> > none-elf.
> > > Jakub, does this look like what you've had in mind?
> >
> > I'd probably also remove VQ_2E iterator that is now unused (the
> > VQMOV_NO2E
> > one is used in other patterns).  But otherwise yes.
>
> Thanks, I've pushed it to trunk.
> gcc/ChangeLog:
>
>         PR target/99037
>         * config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>): Use
>         aarch64_simd_or_scalar_imm_zero to match zeroes.  Remove pattern
>         matching const_int 0.
>         (move_lo_quad_internal_be_<mode>): Likewise.
>         (move_lo_quad_<mode>): Update for the above.
>         * config/aarch64/iterators.md (VQ_2E): Delete.
>
> gcc/testsuite/ChangeLog:
>
>         PR target/99808
>         * gcc.target/aarch64/pr99808.c: New test.
>

The new test fails with -mabi=ilp32:
FAIL: gcc.target/aarch64/pr99808.c (test for excess errors)
Excess errors:
/gcc/testsuite/gcc.target/aarch64/pr99808.c:11:3: error: cannot
convert a value of type 'long unsigned int' to vector type
'__Float64x1_t' which has different size
/gcc/testsuite/gcc.target/aarch64/pr99808.c:11:3: error: cannot
convert a value of type 'long unsigned int' to vector type
'__Float64x1_t' which has different size
/gcc/testsuite/gcc.target/aarch64/pr99808.c:12:3: error: cannot
convert a value of type 'long unsigned int' to vector type
'__Float32x2_t' which has different size

Can you fix it?

Thanks

Christophe

> >
> > > gcc/ChangeLog:
> > >
> > >     PR target/99037
> > >     * config/aarch64/aarch64-simd.md
> > (move_lo_quad_internal_<mode>): Use
> > >     aarch64_simd_or_scalar_imm_zero to match zeroes.  Remove
> > pattern
> > >     matching const_int 0.
> > >     (move_lo_quad_internal_be_<mode>): Likewise.
> > >     (move_lo_quad_<mode>): Update for the above.
> > >
> > > gcc/testsuite/ChangeLog:
> > >
> > >         PR target/99808
> > >         * gcc.target/aarch64/pr99808.c: New test.
> >
> >
> >
> >       Jakub
>

Reply via email to