diff options
author | Richard Henderson <rth@redhat.com> | 2002-01-09 12:54:49 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-01-09 12:54:49 -0800 |
commit | 42bd17b7fc6af8d4239ff6925bc0697a84545c6a (patch) | |
tree | 5ddc4bc4c275412dfcfb7200a2d4e9959c8daf2b | |
parent | bdca3c33192910349cf77ad9a0e76f394ef4b751 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/regrename.c | 6 |
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; |