From: Richard Biener Date: Mon, 11 Jan 2016 16:02:23 +0000 (+0000) Subject: re PR tree-optimization/69173 (ICE (segfault) in vinfo_for_stmt) X-Git-Tag: basepoints/gcc-7~1727 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=62446e6e25e2483e1ec5c3bfb119833fab0dd218;p=thirdparty%2Fgcc.git re PR tree-optimization/69173 (ICE (segfault) in vinfo_for_stmt) 2016-01-11 Richard Biener 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62aaea265252..a256b34d9785 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-01-11 Richard Biener + + 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 PR middle-end/68999 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6366b495bceb..414c17411fc8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-11 Richard Biener + + PR tree-optimization/69173 + * gcc.dg/torture/pr69173.c: New testcase. + 2016-01-11 Kyrylo Tkachov PR rtl-optimization/68796 diff --git a/gcc/testsuite/gcc.dg/torture/pr69173.c b/gcc/testsuite/gcc.dg/torture/pr69173.c new file mode 100644 index 000000000000..f2936ce1e702 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69173.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ + +unsigned a; +unsigned *b; +void fn1() { + char c; + while (b < (unsigned *)fn1) + { + a += b[2] + c; + b++; + } +} diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index a82cf26f71b2..a797f7056de2 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)); + } } }