ICE in delete_output_reload
Michael Eager
eager@eagercon.com
Tue Feb 12 22:12:00 GMT 2008
Ian Lance Taylor wrote:
> Michael Eager <eager@eagercon.com> writes:
>
>> I patched the code to only count the occurrence if the
>> locations are different. Any idea if that has adverse
>> consequences?
>
> I would expect that to work. But before bringing it back to mainline
> I'd like to find out why the locations are the same.
The failing source is simple:
width = -width;
The RTL is more or less (I don't have it in front of me)
(set (reg 140) (neg (reg 140)))
It looks like both (reg 140) are translated into a stack
reference (mem). Reload attempts to delete one of
the output reloads, and the assert fails.
This only happens in a large compile, so it appears to be
the result of register pressure. If I cut out some code,
the ICE disappears.
>>> In case it helps, this is where reg_equiv_alt_mem came in:
>>> http://gcc.gnu.org/ml/gcc-patches/2006-07/msg01136.html
>>> http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00070.html
>> Thanks. I think I saw one or perhaps both. I'll look again.
>>
>> Has anyone ever done a description of reg allocation or reload?
>
> Just http://gcc.gnu.org/wiki/reload , I think.
Thanks.
--
Michael Eager eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
More information about the Gcc
mailing list