OSDN Git Service

* simplify-rtx.c (simplify_subreg): Combine SUBREG and TRUNCATE.
authornemet <nemet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Feb 2006 17:45:55 +0000 (17:45 +0000)
committernemet <nemet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Feb 2006 17:45:55 +0000 (17:45 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110990 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/simplify-rtx.c

index 935add3..17c8b5f 100644 (file)
@@ -1,3 +1,7 @@
+2006-02-14  Adam Nemet  <anemet@caviumnetworks.com>
+
+       * simplify-rtx.c (simplify_subreg): Combine SUBREG and TRUNCATE.
+
 2006-02-14  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
 
        PR bootstrap/26053
index c949dea..6f4f09b 100644 (file)
@@ -4426,6 +4426,14 @@ simplify_subreg (enum machine_mode outermode, rtx op,
       return NULL_RTX;
     }
 
+  /* Merge implicit and explicit truncations.  */
+
+  if (GET_CODE (op) == TRUNCATE
+      && GET_MODE_SIZE (outermode) < GET_MODE_SIZE (innermode)
+      && subreg_lowpart_offset (outermode, innermode) == byte)
+    return simplify_gen_unary (TRUNCATE, outermode, XEXP (op, 0),
+                              GET_MODE (XEXP (op, 0)));
+
   /* SUBREG of a hard register => just change the register number
      and/or mode.  If the hard register is not valid in that mode,
      suppress this simplification.  If the hard register is the stack,