https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122672
Bug ID: 122672
Summary: RISCV: ICE in gen_lowpart_general, at rtlhooks.cc:57
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: ybni at cse dot cuhk.edu.hk
Target Milestone: ---
This code triggers ICE with `-O2 -mrvv-vector-bits=zvl`:
```c
char a;
int b;
int d(char *e) {
int c = *(int *)e;
if (c < 0)
return 1;
return 0;
}
int f() {
{
char g[] = {a, a, a, a};
int h = d(g);
b = h;
}
b &&f();
}
```
Compiler command:
```sh
riscv64-unknown-linux-gnu-gcc -O2 -mrvv-vector-bits=zvl -march=rv64gcv
-mabi=lp64d case.c
```
Crash:
```sh
case.c:16:1: internal compiler error: in gen_lowpart_general, at rtlhooks.cc:57
16 | }
| ^
```
Backtrace:
```sh
0x2b27c66 internal_error(char const*, ...)
../.././gcc/gcc/diagnostic-global-context.cc:517
0xa82bf3 fancy_abort(char const*, int, char const*)
../.././gcc/gcc/diagnostic.cc:1749
0xa4de8b gen_lowpart_general(machine_mode, rtx_def*)
../.././gcc/gcc/rtlhooks.cc:57
0x14a5573 riscv_legitimize_move(machine_mode, rtx_def*, rtx_def*)
../.././gcc/gcc/config/riscv/riscv.cc:3601
0x2346d24 gen_movdi(rtx_def*, rtx_def*)
../.././gcc/gcc/config/riscv/riscv.md:2492
0xd25154 rtx_insn* insn_gen_fn::operator()<rtx_def*, rtx_def*>(rtx_def*,
rtx_def*) const
../.././gcc/gcc/recog.h:472
0xd25154 emit_move_ccmode
../.././gcc/gcc/expr.cc:4455
0xd25154 emit_move_insn_1(rtx_def*, rtx_def*)
../.././gcc/gcc/expr.cc:4600
0xd25545 emit_move_insn(rtx_def*, rtx_def*)
../.././gcc/gcc/expr.cc:4751
0xf2038c lra_emit_move(rtx_def*, rtx_def*)
../.././gcc/gcc/lra.cc:509
0xf38ca6 curr_insn_transform
../.././gcc/gcc/lra-constraints.cc:4815
0xf39f03 lra_constraints(bool)
../.././gcc/gcc/lra-constraints.cc:5572
0xf228ba lra(_IO_FILE*, int)
../.././gcc/gcc/lra.cc:2455
0xedb07f do_reload
../.././gcc/gcc/ira.cc:5987
0xedb07f execute
../.././gcc/gcc/ira.cc:6175
```
Compiler version:
```sh
$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/data/yunboni/utils/compilers/riscv-gcc/libexec/gcc/riscv64-unknown-linux-gnu/15.1.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with:
/data/yunboni/utils/compilers/repos/riscv-gnu-toolchain/gcc/configure
--target=riscv64-unknown-linux-gnu
--prefix=/data/yunboni/utils/compilers/riscv-gcc
--with-sysroot=/data/yunboni/utils/compilers/riscv-gcc/sysroot
--with-pkgversion=g1b306039a --with-system-zlib --enable-shared --enable-tls
--enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp
--disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap
--src=.././gcc --disable-default-pie --disable-multilib --with-abi=lp64d
--with-arch=rv64gc --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2
-mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 15.1.0 (g1b306039a)
```