I can understand why remove mem to mem pattern, but why the normal mov
pattern for VLS_AVL_IMM need to change too?

On Wed, Sep 27, 2023 at 10:39 AM juzhe.zh...@rivai.ai
<juzhe.zh...@rivai.ai> wrote:
>
> >> Why add `can_create_pseudo_p ()` here? this will split after reload,
> >> but we forbid that pattern between reload and split2?
>
> I have no ideal. Some fortran tests just need recognization of mem-to-mem 
> pattern before RA.
> I don't know the reason.
>
> ________________________________
> juzhe.zh...@rivai.ai
>
>
> From: Kito Cheng
> Date: 2023-09-27 17:33
> To: Juzhe-Zhong
> CC: gcc-patches; kito.cheng; jeffreyalaw; rdapp.gcc
> Subject: Re: [PATCH V3] RISC-V: Remove mem-to-mem VLS move pattern[PR111566]
> >  (define_insn_and_split "*mov<mode>"
> >    [(set (match_operand:VLS_AVL_IMM 0 "reg_or_mem_operand" "=vr, m, vr")
> >         (match_operand:VLS_AVL_IMM 1 "reg_or_mem_operand" "  m,vr, vr"))]
> >    "TARGET_VECTOR
> > -   && (register_operand (operands[0], <MODE>mode)
> > +   && (can_create_pseudo_p ()
>
> Why add `can_create_pseudo_p ()` here? this will split after reload,
> but we forbid that pattern between reload and split2?
>
> > +       || register_operand (operands[0], <MODE>mode)
> >         || register_operand (operands[1], <MODE>mode))"
> >    "@
> >     #
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c
> > index aedf98819bb..24bb7240db8 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c
> > @@ -4,54 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     lbu\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sb\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (int8_t *in, int8_t *out)
> > -{
> > -  v1qi v = *(v1qi*)in;
> > -  *(v1qi*)out = v;
> > -}
> > -
> > -/*
> > -** mov1:
> > -**     lhu\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sh\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov1 (int8_t *in, int8_t *out)
> > -{
> > -  v2qi v = *(v2qi*)in;
> > -  *(v2qi*)out = v;
> > -}
> > -
> > -/*
> > -** mov2:
> > -**     lw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov2 (int8_t *in, int8_t *out)
> > -{
> > -  v4qi v = *(v4qi*)in;
> > -  *(v4qi*)out = v;
> > -}
> > -
> > -/*
> > -** mov3:
> > -**     ld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov3 (int8_t *in, int8_t *out)
> > -{
> > -  v8qi v = *(v8qi*)in;
> > -  *(v8qi*)out = v;
> > -}
> > -
> >  /*
> >  ** mov4:
> >  **     vsetivli\s+zero,\s*16,\s*e8,\s*mf8,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c
> > index 5e9615412b7..cae96b3be3f 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c
> > @@ -4,18 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     fld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     fsd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (double *in, double *out)
> > -{
> > -  v1df v = *(v1df*)in;
> > -  *(v1df*)out = v;
> > -}
> > -
> >  /*
> >  ** mov1:
> >  **     vsetivli\s+zero,\s*2,\s*e64,\s*m1,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-2.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-2.c
> > deleted file mode 100644
> > index 10ae1972db7..00000000000
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-2.c
> > +++ /dev/null
> > @@ -1,19 +0,0 @@
> > -/* { dg-do compile } */
> > -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 
> > -fno-schedule-insns -fno-schedule-insns2" } */
> > -/* { dg-final { check-function-bodies "**" "" } } */
> > -
> > -#include "def.h"
> > -
> > -/*
> > -** mov:
> > -**     lw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     lw\s+[a-x0-9]+,4\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,4\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov (int8_t *in, int8_t *out)
> > -{
> > -  v8qi v = *(v8qi*)in;
> > -  *(v8qi*)out = v;
> > -}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c
> > index f2880ae5e77..86ce22896c5 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c
> > @@ -4,42 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     lhu\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sh\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (int16_t *in, int16_t *out)
> > -{
> > -  v1hi v = *(v1hi*)in;
> > -  *(v1hi*)out = v;
> > -}
> > -
> > -/*
> > -** mov1:
> > -**     lw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov1 (int16_t *in, int16_t *out)
> > -{
> > -  v2hi v = *(v2hi*)in;
> > -  *(v2hi*)out = v;
> > -}
> > -
> > -/*
> > -** mov2:
> > -**     ld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov2 (int16_t *in, int16_t *out)
> > -{
> > -  v4hi v = *(v4hi*)in;
> > -  *(v4hi*)out = v;
> > -}
> > -
> >  /*
> >  ** mov3:
> >  **     vsetivli\s+zero,\s*8,\s*e16,\s*mf4,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-4.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-4.c
> > deleted file mode 100644
> > index f81f1697d65..00000000000
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-4.c
> > +++ /dev/null
> > @@ -1,19 +0,0 @@
> > -/* { dg-do compile } */
> > -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 
> > -fno-schedule-insns -fno-schedule-insns2" } */
> > -/* { dg-final { check-function-bodies "**" "" } } */
> > -
> > -#include "def.h"
> > -
> > -/*
> > -** mov:
> > -**     lw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     lw\s+[a-x0-9]+,4\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,4\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov (int16_t *in, int16_t *out)
> > -{
> > -  v4hi v = *(v4hi*)in;
> > -  *(v4hi*)out = v;
> > -}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c
> > index c30ed8f76f5..04475207966 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c
> > @@ -4,30 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     lw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (int32_t *in, int32_t *out)
> > -{
> > -  v1si v = *(v1si*)in;
> > -  *(v1si*)out = v;
> > -}
> > -
> > -/*
> > -** mov1:
> > -**     ld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov1 (int32_t *in, int32_t *out)
> > -{
> > -  v2si v = *(v2si*)in;
> > -  *(v2si*)out = v;
> > -}
> > -
> >  /*
> >  ** mov2:
> >  **     vsetivli\s+zero,\s*4,\s*e32,\s*mf2,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-6.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-6.c
> > deleted file mode 100644
> > index d6dbff1caa9..00000000000
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-6.c
> > +++ /dev/null
> > @@ -1,19 +0,0 @@
> > -/* { dg-do compile } */
> > -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 
> > -fno-schedule-insns -fno-schedule-insns2" } */
> > -/* { dg-final { check-function-bodies "**" "" } } */
> > -
> > -#include "def.h"
> > -
> > -/*
> > -** mov:
> > -**     lw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     lw\s+[a-x0-9]+,4\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sw\s+[a-x0-9]+,4\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov (int32_t *in, int32_t *out)
> > -{
> > -  v2si v = *(v2si*)in;
> > -  *(v2si*)out = v;
> > -}
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c
> > index 46509e367c3..d0674a47a14 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c
> > @@ -4,18 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     ld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     sd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (int64_t *in, int64_t *out)
> > -{
> > -  v1di v = *(v1di*)in;
> > -  *(v1di*)out = v;
> > -}
> > -
> >  /*
> >  ** mov1:
> >  **     vsetivli\s+zero,\s*2,\s*e64,\s*m1,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c
> > index 1cba7ddad94..b905c74d43b 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c
> > @@ -4,42 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     flh\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     fsh\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (_Float16 *in, _Float16 *out)
> > -{
> > -  v1hf v = *(v1hf*)in;
> > -  *(v1hf*)out = v;
> > -}
> > -
> > -/*
> > -** mov1:
> > -**     flw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     fsw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov1 (_Float16 *in, _Float16 *out)
> > -{
> > -  v2hf v = *(v2hf*)in;
> > -  *(v2hf*)out = v;
> > -}
> > -
> > -/*
> > -** mov2:
> > -**     fld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     fsd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov2 (_Float16 *in, _Float16 *out)
> > -{
> > -  v4hf v = *(v4hf*)in;
> > -  *(v4hf*)out = v;
> > -}
> > -
> >  /*
> >  ** mov3:
> >  **     vsetivli\s+zero,\s*8,\s*e16,\s*mf4,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c 
> > b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c
> > index 0773f6a70f3..5f9bc052e97 100644
> > --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c
> > @@ -4,30 +4,6 @@
> >
> >  #include "def.h"
> >
> > -/*
> > -** mov0:
> > -**     flw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     fsw\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov0 (float *in, float *out)
> > -{
> > -  v1sf v = *(v1sf*)in;
> > -  *(v1sf*)out = v;
> > -}
> > -
> > -/*
> > -** mov1:
> > -**     fld\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**     fsd\s+[a-x0-9]+,0\s*\([a-x0-9]+\)
> > -**  ret
> > -*/
> > -void mov1 (float *in, float *out)
> > -{
> > -  v2sf v = *(v2sf*)in;
> > -  *(v2sf*)out = v;
> > -}
> > -
> >  /*
> >  ** mov2:
> >  **     vsetivli\s+zero,\s*4,\s*e32,\s*mf2,\s*t[au],\s*m[au]
> > diff --git a/gcc/testsuite/gcc.target/riscv/rvv/fortran/pr111566.f90 
> > b/gcc/testsuite/gcc.target/riscv/rvv/fortran/pr111566.f90
> > new file mode 100644
> > index 00000000000..2e30dc9bfaa
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/fortran/pr111566.f90
> > @@ -0,0 +1,31 @@
> > +! { dg-do compile }
> > +! { dg-options "-march=rv64gcv -mabi=lp64d -Ofast 
> > -fallow-argument-mismatch -fmax-stack-var-size=65536 -S  -std=legacy -w" }
> > +
> > +module a
> > +  integer,parameter :: SHR_KIND_R8 = selected_real_kind(12)
> > +end module a
> > +module b
> > +  use a,  c => shr_kind_r8
> > +contains
> > +  subroutine d(cg , km, i1, i2)
> > +    real (c) ch(i2,km)
> > +    real (c) cg(4,i1:i2,km)
> > +    real  dc(i2,km)
> > +    real(c) ci(i2,km)
> > +    real(c) cj(i2,km)
> > +    do k=2,ck
> > +       do i=i1,0
> > +          cl = ci(i,k) *ci(i,1) /      cj(i,k)+ch(i,1)
> > +          cm = cg(1,i,k) - min(e,cg(1,i,co))
> > +          dc(i,k) = sign(cm, cl)
> > +       enddo
> > +    enddo
> > +    if ( cq == 0 ) then
> > +       do i=i1,i2
> > +          if( cr <=  cs ) then
> > +             cg= sign( min(ct,   cg),  cg)
> > +          endif
> > +       enddo
> > +    endif
> > +  end subroutine d
> > +end module b
> > --
> > 2.36.3
> >
>

Reply via email to