re PR tree-optimization/69173 (ICE (segfault) in vinfo_for_stmt)

2016-01-11  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/69173
	* tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns): Only
	fixup the cycle if all stmts are in a pattern.

	* gcc.dg/torture/pr69173.c: New testcase.

From-SVN: r232230
This commit is contained in:
Richard Biener 2016-01-11 16:02:23 +00:00 committed by Richard Biener
parent 3a28db463b
commit 62446e6e25
4 changed files with 38 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2016-01-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/69173
* tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns): Only
fixup the cycle if all stmts are in a pattern.
2016-01-11 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/68999

View File

@ -1,3 +1,8 @@
2016-01-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/69173
* gcc.dg/torture/pr69173.c: New testcase.
2016-01-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR rtl-optimization/68796

View File

@ -0,0 +1,12 @@
/* { dg-do compile } */
unsigned a;
unsigned *b;
void fn1() {
char c;
while (b < (unsigned *)fn1)
{
a += b[2] + c;
b++;
}
}

View File

@ -985,9 +985,21 @@ vect_fixup_scalar_cycles_with_patterns (loop_vec_info loop_vinfo)
FOR_EACH_VEC_ELT (LOOP_VINFO_REDUCTION_CHAINS (loop_vinfo), i, first)
if (STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (first)))
{
vect_fixup_reduc_chain (first);
LOOP_VINFO_REDUCTION_CHAINS (loop_vinfo)[i]
= STMT_VINFO_RELATED_STMT (vinfo_for_stmt (first));
gimple *next = GROUP_NEXT_ELEMENT (vinfo_for_stmt (first));
while (next)
{
if (! STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (next)))
break;
next = GROUP_NEXT_ELEMENT (vinfo_for_stmt (next));
}
/* If not all stmt in the chain are patterns try to handle
the chain without patterns. */
if (! next)
{
vect_fixup_reduc_chain (first);
LOOP_VINFO_REDUCTION_CHAINS (loop_vinfo)[i]
= STMT_VINFO_RELATED_STMT (vinfo_for_stmt (first));
}
}
}