Use valid_for_const_vector_p instead of CONSTANT_P
authorRichard Sandiford <richard.sandiford@linaro.org>
Thu, 28 Dec 2017 20:40:20 +0000 (20:40 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 28 Dec 2017 20:40:20 +0000 (20:40 +0000)
This patch makes the VEC_SERIES code use valid_for_const_vector_p
instead of CONSTANT_P, to match what we already do for VEC_DUPLICATE.
This showed up as a failure in gcc.c-torture/execute/pr28982b.c for -m32
on x86_64-linux-gnu after later patches.

2017-12-28  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* emit-rtl.c (gen_const_vec_series): Use valid_for_const_vector_p
instead of CONSTANT_P.
(gen_vec_series): Likewise.
* simplify-rtx.c (simplify_binary_operation_1): Likewise.

From-SVN: r256023

gcc/ChangeLog
gcc/emit-rtl.c
gcc/simplify-rtx.c

index b0dabfb3721ab9216cd373c9ee01c9f62137c971..680a63a3c8239c295fbda6fba6d8d89f33e091f3 100644 (file)
@@ -1,3 +1,10 @@
+2017-12-28  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * emit-rtl.c (gen_const_vec_series): Use valid_for_const_vector_p
+       instead of CONSTANT_P.
+       (gen_vec_series): Likewise.
+       * simplify-rtx.c (simplify_binary_operation_1): Likewise.
+
 2017-12-28  Andreas Schwab  <schwab@linux-m68k.org>
 
        * config/m68k/m68k.md (ashrdi3_const1, lshrdi3_const1): Add
index 53693bdfa742935466907ba2dd23118c2e98c3a7..20847015dd72edb94ca73c42d7bd9567a0c245a1 100644 (file)
@@ -5949,7 +5949,8 @@ const_vec_series_p_1 (const_rtx x, rtx *base_out, rtx *step_out)
 rtx
 gen_const_vec_series (machine_mode mode, rtx base, rtx step)
 {
-  gcc_assert (CONSTANT_P (base) && CONSTANT_P (step));
+  gcc_assert (valid_for_const_vector_p (mode, base)
+             && valid_for_const_vector_p (mode, step));
 
   int nunits = GET_MODE_NUNITS (mode);
   rtvec v = rtvec_alloc (nunits);
@@ -5970,7 +5971,8 @@ gen_vec_series (machine_mode mode, rtx base, rtx step)
 {
   if (step == const0_rtx)
     return gen_vec_duplicate (mode, base);
-  if (CONSTANT_P (base) && CONSTANT_P (step))
+  if (valid_for_const_vector_p (mode, base)
+      && valid_for_const_vector_p (mode, step))
     return gen_const_vec_series (mode, base, step);
   return gen_rtx_VEC_SERIES (mode, base, step);
 }
index 6b163f9169960dd09de73bcc780e096487fc1eab..e5cfd3d2bc21ffa673bf7f14278b879b0bd5d442 100644 (file)
@@ -3590,7 +3590,8 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
     case VEC_SERIES:
       if (op1 == CONST0_RTX (GET_MODE_INNER (mode)))
        return gen_vec_duplicate (mode, op0);
-      if (CONSTANT_P (op0) && CONSTANT_P (op1))
+      if (valid_for_const_vector_p (mode, op0)
+         && valid_for_const_vector_p (mode, op1))
        return gen_const_vec_series (mode, op0, op1);
       return 0;