Commit e2275947 by Richard Biener Committed by Richard Biener

re PR tree-optimization/92205 (ICE in vect_get_vec_def_for_stmt_copy, at…

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
parent ee80f0c6
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.
2019-10-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/92203
* treee-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt):
Skip eliminating conversion stmts inserted by insertion.
2019-10-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/92205
* gcc.dg/vect/pr92205.c: New testcase.
2019-10-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/92203
* gcc.dg/torture/pr92203.c: New testcase.
......
/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
int b(int n, unsigned char *a)
{
int d = 0;
a = __builtin_assume_aligned (a, __BIGGEST_ALIGNMENT__);
for (int c = 0; c < n; ++c)
d |= a[c];
return d;
}
/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { vect_unpack && { ! vect_no_bitwise } } } } } */
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment