rs6000.c (vspltis_constant): Make sure we check all elements for both endian flavors.
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Sat, 19 Oct 2013 20:52:34 +0000 (20:52 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Sat, 19 Oct 2013 20:52:34 +0000 (20:52 +0000)
2013-10-19  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* config/rs6000/rs6000.c (vspltis_constant): Make sure we check
all elements for both endian flavors.

From-SVN: r203863

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 78bc3bd..198b095 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-19  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000.c (vspltis_constant): Make sure we check
+       all elements for both endian flavors.
+
 2013-10-19  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/58792
index 7dc68fd..e054585 100644 (file)
@@ -4981,15 +4981,16 @@ vspltis_constant (rtx op, unsigned step, unsigned copies)
 
   /* Check if VAL is present in every STEP-th element, and the
      other elements are filled with its most significant bit.  */
-  for (i = 0; i < nunits - 1; ++i)
+  for (i = 1; i < nunits; ++i)
     {
       HOST_WIDE_INT desired_val;
-      if (((BYTES_BIG_ENDIAN ? i + 1 : i) & (step - 1)) == 0)
+      unsigned elt = BYTES_BIG_ENDIAN ? nunits - 1 - i : i;
+      if ((i & (step - 1)) == 0)
        desired_val = val;
       else
        desired_val = msb_val;
 
-      if (desired_val != const_vector_elt_as_int (op, i))
+      if (desired_val != const_vector_elt_as_int (op, elt))
        return false;
     }