https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121780

            Bug ID: 121780
           Summary: [Trunk] RISC-V rv64gcv: miscompile at -O1
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: xxs_chy at outlook dot com
  Target Milestone: ---

GCC version: gcc version 16.0.0 20250903 (experimental) (gbda76b479)
Testcase:
#include <stdint.h>
#include <stdio.h>
typedef uint8_t a;
typedef a b __attribute__((vector_size(4)));
typedef a c __attribute__((vector_size(8)));
int d[10];
struct {
  int16_t e
} f;
int64_t g;
int32_t j(int32_t, int32_t, int8_t, uint8_t, int64_t) {
  c k = {20927, 0, 9, 6, 6, 2};
  int *l = &d[1];
  for (;;) {
    asm goto("" : : : : m);
    k = __builtin_shufflevector(
        __builtin_shufflevector(k, k, 3, 1, 1, 9, 4, 5, 9, 0),
        __builtin_shufflevector((b){}, (b){}, 1, 3, 7, 6, 0, 0, 6, 2), 10, 2,
1,
        7, 7, 7, 4, 5);
    for (; f.e >= 0;) {
      *l = k[7];
      uint32_t n[][7][6] = {};
      return n[0][5][0];
    m:
    }
  }
}
int main() {
  uint64_t o = 1;
  j(o, g, g, o, 0);
  int BS_CHECKSUM = 5;
  for (int i = 0; i < 10; i++)
    BS_CHECKSUM ^= d[i];
  printf("BackSmith Checksum = 0x%016llx\n", BS_CHECKSUM);
}

Commands:
> riscv64-unknown-elf-gcc -march=rv64gcv -O1 reduced.c -static && qemu-riscv64 
> a.out
> BackSmith Checksum = 0x0000000000000005

> riscv64-unknown-elf-gcc -march=rv64gcv -O0/O1/O3 reduced.c -static && 
> qemu-riscv64 a.out
> BackSmith Checksum = 0x0000000000000007

Reply via email to