From 084d390246c2172853f9e12ce04aef23cba79590 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 7 Nov 2019 11:49:09 +0000 Subject: [PATCH] re PR tree-optimization/92405 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1683) 2019-11-07 Richard Biener PR tree-optimization/92405 * tree-vect-loop.c (vectorizable_reduction): Appropriately restrict lane-reducing ops to single stmt chains. From-SVN: r277921 --- gcc/ChangeLog | 6 ++++++ gcc/tree-vect-loop.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f5662dde25..55532cc5236 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-11-07 Richard Biener + + PR tree-optimization/92405 + * tree-vect-loop.c (vectorizable_reduction): Appropriately + restrict lane-reducing ops to single stmt chains. + 2019-11-07 Martin Jambor PR lto/70929 diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 788cc8786ae..dfa087ebb2c 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -5865,6 +5865,18 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node, reduc_chain_length++; } + /* For lane-reducing ops we're reducing the number of reduction PHIs + which means the only use of that may be in the lane-reducing operation. */ + if (lane_reduc_code_p + && reduc_chain_length != 1 + && !only_slp_reduc_chain) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "lane-reducing reduction with extra stmts.\n"); + return false; + } + reduc_def = PHI_RESULT (reduc_def_phi); for (i = 0; i < op_type; i++) { -- 2.30.2