https://gcc.gnu.org/g:9e3ceed8d50912e271e84389ed80aeea47184e59

commit r15-7299-g9e3ceed8d50912e271e84389ed80aeea47184e59
Author: Richard Biener <rguent...@suse.de>
Date:   Thu Jan 30 14:52:14 2025 +0100

    Do not rely on non-SLP analysis for SLP outer loop vectorization
    
    We end up relying on non-SLP analysis of the inner loop LC PHI to
    set the vectorizationb method for SLP since vectorizable_reduction
    claims responsibility.  The following fixes this.
    
            * tree-vect-loop.cc (vect_analyze_loop_operations): Only
            call vectorizable_lc_phi when not PURE_SLP.
            (vectorizable_reduction): Do not claim having handled
            the inner loop LC PHI for outer loop vectorization.

Diff:
---
 gcc/tree-vect-loop.cc | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index ce674a71e8a0..03426207879f 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -2171,6 +2171,7 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo)
                  if ((STMT_VINFO_DEF_TYPE (stmt_info) == vect_internal_def
                       || (STMT_VINFO_DEF_TYPE (stmt_info)
                           == vect_double_reduction_def))
+                     && ! PURE_SLP_STMT (stmt_info)
                      && !vectorizable_lc_phi (loop_vinfo,
                                               stmt_info, NULL, NULL))
                    return opt_result::failure_at (phi, "unsupported phi\n");
@@ -7770,9 +7771,10 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
        {
          /* For SLP we arrive here for both the inner loop LC PHI and
             the outer loop PHI.  The latter is what we want to analyze
-            the reduction with.  */
+            the reduction with.  The LC PHI is handled by
+            vectorizable_lc_phi.  */
          gcc_assert (slp_node);
-         return true;
+         return gimple_phi_num_args (as_a <gphi *> (stmt_info->stmt)) == 2;
        }
       use_operand_p use_p;
       gimple *use_stmt;

Reply via email to