* regrename.c (copy_value): Ignore the copy if the source register
is present in the value chain with a narrower mode.
From-SVN: r48689
+2002-01-09 Richard Henderson <rth@redhat.com>
+
+ * regrename.c (copy_value): Ignore the copy if the source register
+ is present in the value chain with a narrower mode.
+
2002-01-09 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* real.c (c4xtoe, toc4x): Do some special conversion on long doubles
if (vd->e[sr].mode == VOIDmode)
set_value_regno (sr, vd->e[dr].mode, vd);
+ /* If SRC had been assigned a mode narrower than the copy, we can't
+ link DEST into the chain, because not all of the pieces of the
+ copy came from oldest_regno. */
+ else if (sn > (unsigned int) HARD_REGNO_NREGS (sr, vd->e[sr].mode))
+ return;
+
/* Link DR at the end of the value chain used by SR. */
vd->e[dr].oldest_regno = vd->e[sr].oldest_regno;