https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112420
Bug ID: 112420 Summary: Unexpected vectorization for RISC-V Product: gcc Version: 14.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: --- FAIL: gcc.dg/vect/pr65518.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 0 loops in function" 2 FAIL: gcc.dg/vect/pr65518.c scan-tree-dump-times vect "vectorized 0 loops in function" 2 #if VECTOR_BITS > 256 #define NINTS (VECTOR_BITS / 32) #else #define NINTS 8 #endif #define N (NINTS * 2) #define RESULT (NINTS * (NINTS - 1) / 2 * N + NINTS) extern void abort (void); typedef struct giga { unsigned int g[N]; } giga; unsigned long __attribute__((noinline,noclone)) addfst(giga const *gptr, int num) { unsigned int retval = 0; int i; for (i = 0; i < num; i++) retval += gptr[i].g[0]; return retval; } In "vect" dump, we can see: single-element interleaving not supported for not adjacent vector loads However, it still vectorize it. In https://godbolt.org/z/WfP88sfj4 Shows that ARM SVE will disable vectorization wheras RVV still vectorize it.