re PR rtl-optimization/58295 (Missed zero-extension elimination in the combiner)
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 10 Dec 2013 22:58:37 +0000 (22:58 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 10 Dec 2013 22:58:37 +0000 (22:58 +0000)
PR rtl-optimization/58295
* simplify-rtx.c (simplify_truncation): Restrict the distribution for
WORD_REGISTER_OPERATIONS targets.

From-SVN: r205874

gcc/ChangeLog
gcc/simplify-rtx.c

index 3264f7a..d9f27b9 100644 (file)
@@ -1,3 +1,9 @@
+2013-12-10  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR rtl-optimization/58295
+       * simplify-rtx.c (simplify_truncation): Restrict the distribution for
+       WORD_REGISTER_OPERATIONS targets.
+
 2013-12-10  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * genrecog.c (validate_pattern): Treat all messages except missing
index ec13858..78cd665 100644 (file)
@@ -640,11 +640,16 @@ simplify_truncation (enum machine_mode mode, rtx op,
                                   XEXP (op, 0), origmode);
     }
 
-  /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
-     to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))).  */
-  if (GET_CODE (op) == PLUS
-      || GET_CODE (op) == MINUS
-      || GET_CODE (op) == MULT)
+  /* If the machine can perform operations in the truncated mode, distribute
+     the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
+     (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))).  */
+  if (1
+#ifdef WORD_REGISTER_OPERATIONS
+      && precision >= BITS_PER_WORD
+#endif
+      && (GET_CODE (op) == PLUS
+         || GET_CODE (op) == MINUS
+         || GET_CODE (op) == MULT))
     {
       rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
       if (op0)