https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118153
Bug ID: 118153
Summary: Wrong code generated due to selective scheduler on
RISC-V target
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: luiss at synopsys dot com
Target Milestone: ---
Created attachment 59936
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59936&action=edit
Test case
In the attached test case, there is incorrect code generation with a specific
set of options. It seems that the main issue is related to the selective
scheduler. The late-combine pass must be disabled to trigger the issue.
Execution command:
```
$ /home/luis/inst/bin/riscv64-unknown-elf-gcc \
-fharden-control-flow-redundancy -fselective-scheduling \
-fno-late-combine-instructions \
-mabi=ilp32 -march=rv32i_zicsr -mcmodel=medany \
-O3 test.i
$ /home/luis/inst/bin/qemu-riscv32 -r 5.10 a.out
checksum = 965B2E87
```
The expected output is `checksum = 18D42964`. Any modifications to the source
code or optimization options that affect the code flow, such as using -O2, will
trigger the expected result.
I'm using a GCC cross-compiler for RISC-V Baremetal Multilib (running on x64
Linux) - gcc version 12.2.0
GCC Trunk was used in this experiment. The output of "riscv64-unknown-elf-gcc
-v" is:
-------------
Using built-in specs.
COLLECT_GCC=/home/luis/inst/bin/riscv64-unknown-elf-gcc
COLLECT_LTO_WRAPPER=/home/luis/inst/libexec/gcc/riscv64-unknown-elf/15.0.0/lto-wrapper
Target: riscv64-unknown-elf
Configured with: /home/luis/src/gcc-trunk/configure
--target=riscv64-unknown-elf --prefix=/home/luis/inst --disable-shared
--disable-threads --enable-languages=c,c++ --with-pkgversion=g2d8982c27
--with-system-zlib --enable-tls --with-newlib
--with-sysroot=/home/luis/inst/riscv64-unknown-elf
--with-native-system-header-dir=/include --disable-libmudflap --disable-libssp
--disable-libquadmath --disable-libgomp --disable-nls
--disable-tm-clone-registry --src=/home/luis/src/gcc-trunk --enable-multilib
--with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213
'CFLAGS_FOR_TARGET=-Os -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-Os
-mcmodel=medlow'
Thread model: single
Supported LTO compression algorithms: zlib zstd
gcc version 15.0.0 20241220 (experimental) (g2d8982c27)
-------------