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