+2002-01-08 Richard Henderson <rth@redhat.com>
+
+ * regrename.c (copy_value): Ignore overlapping copies.
+
2002-01-08 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.c (alpha_split_conditional_move): Call copy_rtx
{
unsigned int dr = REGNO (dest);
unsigned int sr = REGNO (src);
+ unsigned int dn, sn;
unsigned int i;
/* ??? At present, it's possible to see noop sets. It'd be nice if
if (frame_pointer_needed && dr == HARD_FRAME_POINTER_REGNUM)
return;
+ /* If SRC and DEST overlap, don't record anything. */
+ dn = HARD_REGNO_NREGS (dr, GET_MODE (dest));
+ sn = HARD_REGNO_NREGS (sr, GET_MODE (dest));
+ if ((dr > sr && dr < sr + sn)
+ || (sr > dr && sr < dr + dn))
+ return;
+
/* If SRC had no assigned mode (i.e. we didn't know it was live)
assign it now and assume the value came from an input argument
or somesuch. */