https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113431
Bug ID: 113431 Summary: [14] RISC-V rv64gcv vector: Runtime mismatch at -O3 Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: patrick at rivosinc dot com Target Milestone: --- Testcase: int a[2][9]; int b; int c; int d; int main() { for (b = 0;b < 2; b++) for (long e = 8; e > 0; e--) a[b][e] = a[0][1] == 0; if (!a[1][1]) return 0; else return 1; } Commands: > /scratch/tc-testing/tc-jan-16-trunk/build-rv64gcv/bin/riscv64-unknown-linux-gnu-gcc > -O3 -march=rv64gcv red_copy.c -o user-config.out > QEMU_CPU=rv64,vlen=128,v=true,vext_spec=v1.0,Zve32f=true,Zve64f=true timeout > --verbose -k 0.1 1 > /scratch/tc-testing/tc-jan-16-trunk/build-rv64gcv/bin/qemu-riscv64 > user-config.out > echo $? 1 > /scratch/tc-testing/tc-jan-16-trunk/build-rv64gcv/bin/riscv64-unknown-linux-gnu-gcc > -O2 -march=rv64gcv red_copy.c -o user-config.out > QEMU_CPU=rv64,vlen=128,v=true,vext_spec=v1.0,Zve32f=true,Zve64f=true timeout > --verbose -k 0.1 1 > /scratch/tc-testing/tc-jan-16-trunk/build-rv64gcv/bin/qemu-riscv64 > user-config.out > echo $? 0 > /scratch/tc-testing/tc-jan-16-trunk/build-rv64gcv/bin/riscv64-unknown-linux-gnu-gcc > -O3 -march=rv64gc red_copy.c -o user-config.out > QEMU_CPU=rv64,vlen=128,v=true,vext_spec=v1.0,Zve32f=true,Zve64f=true timeout > --verbose -k 0.1 1 > /scratch/tc-testing/tc-jan-16-trunk/build-rv64gcv/bin/qemu-riscv64 > user-config.out > echo $? 0 When a[1][1] is set a[0][1] is true(1) so a[1][1] == 0 should be false(0). At -O3 rv64gcv the condition is evaluated incorrectly. Godbolt: https://godbolt.org/z/Tfz3d646e