https://gcc.gnu.org/g:086031c058598512d09bf898e4db3735b3e1f22c
commit r15-6811-g086031c058598512d09bf898e4db3735b3e1f22c Author: Alex Coplan <alex.cop...@arm.com> Date: Mon Jun 24 13:54:48 2024 +0100 vect: Also cost gconds for scalar [PR118211] Currently we only cost gconds for the vector loop while we omit costing them when analyzing the scalar loop; this unfairly penalizes the vector loop in the case of loops with early exits. This (together with the previous patches) enables us to vectorize std::find with 64-bit element sizes. gcc/ChangeLog: PR tree-optimization/118211 PR tree-optimization/116126 * tree-vect-loop.cc (vect_compute_single_scalar_iteration_cost): Don't skip over gconds. Diff: --- gcc/tree-vect-loop.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index bb1138bfcfba..edd7d4d87630 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -1688,7 +1688,9 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo) gimple *stmt = gsi_stmt (si); stmt_vec_info stmt_info = loop_vinfo->lookup_stmt (stmt); - if (!is_gimple_assign (stmt) && !is_gimple_call (stmt)) + if (!is_gimple_assign (stmt) + && !is_gimple_call (stmt) + && !is_a<gcond *> (stmt)) continue; /* Skip stmts that are not vectorized inside the loop. */