aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-01-09 12:54:49 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-01-09 12:54:49 -0800
commit42bd17b7fc6af8d4239ff6925bc0697a84545c6a (patch)
tree5ddc4bc4c275412dfcfb7200a2d4e9959c8daf2b /gcc
parentbdca3c33192910349cf77ad9a0e76f394ef4b751 (diff)
downloadgcc-42bd17b7fc6af8d4239ff6925bc0697a84545c6a.zip
gcc-42bd17b7fc6af8d4239ff6925bc0697a84545c6a.tar.gz
gcc-42bd17b7fc6af8d4239ff6925bc0697a84545c6a.tar.bz2
regrename.c (copy_value): Ignore the copy if the source register is present in the value chain with a...
* regrename.c (copy_value): Ignore the copy if the source register is present in the value chain with a narrower mode. From-SVN: r48689
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/regrename.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4623baa..95ed9eb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/regrename.c b/gcc/regrename.c
index c164d21..d101525 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -1244,6 +1244,12 @@ copy_value (dest, src, vd)
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;