Ian Lance Taylor wrote:
Michael Eager <[EMAIL PROTECTED]> 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    [EMAIL PROTECTED]
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

Reply via email to