https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123806
Bug ID: 123806
Summary: gcc 14/15/16 miscompiles rvv intrinsics at -O1/2/3
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: rvismith1115 at gmail dot com
Target Milestone: ---
gcc 14/15/16 miscompiles rvv intrinsics at -O1/2/3:
> riscv64-unknown-linux-gnu-g++ bug.cpp -O0 -march=rv64gcv_zvfh -mabi=lp64d &&
> $QEMU a.out
5 0
> riscv64-unknown-linux-gnu-g++ bug.cpp -O1 -march=rv64gcv_zvfh -mabi=lp64d &&
> $QEMU a.out
8 18446744073709551613
Code:
#include <riscv_vector.h>
#include <vector>
int8_t a[5], d[5], c[5], b[5];
int main() {
for (size_t e = 0, avl = 5; avl > 0;) {
size_t f = __riscv_vsetvl_e8m1(avl);
vint8m1_t g = __riscv_vle8_v_i8m1(&a[e], f);
vint8mf2_t i = __riscv_vle8ff(
__riscv_vlm_v_b16(std::vector<uint8_t>((f + 7) / 8, 5).data(), f),
&b[e], &f, f);
vint8m1_t j = __riscv_vle8_v_i8m1(&c[e], f);
vint8m1_t k = __riscv_vredxor_tu(g, i, j, f);
__riscv_vse8_v_i8m1(&d[e], k, f);
avl -= f;
__builtin_printf("%lu %lu\n", f, avl);
break;
}
}