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

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|needs-reduction             |
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-05-20
     Ever confirmed|0                           |1

--- Comment #10 from Martin Liška <marxin at gcc dot gnu.org> ---
There's a reduced test-case:

$ cat expmed.ii
void fancy_abort(const char *, int, const char *);
enum machine_mode {
  E_QImode,
  E_HImodeE_DImode,
  E_TImode,
  MIN_MODE_INT = E_QImode,
  MAX_MODE_INT = E_TImode
};
template <typename U> void is_a(machine_mode, U);
class A {};
struct B {
  bool cheap[2][MAX_MODE_INT + 1];
};
struct C {
  int cost[2][MAX_MODE_INT + 1];
};
struct {
  B x_sdiv_pow2_cheap;
  B x_smod_pow2_cheap;
  C x_udiv_cost;
} a;
bool *expmed_op_cheap_ptr(B *p1, bool p2, machine_mode p3) {
  return &p1->cheap[p2][p3];
}
int *expmed_op_cost_ptr(C *p1, bool p2, machine_mode p3) {
  return &p1->cost[p2][p3];
}
bool *b, *c;
int d;
machine_mode e;
void init_expmed() {
  machine_mode f;
  int g = 0;
  for (;; g++) {
    f = MIN_MODE_INT;
    for (; f <= MAX_MODE_INT; f = machine_mode(f + 1)) {
      int *h = expmed_op_cost_ptr(&(&a)->x_udiv_cost, g, f);
      *h = d;
      b = expmed_op_cheap_ptr(&(&a)->x_sdiv_pow2_cheap, g, f);
      *b = (c = expmed_op_cheap_ptr(&(&a)->x_smod_pow2_cheap, g, f));
      *c = 0;
      A i;
      is_a(f, i);
      for (; e;)
        fancy_abort("", 9, __FUNCTION__);
    }
  }
}

$ /dev/shm/objdir2/gcc/xgcc -B/dev/shm/objdir2/gcc/ -c expmed.ii -O2
expmed.ii: In function ‘void init_expmed()’:
expmed.ii:48:1: error: unrecognizable insn:
   48 | }
      | ^
(insn 177 176 178 2 (set (reg:SI 52 %fr24)
        (subreg:SI (reg:DI 51 %fr23) 4)) -1
     (nil))
during RTL pass: reload
expmed.ii:48:1: internal compiler error: in extract_insn, at recog.c:2310
0x52bc60 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
        /home/marxin/Programming/gcc/gcc/rtl-error.c:108
0x52bc7e _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
        /home/marxin/Programming/gcc/gcc/rtl-error.c:116
0x52baac extract_insn(rtx_insn*)
        /home/marxin/Programming/gcc/gcc/recog.c:2310
0xa2b29d extract_insn_cached(rtx_insn*)
        /home/marxin/Programming/gcc/gcc/recog.c:2199
0x82540a cleanup_subreg_operands(rtx_insn*)
        /home/marxin/Programming/gcc/gcc/final.c:3313
0xa54a49 reload(rtx_insn*, int)
        /home/marxin/Programming/gcc/gcc/reload1.c:1235
0x9259c0 do_reload
        /home/marxin/Programming/gcc/gcc/ira.c:5528
0x9259c0 execute
        /home/marxin/Programming/gcc/gcc/ira.c:5700

Reply via email to