diff options
author | Richard Biener <rguenther@suse.de> | 2019-09-25 13:09:25 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-09-25 13:09:25 +0000 |
commit | fadb01364d36a50836201bc9a6a03e525d267967 (patch) | |
tree | be834f8fb07161c86cf9ad94ab02b09a9f0bb390 /gcc | |
parent | 761e6bb9f7d2bd782d93e46baebade2eb1f7d16e (diff) | |
download | gcc-fadb01364d36a50836201bc9a6a03e525d267967.zip gcc-fadb01364d36a50836201bc9a6a03e525d267967.tar.gz gcc-fadb01364d36a50836201bc9a6a03e525d267967.tar.bz2 |
re PR tree-optimization/91896 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1687)
2019-09-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/91896
* tree-vect-loop.c (vectorizable_reduction): The single
def-use cycle optimization cannot apply when there's more
than one pattern stmt involved.
* gcc.dg/torture/pr91896.c: New testcase.
From-SVN: r276123
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr91896.c | 18 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 4 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6450f18..f14a598 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-09-25 Richard Biener <rguenther@suse.de> + + PR tree-optimization/91896 + * tree-vect-loop.c (vectorizable_reduction): The single + def-use cycle optimization cannot apply when there's more + than one pattern stmt involved. + 2019-09-24 Iain Sandoe <iain@sandoe.co.uk> * config/rs6000/rs6000.md (load_macho_picbase_<mode>): New, using diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f948133..bf03a5e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-25 Richard Biener <rguenther@suse.de> + + PR tree-optimization/91896 + * gcc.dg/torture/pr91896.c: New testcase. + 2019-09-25 Martin Liska <mliska@suse.cz> * gcc.target/s390/pr91014.c: Move to ... diff --git a/gcc/testsuite/gcc.dg/torture/pr91896.c b/gcc/testsuite/gcc.dg/torture/pr91896.c new file mode 100644 index 0000000..e728538 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr91896.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-ftree-vectorize" } */ + +unsigned int +zj (unsigned int et) +{ + signed char jr = 0; + + do { + et *= 3; + jr += 2; + } while (jr >= 0); + + if (et == (unsigned int) jr) + et = 0; + + return et; +} diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index bc705d8..ec00912 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6101,6 +6101,8 @@ vectorizable_reduction (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, if (ncopies > 1 && STMT_VINFO_RELEVANT (reduc_stmt_info) <= vect_used_only_live && (use_stmt_info = loop_vinfo->lookup_single_use (phi_result)) + && (!STMT_VINFO_IN_PATTERN_P (use_stmt_info) + || !STMT_VINFO_PATTERN_DEF_SEQ (use_stmt_info)) && vect_stmt_to_vectorize (use_stmt_info) == reduc_stmt_info) single_defuse_cycle = true; @@ -6868,6 +6870,8 @@ vectorizable_reduction (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, if (ncopies > 1 && (STMT_VINFO_RELEVANT (stmt_info) <= vect_used_only_live) && (use_stmt_info = loop_vinfo->lookup_single_use (reduc_phi_result)) + && (!STMT_VINFO_IN_PATTERN_P (use_stmt_info) + || !STMT_VINFO_PATTERN_DEF_SEQ (use_stmt_info)) && vect_stmt_to_vectorize (use_stmt_info) == stmt_info) { single_defuse_cycle = true; |