https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116691
Bug ID: 116691 Summary: RISC-V: Unexpected auto-vectorization codegen in simple vectorization Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: juzhe.zhong at rivai dot ai Target Milestone: --- void foo (int *__restrict a, int *__restrict b, int *__restrict c, int n) { for (int i = 0; i < n; i++) { c[i] = a[i] + b[i]; } } https://godbolt.org/z/4n3o3qcKW GCC trunk: foo: ble a3,zero,.L5 csrr a4,vlenb srli a6,a4,2 .L3: minu a5,a3,a6 vsetvli zero,a5,e32,m1,ta,ma vle32.v v2,0(a0) vle32.v v1,0(a1) mv a7,a3 add a0,a0,a4 add a1,a1,a4 sub a3,a3,a6 vadd.vv v1,v1,v2 vse32.v v1,0(a2) add a2,a2,a4 bgtu a7,a6,.L3 .L5: ret GCC 14.2.0: foo: ble a3,zero,.L5 .L3: vsetvli a5,a3,e32,m1,ta,ma vle32.v v2,0(a0) vle32.v v1,0(a1) sub a3,a3,a5 sh2add a0,a5,a0 sh2add a1,a5,a1 vadd.vv v1,v1,v2 vse32.v v1,0(a2) sh2add a2,a5,a2 bne a3,zero,.L3 .L5: ret