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