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
This commit is contained in:
Richard Biener 2019-09-25 13:09:25 +00:00 committed by Richard Biener
parent 761e6bb9f7
commit fadb01364d
4 changed files with 34 additions and 0 deletions

View File

@ -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

View File

@ -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 ...

View File

@ -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;
}

View File

@ -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;