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?

Reply via email to