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?