https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112670
Bug ID: 112670
Summary: RISC-V: Run fail on pr65518.c with -flto
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: ---
Case:
#include <assert.h>
#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)
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;
}
int main ()
{
struct giga g[NINTS];
unsigned int n = 1;
int i, j;
for (i = 0; i < NINTS; ++i)
for (j = 0; j < N; ++j)
{
g[i].g[j] = n++;
__asm__ volatile ("");
}
assert (addfst (g, NINTS) == RESULT);
return 0;
}
with -march=rv64gcv_zvfh_zfh_zvl512b -mabi=lp64d -O3 -fno-vect-cost-model
The run passed.
However, with -march=rv64gcv_zvfh_zfh_zvl512b -mabi=lp64d -O3
-fno-vect-cost-model -flto.
It execution failed:
bbl loader
assertion "addfst (g, NINTS) == RESULT" failed: file "bug.c", line 38,
function: main
I compare the codegen, they are totally the same.
I can't figure out what's the problem ?