This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH] PR opt/10764: ICE using x86 logdf2
- From: Michael Matz <matz at suse dot de>
- To: Roger Sayle <roger at www dot eyesopen dot com>
- Cc: Alexandre Oliva <aoliva at redhat dot com>,Richard Henderson <rth at redhat dot com>, <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 15 May 2003 12:14:29 +0200 (CEST)
- Subject: Re: [PATCH] PR opt/10764: ICE using x86 logdf2
On Wed, 14 May 2003, Roger Sayle wrote:
> Which I believe is impossible for reload to handle. The constraint
> on the second argument to UNSPEC is that it must be "u", i.e. in
> st(1). But as I mentioned st(1) is clobbered by this "unspec"!
> My understanding is that reload doesn't perform live range splitting,
> so that if (reg:DF 62) is "coloured" as "(reg:DF 8 st(1))" then all
> occurances of it are register allocated to st(1).
Sort of. It works like this: the traditional allocator (local-alloc and
global.c) allocate one hardreg for a whole pseudo. In that sense reg 62
would indeed be st(1) everywhere. But reloads work locally (ignore reload
inheritance for now): when there is an non-colored reference to any
pseudo, but must have one, then a hardreg is used, but that does _not_
influence references to that pseudo in other instructions.
Anyway this is not the problem here, as Richard already explained.
Because that operand is removed from the stack the insn must have an
explicit clobber, as that is how reg-stack.c notices such stack pops.
It's not really a problem of reloads.