Issue 169612
Summary [RISC-V] clang++ miscompiles rvv intrinsics at `-O0`
Labels clang
Assignees
Reporter ams-x9v2b7kq
    Link: https://godbolt.org/z/c83W59h1s
results:
> clang++ test.cpp -march=rv64gcv_zvfh -mabi=lp64d -O0 -o a.out && $QEMU -L $SYSROOT a.out
6400000
> clang++ test.cpp -march=rv64gcv_zvfh -mabi=lp64d -O1 -o a.out && $QEMU -L $SYSROOT a.out
000000

version:
```
$ clang++ --version
clang version 21.1.1 (https://github.com/llvm/llvm-project.git 5a86dc996c26299de63effc927075dcbfb924167)
Target: riscv64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/2025-compiler/riscv64-glibc-ubuntu-24.04-llvm/bin
```

code:
```
#include <riscv_vector.h>
uint8_t a[1]; int16_t b[6]; int8_t c[1]; uint8_t d[6];
int main() {
  for (int e = 0; e < 6; ++e) { b[e] = 84; }
  for (size_t f = 0, ae = 6, g; ae; ae -= g) {
    g = __riscv_vsetvl_e8m8(ae);
    vuint8m8_t i = __riscv_vle8_v_u8m8(&a[f], g);
    vbool1_t j = __riscv_vmseq_vx_u8m8_b1(i, 1, g);
    vint16m1_t k = __riscv_vle16_v_i16m1(&b[f], g);
    vint8m8_t l = __riscv_vle8_v_i8m8(&c[f], g);
    vint16m8_t a = __riscv_vcreate_v_i16m1_i16m8(k, k, k, k, k, k, k, k);
    vbool1_t af = __riscv_vmsle_vv_i8m8_b1(l, l, g);
    __riscv_vsm_v_b1(&d[f], __riscv_vmand_mm_b1(af, j, g), g);
  }
  for (int e = 0; e < 6; ++e) __builtin_printf("%u", d[e]);
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to