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