ICE in delete_output_reload

Michael Eager eager@eagercon.com
Tue Feb 12 20:06:00 GMT 2008


Ian Lance Taylor wrote:
> Michael Eager <eager@eagercon.com> writes:
> 
>> I'm trying to understand an assertion failure in reload1.c:8135.
>>
>> In delete_output_reload(), I'm getting an assertion failure
>> in this code:
>>
>>    for (i1 = reg_equiv_alt_mem_list [REGNO (reg)]; i1; i1 = XEXP (i1, 1))
>>      {
>>        gcc_assert (!rtx_equal_p (XEXP (i1, 0), substed));
>>        n_occurrences += count_occurrences (PATTERN (insn), XEXP (i1, 0), 0);
>>      }
>>
>> Sure enough, i1 matches substed.
>>
>> reg_equiv_memory_loc[regno] (the source for substed) is the same as
>> reg_equiv_alt_mem_list[regno].
>>
>> Why is this unexpected and what might cause it?
> 
> It's unexpected because you shouldn't see the same memory location in
> reg_equiv_memory_loc and req_equiv_alt_mem_list.  The memory location
> which holds the value should not also be an alternate location for the
> value.
> 
> The check is there because if they are equal for some reason we will
> miscount occurrences.  We already counted occurrences in SUBSTED.
> 
> I realize that this is probably not very helpful.

:-)

I patched the code to only count the occurrence if the
locations are different.  Any idea if that has adverse
consequences?

> 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?

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



More information about the Gcc mailing list