> -----Original Message-----
> From: Alex Coplan <alex.cop...@arm.com>
> Sent: 26 April 2021 11:15
> To: gcc-patches@gcc.gnu.org
> Cc: ni...@redhat.com; Richard Earnshaw <richard.earns...@arm.com>;
> Ramana Radhakrishnan <ramana.radhakrish...@arm.com>; Kyrylo
> Tkachov <kyrylo.tkac...@arm.com>
> Subject: [PATCH] arm: Fix wrong code with MVE V2DImode loads and stores
> [PR99960]
> 
> Hi,
> 
> As the PR shows, we currently miscompile V2DImode loads and stores for
> MVE. We're currently using 64-bit loads/stores, but need to be using
> 128-bit vector loads and stores.
> 
> Some intrinsics tests were checking that we (incorrectly) used the
> 64-bit loads/stores: these have been updated.
> 
> Regression tested an arm-eabi cross configured
> --with-arch=armv8.1-m.main+mve --with-float=hard. The patch has the
> following effect on the testsuite:
> 
> FAIL->PASS: c-c++-common/torture/vector-compare-1.c   -O0  execution
> test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -O0  execution test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -O1  execution test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -O2  execution test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -O2 -flto -fno-use-linker-
> plugin -flto-partition=none  execution test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -O2 -flto -fuse-linker-plugin -
> fno-fat-lto-objects  execution test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -O3 -g  execution test
> FAIL->PASS: gcc.c-torture/execute/pr92618.c   -Os  execution test
> FAIL->PASS: gcc.dg/compat/vector-1 c_compat_x_tst.o-c_compat_y_tst.o
> execute
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O0  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O1  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O2  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O2 -flto -fno-use-linker-plugin -flto-
> partition=none  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O2 -flto -fuse-linker-plugin -fno-fat-
> lto-objects  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O3 -fomit-frame-pointer -funroll-
> loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -O3 -g  execution test
> FAIL->PASS: gcc.dg/torture/pr52407.c   -Os  execution test
> FAIL->PASS: gcc.dg/torture/pr57748-1.c   -O0  execution test
> FAIL->PASS: gcc.dg/torture/pr57748-2.c   -O0  execution test
> FAIL->PASS: gcc.dg/torture/pr57748-3.c   -O0  execution test
> FAIL->PASS: gcc.dg/torture/pr57748-4.c   -O0  execution test
> FAIL->PASS: gcc.dg/torture/pr58041.c   -O0  execution test
> FAIL->PASS: gcc.dg/torture/pr58041.c   -O1  execution test
> FAIL->PASS: gcc.dg/torture/pr58041.c   -O2  execution test
> FAIL->PASS: gcc.dg/torture/pr58041.c   -O2 -flto -fno-use-linker-plugin -flto-
> partition=none  execution test
> FAIL->PASS: gcc.dg/torture/pr58041.c   -O2 -flto -fuse-linker-plugin -fno-fat-
> lto-objects  execution test
> FAIL->PASS: gcc.dg/torture/pr58041.c   -O3 -g  execution test FAIL->PASS:
> gcc.dg/torture/pr58041.c   -Os  execution test
> FAIL->PASS: gcc.dg/torture/pr61346.c   -O3 -fomit-frame-pointer -funroll-
> loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL->PASS: gcc.dg/torture/pr61346.c   -O3 -g  execution test
> FAIL->PASS: gcc.dg/torture/vshuf-v2df.c   -O2  execution test
> FAIL->PASS: gcc.dg/torture/vshuf-v2di.c   -O2  execution test
> 
> Bootstrap and regtest on arm-linux-gnueabihf in progress.
> 
> OK for trunk and eventual backports to 11 and 10 branches if regstrap
> looks good?

Ok. I had looked at it earlier but had forgotten to reply...
Thanks,
Kyrill

> 
> Thanks,
> Alex
> 
> gcc/ChangeLog:
> 
>       PR target/99960
>       * config/arm/mve.md (*mve_mov<mode>): Simplify output code.
> Use
>       vldrw.u32 and vstrw.32 for V2D[IF]mode loads and stores.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR target/99960
>       * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_wb_s64.c:
>       Update now that we're (correctly) using full 128-bit vector
>       loads/stores.
>       * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_wb_u64.c:
>       Likewise.
>       * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_wb_z_s64.c:
>       Likewise.
>       * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_wb_z_u64.c:
>       Likewise.
>       * gcc.target/arm/mve/intrinsics/vuninitializedq_int.c: Likewise.
>       * gcc.target/arm/mve/intrinsics/vuninitializedq_int1.c:
>       Likewise.

Reply via email to