aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-24 12:11:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-24 12:11:27 +0000
commite227594789d909fbad56f6036910938678738f92 (patch)
treefc40e6db2f5f4aa160621e6bd05391f349b18ec3 /gcc/tree-vect-loop.c
parentee80f0c6ba50ebf0300fb0cfe1079a1321295749 (diff)
downloadgcc-e227594789d909fbad56f6036910938678738f92.zip
gcc-e227594789d909fbad56f6036910938678738f92.tar.gz
gcc-e227594789d909fbad56f6036910938678738f92.tar.bz2
re PR tree-optimization/92205 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1688 since r277322)
2019-10-24 Richard Biener <rguenther@suse.de> PR tree-optimization/92205 * tree-vect-loop.c (vectorizable_reduction): Restrict search for alternate vectype_in to lane-reducing patterns we support. * gcc.dg/vect/pr92205.c: New testcase. From-SVN: r277375
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r--gcc/tree-vect-loop.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index b66f211..9c5ce47 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -5697,6 +5697,8 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
gassign *stmt = as_a <gassign *> (stmt_info->stmt);
enum tree_code code = gimple_assign_rhs_code (stmt);
+ bool lane_reduc_code_p
+ = (code == DOT_PROD_EXPR || code == WIDEN_SUM_EXPR || code == SAD_EXPR);
int op_type = TREE_CODE_LENGTH (code);
scalar_dest = gimple_assign_lhs (stmt);
@@ -5749,8 +5751,10 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
return false;
/* To properly compute ncopies we are interested in the widest
- input type in case we're looking at a widening accumulation. */
- if (tem
+ non-reduction input type in case we're looking at a widening
+ accumulation that we later handle in vect_transform_reduction. */
+ if (lane_reduc_code_p
+ && tem
&& (!vectype_in
|| (GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (vectype_in)))
< GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (tem))))))
@@ -6233,8 +6237,6 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
&& vect_stmt_to_vectorize (use_stmt_info) == stmt_info)
single_defuse_cycle = true;
- bool lane_reduc_code_p
- = (code == DOT_PROD_EXPR || code == WIDEN_SUM_EXPR || code == SAD_EXPR);
if (single_defuse_cycle || lane_reduc_code_p)
{
gcc_assert (code != COND_EXPR);