https://gcc.gnu.org/g:b0632c06a7f61d3b42170d51aa5b88237a722ae0

commit r13-8725-gb0632c06a7f61d3b42170d51aa5b88237a722ae0
Author: Richard Ball <richard.b...@arm.com>
Date:   Thu Feb 1 17:18:28 2024 +0000

    middle-end: Fix ICE in poly-int.h due to SLP.
    
    Adds a check to ensure that the input vector arguments
    to a function are not variable length. Previously, only the
    output vector of a function was checked.
    
    The ICE in question is within the neon-sve-bridge.c test,
    and is related to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111268
    
    gcc/ChangeLog:
            PR tree-optimization/111268
            * tree-vect-slp.cc (vectorizable_slp_permutation_1):
            Add variable-length check for vector input arguments
            to a function.
    
    (cherry picked from commit 4571b4d413a4ba5f1e2d429a2623180ad1c73c0f)

Diff:
---
 gcc/tree-vect-slp.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 570edf38ca40..bbc05fac65ec 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -8574,7 +8574,8 @@ vectorizable_slp_permutation_1 (vec_info *vinfo, 
gimple_stmt_iterator *gsi,
     {
       /* Calculate every element of every permute mask vector explicitly,
         instead of relying on the pattern described above.  */
-      if (!nunits.is_constant (&npatterns))
+      if (!nunits.is_constant (&npatterns)
+         || !TYPE_VECTOR_SUBPARTS (op_vectype).is_constant ())
        return -1;
       nelts_per_pattern = ncopies = 1;
       if (loop_vec_info linfo = dyn_cast <loop_vec_info> (vinfo))

Reply via email to