diff options
author | Richard Biener <rguenther@suse.de> | 2019-10-24 12:11:27 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-10-24 12:11:27 +0000 |
commit | e227594789d909fbad56f6036910938678738f92 (patch) | |
tree | fc40e6db2f5f4aa160621e6bd05391f349b18ec3 /gcc | |
parent | ee80f0c6ba50ebf0300fb0cfe1079a1321295749 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr92205.c | 13 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 10 |
4 files changed, 31 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4873330..d09b72d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5a1cd91..2742e10 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 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. diff --git a/gcc/testsuite/gcc.dg/vect/pr92205.c b/gcc/testsuite/gcc.dg/vect/pr92205.c new file mode 100644 index 0000000..ea06660 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr92205.c @@ -0,0 +1,13 @@ +/* { 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 } } } } } */ 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); |