https://gcc.gnu.org/g:3bf2aa834e1270e3167c9559bef9a8ef1f668604

commit r16-2159-g3bf2aa834e1270e3167c9559bef9a8ef1f668604
Author: Richard Biener <rguent...@suse.de>
Date:   Wed Jul 9 15:04:12 2025 +0200

    Remove vect_analyze_loop_operations
    
    This removes the remains of vect_analyze_loop_operations.  All the
    checks it does still on LC PHIs of inner loops in outer loop
    vectorization should be handled by vectorizable_lc_phi.
    
            * tree-vect-loop.cc (vect_active_double_reduction_p): Remove.
            (vect_analyze_loop_operations): Remove.
            (vect_analyze_loop_2): Do not call it.

Diff:
---
 gcc/tree-vect-loop.cc | 137 --------------------------------------------------
 1 file changed, 137 deletions(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 98ac528e3a97..d57d34dfad27 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -1960,133 +1960,6 @@ vect_create_loop_vinfo (class loop *loop, 
vec_info_shared *shared,
 
 
 
-/* Return true if STMT_INFO describes a double reduction phi and if
-   the other phi in the reduction is also relevant for vectorization.
-   This rejects cases such as:
-
-      outer1:
-       x_1 = PHI <x_3(outer2), ...>;
-       ...
-
-      inner:
-       x_2 = ...;
-       ...
-
-      outer2:
-       x_3 = PHI <x_2(inner)>;
-
-   if nothing in x_2 or elsewhere makes x_1 relevant.  */
-
-static bool
-vect_active_double_reduction_p (stmt_vec_info stmt_info)
-{
-  if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_double_reduction_def)
-    return false;
-
-  return STMT_VINFO_RELEVANT_P (STMT_VINFO_REDUC_DEF (stmt_info));
-}
-
-/* Function vect_analyze_loop_operations.
-
-   Scan the loop stmts and make sure they are all vectorizable.  */
-
-static opt_result
-vect_analyze_loop_operations (loop_vec_info loop_vinfo)
-{
-  class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
-  basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo);
-  int nbbs = loop->num_nodes;
-  int i;
-  stmt_vec_info stmt_info;
-
-  DUMP_VECT_SCOPE ("vect_analyze_loop_operations");
-
-  for (i = 0; i < nbbs; i++)
-    {
-      basic_block bb = bbs[i];
-
-      for (gphi_iterator si = gsi_start_phis (bb); !gsi_end_p (si);
-          gsi_next (&si))
-        {
-          gphi *phi = si.phi ();
-
-         stmt_info = loop_vinfo->lookup_stmt (phi);
-          if (dump_enabled_p ())
-           dump_printf_loc (MSG_NOTE, vect_location, "examining phi: %G",
-                            (gimple *) phi);
-         if (virtual_operand_p (gimple_phi_result (phi)))
-           continue;
-
-         /* ???  All of the below unconditional FAILs should be in
-            done earlier after analyzing cycles, possibly when
-            determining stmt relevancy?  */
-
-          /* Inner-loop loop-closed exit phi in outer-loop vectorization
-             (i.e., a phi in the tail of the outer-loop).  */
-          if (! is_loop_header_bb_p (bb))
-            {
-              /* FORNOW: we currently don't support the case that these phis
-                 are not used in the outerloop (unless it is double reduction,
-                 i.e., this phi is vect_reduction_def), cause this case
-                 requires to actually do something here.  */
-              if (STMT_VINFO_LIVE_P (stmt_info)
-                 && !vect_active_double_reduction_p (stmt_info))
-               return opt_result::failure_at (phi,
-                                              "Unsupported loop-closed phi"
-                                              " in outer-loop.\n");
-
-              /* If PHI is used in the outer loop, we check that its operand
-                 is defined in the inner loop.  */
-              if (STMT_VINFO_RELEVANT_P (stmt_info))
-                {
-                  tree phi_op;
-
-                  if (gimple_phi_num_args (phi) != 1)
-                    return opt_result::failure_at (phi, "unsupported phi");
-
-                  phi_op = PHI_ARG_DEF (phi, 0);
-                 stmt_vec_info op_def_info = loop_vinfo->lookup_def (phi_op);
-                 if (!op_def_info)
-                   return opt_result::failure_at (phi, "unsupported phi\n");
-
-                 if (STMT_VINFO_RELEVANT (op_def_info) != vect_used_in_outer
-                     && (STMT_VINFO_RELEVANT (op_def_info)
-                         != vect_used_in_outer_by_reduction))
-                   return opt_result::failure_at (phi, "unsupported phi\n");
-
-                 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))
-                   return opt_result::failure_at (phi, "unsupported phi\n");
-                }
-
-              continue;
-            }
-
-          gcc_assert (stmt_info);
-
-          if ((STMT_VINFO_RELEVANT (stmt_info) == vect_used_in_scope
-               || STMT_VINFO_LIVE_P (stmt_info))
-             && STMT_VINFO_DEF_TYPE (stmt_info) != vect_induction_def
-             && STMT_VINFO_DEF_TYPE (stmt_info) != vect_first_order_recurrence)
-           /* A scalar-dependence cycle that we don't support.  */
-           return opt_result::failure_at (phi,
-                                          "not vectorized:"
-                                          " scalar dependence cycle.\n");
-
-         if (STMT_VINFO_RELEVANT_P (stmt_info)
-             && ! PURE_SLP_STMT (stmt_info))
-           return opt_result::failure_at (phi,
-                                          "not vectorized: relevant phi not "
-                                          "supported: %G",
-                                          static_cast <gimple *> (phi));
-        }
-    } /* bbs */
-
-  return opt_result::success ();
-}
-
 /* Return true if we know that the iteration count is smaller than the
    vectorization factor.  Return false if it isn't, or if we can't be sure
    either way.  */
@@ -2817,16 +2690,6 @@ start_over:
   /* Dissolve SLP-only groups.  */
   vect_dissolve_slp_only_groups (loop_vinfo);
 
-  /* Scan all the remaining operations in the loop that we did not catch
-     during SLP build and make sure we fail.  */
-  ok = vect_analyze_loop_operations (loop_vinfo);
-  if (!ok)
-    {
-      ok = opt_result::failure_at (vect_location,
-                                  "bad operation or unsupported loop bound\n");
-      goto again;
-    }
-
   /* For now, we don't expect to mix both masking and length approaches for one
      loop, disable it if both are recorded.  */
   if (LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo)

Reply via email to