summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-10-10 16:03:44 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-10-10 16:03:44 +0000
commit5d92a54845c0cd1ca923744a5334b7459520f4ec (patch)
treea0186dcc34dc8e70af183411fc3bdd7a33f9780b
parent28bae3bfae2510c9f355d12bb59538b811582ee7 (diff)
downloadgcc-5d92a54845c0cd1ca923744a5334b7459520f4ec.tar.gz
* regmove.c (optimize_reg_copy_3): Honor TRULY_NOOP_TRUNCATION.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22977 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/regmove.c8
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 45908ac8642..a60d9eed2c7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Sat Oct 10 17:01:42 1998 Jeffrey A Law (law@cygnus.com)
+
+ * regmove.c (optimize_reg_copy_3): Honor TRULY_NOOP_TRUNCATION.
+
Fri Oct 9 22:08:05 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* fp-bit.c (SFtype): Don't implicitly use int in declaration.
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 41235f13704..35ddf12d6f3 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -552,6 +552,14 @@ optimize_reg_copy_3 (insn, dest, src)
|| GET_CODE (SET_SRC (set)) != MEM
|| SET_DEST (set) != src_reg)
return;
+
+ /* Do not use a SUBREG to truncate from one mode to another if truncation
+ is not a nop. */
+ if (GET_MODE_BITSIZE (GET_MODE (src_reg)) <= GET_MODE_BITSIZE (GET_MODE (src))
+ && !TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (src)),
+ GET_MODE_BITSIZE (GET_MODE (src_reg))))
+ return;
+
old_mode = GET_MODE (src_reg);
PUT_MODE (src_reg, GET_MODE (src));
XEXP (src, 0) = SET_SRC (set);