* regmove.c (optimize_reg_copy_3): Honor TRULY_NOOP_TRUNCATION.
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 10 Oct 1998 16:03:44 +0000 (16:03 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 10 Oct 1998 16:03:44 +0000 (16:03 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22977 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/regmove.c

index 45908ac..a60d9ee 100644 (file)
@@ -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.
index 41235f1..35ddf12 100644 (file)
@@ -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);