sparc.c (sparc_expand_vector_init): Only accept literal constants in CONST_VECTORs.
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 16 Oct 2016 19:36:47 +0000 (19:36 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 16 Oct 2016 19:36:47 +0000 (19:36 +0000)
* config/sparc/sparc.c (sparc_expand_vector_init): Only accept literal
constants in CONST_VECTORs.

From-SVN: r241218

gcc/ChangeLog
gcc/config/sparc/sparc.c

index e616910bb0077c94658def78f5f5b44a3749de63..e4b462c683a22b97145acb1c0cedbca225fb02f0 100644 (file)
@@ -1,3 +1,8 @@
+2016-10-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/sparc/sparc.c (sparc_expand_vector_init): Only accept literal
+       constants in CONST_VECTORs.
+
 2016-10-15  Eric Botcazou  <ebotcazou@adacore.com>
 
        * config/sparc/sparc.c (sparc_expand_vec_perm_bmask): Use a scratch
index f737061b92cb3dff062fce12af254547c1083c7f..74435a51ac51a031390392f93b8f0e446df692ce 100644 (file)
@@ -12366,14 +12366,13 @@ sparc_expand_vector_init (rtx target, rtx vals)
   const machine_mode inner_mode = GET_MODE_INNER (mode);
   const int n_elts = GET_MODE_NUNITS (mode);
   int i, n_var = 0;
-  bool all_same;
+  bool all_same = true;
   rtx mem;
 
-  all_same = true;
   for (i = 0; i < n_elts; i++)
     {
       rtx x = XVECEXP (vals, 0, i);
-      if (!CONSTANT_P (x))
+      if (!(CONST_SCALAR_INT_P (x) || CONST_DOUBLE_P (x) || CONST_FIXED_P (x)))
        n_var++;
 
       if (i > 0 && !rtx_equal_p (x, XVECEXP (vals, 0, 0)))