From 898e3e95a6acf542baf03be95ce5bf7b3ad04276 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 9 Sep 2024 11:51:24 +0200 Subject: tree-optimization/116647 - wrong classified double reduction The following avoids classifying a double reduction that's not actually a reduction in the outer loop (because its value isn't used outside of the outer loop). This avoids us ICEing on the unexpected stmt/SLP node arrangement. PR tree-optimization/116647 * tree-vect-loop.cc (vect_is_simple_reduction): Add missing check to double reduction detection. * gcc.dg/torture/pr116647.c: New testcase. * gcc.dg/vect/no-scevccp-pr86725-2.c: Adjust expected pattern. * gcc.dg/vect/no-scevccp-pr86725-4.c: Likewise. --- gcc/tree-vect-loop.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gcc/tree-vect-loop.cc') diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index a879a13..65d7ed5 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -4325,7 +4325,8 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, && is_a (phi_use_stmt) && flow_bb_inside_loop_p (loop->inner, gimple_bb (phi_use_stmt)) && (op1 == PHI_ARG_DEF_FROM_EDGE (phi_use_stmt, - loop_latch_edge (loop->inner)))) + loop_latch_edge (loop->inner))) + && lcphis.length () == 1) { if (dump_enabled_p ()) report_vect_op (MSG_NOTE, def_stmt, -- cgit v1.1