On Thu, Nov 08, 2007 at 09:52:27PM +0100, Eric Botcazou wrote:
> > This doesnt happen because while inserting the caller save insn, its
> > live_throughout is simply set to the live_throughout of the call insn
> > + the registers marked with REG_DEAD notes in the call insn.
> 
> Ouch.  Relying on REG_DEAD notes to get complete liveness info is a no-no:
> 
> /* The value in REG dies in this insn (i.e., it is not needed past
>    this insn).  If REG is set in this insn, the REG_DEAD note may,
>    but need not, be omitted.  */
> REG_NOTE (DEAD)
> 
> This problem was apparently introduced a long time ago:
>   http://gcc.gnu.org/ml/gcc-cvs/1999-12/msg00212.html

   See also <URL:http://gcc.gnu.org/ml/gcc-patches/1999-11n/msg00916.html>
and <URL:http://gcc.gnu.org/ml/gcc-patches/1999-12n/msg00086.html>.

   It's been on my TODO list for a year to essentially revert that patch and
enhance find_reg() such that an output reload can use a register which is
live_before && !live_after, which is not the case today. See e.g.
<URL:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32725>.

-- 
Rask Ingemann Lambertsen
Danish law requires addresses in e-mail to be logged and stored for a year

Reply via email to