simplify-rtx.c (simplify_binary_operation_1): Restrict the transformation to equal...
authorMarc Glisse <marc.glisse@inria.fr>
Thu, 21 Mar 2013 15:22:09 +0000 (16:22 +0100)
committerMarc Glisse <glisse@gcc.gnu.org>
Thu, 21 Mar 2013 15:22:09 +0000 (15:22 +0000)
2013-03-21  Marc Glisse  <marc.glisse@inria.fr>

* simplify-rtx.c (simplify_binary_operation_1) <VEC_CONCAT>:
Restrict the transformation to equal modes.

From-SVN: r196882

gcc/ChangeLog
gcc/simplify-rtx.c

index 33cbd38..0baa0a9 100644 (file)
@@ -1,3 +1,8 @@
+2013-03-21  Marc Glisse  <marc.glisse@inria.fr>
+
+       * simplify-rtx.c (simplify_binary_operation_1) <VEC_CONCAT>:
+       Restrict the transformation to equal modes.
+
 2013-03-21  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/39326
index 43700cf..c320bcf 100644 (file)
@@ -3623,10 +3623,13 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode,
            return gen_rtx_CONST_VECTOR (mode, v);
          }
 
-       /* Try to merge VEC_SELECTs from the same vector into a single one.  */
+       /* Try to merge two VEC_SELECTs from the same vector into a single one.
+          Restrict the transformation to avoid generating a VEC_SELECT with a
+          mode unrelated to its operand.  */
        if (GET_CODE (trueop0) == VEC_SELECT
            && GET_CODE (trueop1) == VEC_SELECT
-           && rtx_equal_p (XEXP (trueop0, 0), XEXP (trueop1, 0)))
+           && rtx_equal_p (XEXP (trueop0, 0), XEXP (trueop1, 0))
+           && GET_MODE (XEXP (trueop0, 0)) == mode)
          {
            rtx par0 = XEXP (trueop0, 1);
            rtx par1 = XEXP (trueop1, 1);