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

            Bug ID: 122076
           Summary: [RISCV] [Miscompile] GCC - riscv64 target, miscompiles
                    at -O3 as well as -O2
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: skothadiya at whileone dot in
  Target Milestone: ---

Created attachment 62454
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62454&action=edit
Attached reduced testcase

```GCC (riscv64 target) produces incorrect output for a C program when compiled
with -O2 or -O3, after 43508d358b9e53abfc3be4e28accbd4a07154dfc.

Description:
The C code involves 2 for loop sections, first writes to array with fixed
value. Second section writes a fixed values, but have wrap-around and
truncation. compiles correctly on x86_64 and produces the expected output.
However, when compiled for the riscv64 architecture, the resulting binary
yields an incorrect value. The expected output is 2, but the program returns 0.
This miscompilation occurs specifically with optimizations enabled at levels
-O2 and -O3.

Compiler flags:
-march=rv64gcv_zvl1024b -flto -mrvv-vector-bits=zvl -O3

Reproduction Steps:
1. Compile the test case with GCC for riscv64 using the -O2 or -O3 flag.
2. Execute the compiled binary.
3. Observe the output.

COMMANDS:
/riscv-gnu-toolchain-build/bin/riscv64-unknown-linux-gnu-gcc
-march=rv64gcv_zvl1024b -flto -mrvv-vector-bits=zvl -O3 red.c -o
user-config.out -fsigned-char -fno-strict-aliasing -fwrapv
-Wno-unknown-warning-option -Werror -Wfatal-errors -Wall -Wformat
-Wno-int-in-bool-context -Wno-dangling-pointer
-Wno-compare-distinct-pointer-types -Wno-overflow -Wuninitialized
-Warray-bounds -Wreturn-type -Wno-unused-function -Wno-unused-variable
-Wno-unused-but-set-variable -Wno-unused-value -Wno-address -Wno-bool-compare
-Wno-pointer-sign -Wno-bool-operation -Wno-tautological-compare
-Wno-self-assign -Wno-implicit-const-int-float-conversion
-Wno-constant-conversion -Wno-unused-value
-Wno-tautological-constant-out-of-range-compare -Wno-constant-logical-operand
-Wno-parentheses-equality -Wno-pointer-sign

QEMU_CPU=rv64,vlen=1024,rvv_ta_all_1s=true,rvv_ma_all_1s=true,v=true,vext_spec=v1.0,zve32f=true,zve64f=true
timeout --verbose -k 0.1 4
/home/skothadiya/CIFUZZR/riscv-gnu-toolchain-build/bin/qemu-riscv64
user-config.out 1
0

  //Expected Output: 2
  //Actual Output: 0```

Reply via email to