ICE in `find_reloads', at reload.c:4106

Jeffrey A Law law@cygnus.com
Thu Jun 15 09:59:00 GMT 2000


  In message < 200006142243.SAA26852@hiauly1.hia.nrc.ca >you write:
  > 
  > It doesn't hit emit_reload_insns:
Sorry.  I didn't realize which abort you were hitting.

Yes, if you have an input reload for that insn, you're going to die.

Though I wonder if the no input reloads restriction could be further
refined -- the idea behind that restriction is we can't guarantee
that cc0 will always have the right value after emitting the reload
insns.

Anyway....

  > At the breakpoint in reload.c, we have
  > 
  > (gdb) p debug_reload()
  > Reload 0: reload_in (SI) = (pre_dec:SI (reg:SI 14 sp))
  >         ALL_REGS, RELOAD_FOR_INPUT (opnum = 0), inc by 4
  > 	reload_in_reg: (pre_dec:SI (reg:SI 14 sp))
  > $56 = void
Yup. This would cause problems.

  > Break 1 is at the abort in the following:
  > 
  > #ifdef HAVE_cc0
  >   /* If we made any reloads for addresses, see if they violate a
  >        "no input reloads" requirement for this insn.  But loads that we
  >        do after the insn (such as for output addresses) are fine.  */
  >   if (no_input_reloads)
  >     for (i = 0; i < n_reloads; i++)
  >       if (rld[i].in != 0
  > 	  && rld[i].when_needed != RELOAD_FOR_OUTADDR_ADDRESS
  >           && rld[i].when_needed != RELOAD_FOR_OUTPUT_ADDRESS)
  >         abort ();
  > #endif
  > 
  > Can you point me to where rld[0] is being set?
Probably push_reload.
jeff



More information about the Gcc-bugs mailing list