https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109932
Bug ID: 109932
Summary: ICE in in extract_insn, at recog.cc:2791 on ppc64le
with -mno-vsx
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: jamborm at gcc dot gnu.org
Target Milestone: ---
Host: x86_64-linux
Target: ppc64le-linux-gnu
Using a cross compiler (revision ad0f80d945c) configured with
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/configure
--enable-languages=c,c++,fortran,rust,m2 --disable-bootstrap
--disable-libsanitizer --disable-multilib --enable-checking=release
--prefix=/home/worker/cross --target=ppc64le-linux-gnu
--with-as=/usr/bin/powerpc64le-suse-linux-as
and running it on the following testcase (originally
CodeGen/PowerPC/builtins-ppc-int128.c /tmp/test.c from clang
testsuite)
-----------------------------------------------------------------
#include <altivec.h>
vector signed __int128 res_vslll;
unsigned long long aull[2] = { 1L, 2L };
void testVectorInt128Pack(){
res_vslll = __builtin_pack_vector_int128(aull[0], aull[1]);
__builtin_unpack_vector_int128(res_vslll, 0);
__builtin_unpack_vector_int128(res_vslll, 1);
}
-----------------------------------------------------------------
with option -mno-vsx resuts in an ICE:
~/cross/bin/ppc64le-linux-gnu-gcc /tmp/test.c -mno-vsx
/tmp/test.c: In function ‘testVectorInt128Pack’:
/tmp/test.c:10:1: error: unrecognizable insn:
10 | }
| ^
(insn 9 8 12 2 (set (reg:V1TI 124)
(unspec:V1TI [
(reg:DI 117 [ _1 ])
(reg:DI 118 [ _2 ])
] UNSPEC_PACK_128BIT)) "/tmp/test.c":7:15 -1
(nil))
during RTL pass: vregs
/tmp/test.c:10:1: internal compiler error: in extract_insn, at recog.cc:2791
0x62c70b _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/gcc/rtl-error.cc:108
0x62c727 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/gcc/rtl-error.cc:116
0x62bb8a extract_insn(rtx_insn*)
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/gcc/recog.cc:2791
0x8dacb0 instantiate_virtual_regs_in_insn
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/gcc/function.cc:1611
0x8dacb0 instantiate_virtual_regs
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/gcc/function.cc:1984
0x8dacb0 execute
/home/worker/buildworker/tiber-gcc-trunk-ppc64le/build/gcc/function.cc:2033
I guess we should error out earlier and more user-friendly when
expanding the built-ins?