Respin of
https://gcc.gnu.org/pipermail/gcc-patches/2025-August/691426.html but
separates the middle end vectorizer changes from the RISC-V target
specific changes.

The patch changes the riscv loop codegen from

        vsetvli a5,a2,e32,m1,ta,mu
        vle32.v v1,0(a1)
        slli    a4,a5,2
        sub     a2,a2,a5
        add     a1,a1,a4
        vmsgtu.vx       v0,v1,a3
        vrsub.vi        v2,v1,0
        vsra.vi v1,v2,31,v0.t
        vsetvli zero,zero,e16,mf2,ta,ma
        vnsrl.wi        v1,v1,0
        vsetvli zero,zero,e8,mf4,ta,ma
        vnsrl.wi        v1,v1,0
        vse8.v  v1,0(a0)

to

        vsetvli a5,a2,e32,m1,ta,ma
        vle32.v v1,0(a1)
        slli    a4,a5,2
        sub     a2,a2,a5
        add     a1,a1,a4
        vmax.vv v1,v1,v2 <-- v2 defined by `vmv.v.i     v2,0` outside
        vsetvli zero,zero,e16,mf2,ta,ma
        vnclipu.wi      v1,v1,0
        vsetvli zero,zero,e8,mf4,ta,ma
        vnclipu.wi      v1,v1,0
        vse8.v  v1,0(a0)

which is closer to how clang vectorizes the pattern.

Edwin Lu (2):
  Match: Support SAT_TRUNC variant NARROW_CLIP
  RISC-V: Support vnclip idiom testcase [PR120378]

 gcc/match.pd                                  | 23 +++++++++++++
 .../gcc.target/riscv/rvv/autovec/pr120378.c   | 21 ++++++++++++
 gcc/tree-vect-patterns.cc                     | 32 +++++++++++++++++++
 3 files changed, 76 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378.c

--
2.43.0

Reply via email to