https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123911
Bug ID: 123911
Summary: [16 Regression] ICE: SIGSEGV (infinite? recursion in
gen_movdi/riscv_legitimize_move/emit_move_insn) with
-O1 -march=rv64gv
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: zsojka at seznam dot cz
Target Milestone: ---
Host: x86_64-pc-linux-gnu
Target: riscv64-unknown-linux-gnu
Created attachment 63546
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=63546&action=edit
reduced testcase
Compiler output:
$ riscv64-unknown-linux-gnu-gcc -O1 -march=rv64gv testcase.c -wrapper
gdb,-q,--args
Reading symbols from
/repo/gcc-trunk/binary-trunk-20260201021027-r16-7220-gff7d7898bb40d4-checking-yes-rtl-df-extra-riscv64/bin/../libexec/gcc/riscv64-unknown-linux-gnu/16.0.1/cc1...
(gdb) r
Starting program:
/repo/gcc-trunk/binary-trunk-20260201021027-r16-7220-gff7d7898bb40d4-checking-yes-rtl-df-extra-riscv64/libexec/gcc/riscv64-unknown-linux-gnu/16.0.1/cc1
-quiet -imultilib . -iprefix
/repo/gcc-trunk/binary-trunk-20260201021027-r16-7220-gff7d7898bb40d4-checking-yes-rtl-df-extra-riscv64/bin/../lib/gcc/riscv64-unknown-linux-gnu/16.0.1/
testcase.c -quiet -dumpdir a- -dumpbase testcase.c -dumpbase-ext .c
-march=rv64gv -mabi=lp64d -misa-spec=2.2 -mtls-dialect=trad
-march=rv64imafdv_zmmul_zaamo_zalrsc_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b
-O1 -o /tmp/ccEJmaSZ.s
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x0000000001309f24 in ggc_internal_alloc_ (size=size@entry=16, f=f@entry=0x0,
s=s@entry=0, n=n@entry=1) at /repo/gcc-trunk/gcc/ggc-page.cc:1358
1358 {
(gdb) bt
#0 0x0000000001309f24 in ggc_internal_alloc_ (size=size@entry=16,
f=f@entry=0x0, s=s@entry=0, n=n@entry=1) at
/repo/gcc-trunk/gcc/ggc-page.cc:1358
#1 0x00000000019153db in ggc_internal_alloc (s=16) at
/repo/gcc-trunk/gcc/ggc.h:141
#2 ggc_alloc_rtx_def_stat (s=16) at /repo/gcc-trunk/gcc/ggc.h:326
#3 rtx_alloc_stat_v (code=PARALLEL, extra=0) at /repo/gcc-trunk/gcc/rtl.cc:224
#4 rtx_alloc (code=code@entry=PARALLEL) at /repo/gcc-trunk/gcc/rtl.cc:244
#5 0x000000000147e3af in (anonymous namespace)::rtx_expander::get_rtx
(this=0x7ffffbfff450, code=PARALLEL, mode=MAX_MACHINE_MODE) at
/repo/gcc-trunk/gcc/emit-rtl.cc:7007
#6 0x000000000147e34e in (anonymous namespace)::rtx_expander::get_rtx
(this=0x7ffffbfff450, code=<optimized out>, mode=<optimized out>) at
/repo/gcc-trunk/gcc/emit-rtl.cc:7033
#7 0x000000000147df98 in (anonymous namespace)::rtx_expander::get_rtvec
(this=this@entry=0x7ffffbfff450) at /repo/gcc-trunk/gcc/emit-rtl.cc:7057
#8 0x000000000147e2ec in (anonymous namespace)::rtx_expander::get_rtx
(this=0x7ffffbfff450, code=<optimized out>, mode=<optimized out>) at
/repo/gcc-trunk/gcc/emit-rtl.cc:7037
#9 0x000000000147e34e in (anonymous namespace)::rtx_expander::get_rtx
(this=0x7ffffbfff450, code=<optimized out>, mode=<optimized out>) at
/repo/gcc-trunk/gcc/emit-rtl.cc:7033
#10 0x000000000147e5f8 in (anonymous namespace)::rtx_expander::expand_seq
(this=0x7ffffbfff450) at /repo/gcc-trunk/gcc/emit-rtl.cc:7068
#11 complete_seq (seq=<optimized out>, operands=<optimized out>) at
/repo/gcc-trunk/gcc/emit-rtl.cc:7087
#12 0x00000000028c3195 in gen_pred_extract_firstv8di (operand0=<optimized out>,
operand1=<optimized out>) at /repo/gcc-trunk/gcc/config/riscv/vector.md:8261
#13 0x000000000261cd24 in gen_pred_extract_first (arg0=E_V8DImode,
x0=0x7ffff742ce58, x1=0x7ffff4663840) at ./insn-opinit.h:2921
#14 gen_vec_extractv8didi (operand0=0x7ffff742ce58, operand1=0x7ffff4663840,
operand2=<optimized out>) at /repo/gcc-trunk/gcc/config/riscv/autovec.md:1436
#15 0x00000000018053b9 in maybe_expand_insn (icode=<optimized out>,
nops=nops@entry=3, ops=ops@entry=0x7ffffbfff560) at
/repo/gcc-trunk/gcc/optabs.cc:8471
#16 expand_insn (icode=<optimized out>, nops=nops@entry=3,
ops=ops@entry=0x7ffffbfff600) at /repo/gcc-trunk/gcc/optabs.cc:8502
#17 0x0000000001eef0a7 in riscv_vector::emit_vec_extract
(target=target@entry=0x7ffff742ce58, src=src@entry=0x7ffff4663840,
index=0x7ffff7808490) at /repo/gcc-trunk/gcc/config/riscv/riscv-v.cc:6350
#18 0x0000000001e11051 in riscv_legitimize_move (mode=mode@entry=E_DImode,
dest=0x7ffff742ce58, src=<optimized out>) at
/repo/gcc-trunk/gcc/config/riscv/riscv.cc:3886
#19 0x0000000002797aa5 in gen_movdi (operand0=<optimized out>,
operand1=<optimized out>) at /repo/gcc-trunk/gcc/config/riscv/riscv.md:2514
#20 0x00000000014bd152 in insn_gen_fn::operator()<rtx_def*, rtx_def*>
(this=<optimized out>) at /repo/gcc-trunk/gcc/recog.h:472
#21 emit_move_ccmode (mode=<optimized out>, x=<optimized out>, y=<optimized
out>) at /repo/gcc-trunk/gcc/expr.cc:4456
#22 emit_move_insn_1 (x=<optimized out>, y=0x7ffff742ce58) at
/repo/gcc-trunk/gcc/expr.cc:4600
#23 0x00000000014bd5ea in emit_move_insn (x=x@entry=0x7ffff742ce58,
y=y@entry=0x7ffff742ce58) at /repo/gcc-trunk/gcc/expr.cc:4751
#24 0x0000000001e11b80 in riscv_legitimize_move (mode=mode@entry=E_DImode,
dest=0x7ffff742ce58, src=<optimized out>) at
/repo/gcc-trunk/gcc/config/riscv/riscv.cc:3918
#25 0x0000000002797aa5 in gen_movdi (operand0=<optimized out>,
operand1=<optimized out>) at /repo/gcc-trunk/gcc/config/riscv/riscv.md:2514
#26 0x00000000014bd152 in insn_gen_fn::operator()<rtx_def*, rtx_def*>
(this=<optimized out>) at /repo/gcc-trunk/gcc/recog.h:472
#27 emit_move_ccmode (mode=<optimized out>, x=<optimized out>, y=<optimized
out>) at /repo/gcc-trunk/gcc/expr.cc:4456
#28 emit_move_insn_1 (x=<optimized out>, y=0x7ffff742ce58) at
/repo/gcc-trunk/gcc/expr.cc:4600
..
$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-riscv64/bin/riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-20260201021027-r16-7220-gff7d7898bb40d4-checking-yes-rtl-df-extra-riscv64/bin/../libexec/gcc/riscv64-unknown-linux-gnu/16.0.1/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--enable-libsanitizer --with-isa-spec=2.2
--with-sysroot=/usr/riscv64-unknown-linux-gnu --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=riscv64-unknown-linux-gnu
--with-ld=/usr/bin/riscv64-unknown-linux-gnu-ld
--with-as=/usr/bin/riscv64-unknown-linux-gnu-as --disable-multilib
--disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-20260201021027-r16-7220-gff7d7898bb40d4-checking-yes-rtl-df-extra-riscv64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 16.0.1 20260201 (experimental) (GCC)