https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103623

            Bug ID: 103623
           Summary: error: unable to generate reloads (ICE in
                    curr_insn_transform, at lra-constraints.c:4132), or
                    error: insn does not satisfy its constraints (ICE in
                    extract_constrain_insn_cached, at recog.c:2682)
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---
            Target: powerpc-*-linux-gnu

1. gcc 12.0.0 20211205 snapshot (g:c9419faef0bfaf31e6a6f744baa064892e0d105c)
ICEs when compiling the following testcase, extracted from
gcc/testsuite/gcc.target/powerpc/pack02.c, w/ -mcpu=401 (which is inadequate
for this, of course):

#define PACK __builtin_pack_longdouble
#define UNPACK __builtin_unpack_longdouble
#define LDOUBLE long double

int
main (void)
{
  double high = __builtin_pow (2.0, 60);
  double low  = 2.0;
  LDOUBLE a = ((LDOUBLE)high) + ((LDOUBLE)low);
  double x0 = UNPACK (a, 0);

  if (high != x0)
    __builtin_abort ();

  return 0;
}

% powerpc-e300c3-linux-gnu-gcc-12.0.0 -mcpu=401 ofgmx8m0.c
ofgmx8m0.c: In function 'main':
ofgmx8m0.c:17:1: error: unable to generate reloads for:
   17 | }
      | ^
(insn 23 22 24 2 (set (mem/c:DF (plus:SI (reg/f:SI 110 sfp)
                (const_int 40 [0x28])) [2 x0+0 S8 A64])
        (unspec:DF [
                (reg:TF 125)
                (const_int 0 [0])
            ] UNSPEC_UNPACK_128BIT)) "ofgmx8m0.c":11:15 1061 {unpacktf_nodm}
     (expr_list:REG_DEAD (reg:TF 125)
        (nil)))
during RTL pass: reload
ofgmx8m0.c:17:1: internal compiler error: in curr_insn_transform, at
lra-constraints.c:4132
0x6ac6f5 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/rtl-error.c:108
0x6824b9 curr_insn_transform
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/lra-constraints.c:4132
0xce2e8b lra_constraints(bool)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/lra-constraints.c:5161
0xccc71d lra(_IO_FILE*)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/lra.c:2336
0xc834e4 do_reload
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/ira.c:5932
0xc834e4 execute
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/ira.c:6118

2. Adding -O1 yields the following instead:

% powerpc-e300c3-linux-gnu-gcc-12.0.0 -mcpu=401 -O1 ofgmx8m0.c
ofgmx8m0.c: In function 'main':
ofgmx8m0.c:17:1: error: insn does not satisfy its constraints:
   17 | }
      | ^
(insn 6 5 7 2 (set (reg/v:DF 117 [ x0 ])
        (unspec:DF [
                (reg:TF 119)
                (const_int 0 [0])
            ] UNSPEC_UNPACK_128BIT)) "ofgmx8m0.c":11:15 1061 {unpacktf_nodm}
     (expr_list:REG_DEAD (reg:TF 119)
        (expr_list:REG_EQUAL (unspec:DF [
                    (const_double:TF 1.152921504606846978e+18
[0x0.800000000000001p+61])
                    (const_int 0 [0])
                ] UNSPEC_UNPACK_128BIT)
            (nil))))
during RTL pass: combine
ofgmx8m0.c:17:1: internal compiler error: in extract_constrain_insn_cached, at
recog.c:2682
0x6ac6f5 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/rtl-error.c:108
0x6ac721 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/rtl-error.c:118
0x6aadd4 extract_constrain_insn_cached(rtx_insn*)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/recog.c:2682
0x164f4bf get_attr_prefixed(rtx_insn*)
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/config/rs6000/rs6000.md:329
0x12292f1 rs6000_insn_cost
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/config/rs6000/rs6000.c:22450
0x12292f1 rs6000_insn_cost
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/config/rs6000/rs6000.c:22429
0x18116ee combine_instructions
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/combine.c:1200
0x18116ee rest_of_handle_combine
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/combine.c:14904
0x18116ee execute
       
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211205/work/gcc-12-20211205/gcc/combine.c:14949

Some target support 

Apparently some target support check

Apparently there's a missing check somewhere for target TFmode support.

Reply via email to