aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-01-11 16:02:23 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-01-11 16:02:23 +0000
commit62446e6e25e2483e1ec5c3bfb119833fab0dd218 (patch)
tree5d7520898bbd7542c9de33d1ab99f3bdea430f87 /gcc/tree-vect-loop.c
parent3a28db463b4d0ce7ee87a85ab2dbcb68eda9ef22 (diff)
downloadgcc-62446e6e25e2483e1ec5c3bfb119833fab0dd218.zip
gcc-62446e6e25e2483e1ec5c3bfb119833fab0dd218.tar.gz
gcc-62446e6e25e2483e1ec5c3bfb119833fab0dd218.tar.bz2
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
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r--gcc/tree-vect-loop.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index a82cf26..a797f70 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -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));
+ }
}
}