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.