From: Richard Biener Date: Mon, 18 Jan 2016 09:14:14 +0000 (+0000) Subject: re PR tree-optimization/69170 (ICE (segfault) in find_uses_to_rename_use) X-Git-Tag: basepoints/gcc-7~1549 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=995b6fe0f4b4bedb08fdcb9985fbc59d53bae45d;p=thirdparty%2Fgcc.git re PR tree-optimization/69170 (ICE (segfault) in find_uses_to_rename_use) 2016-01-18 Richard Biener PR tree-optimization/69170 * tree-vect-slp.c (vect_build_slp_tree): Verify we are not building a vector from scalar results of a pattern stmt. * gcc.dg/torture/pr69170.c: New testcase. From-SVN: r232496 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c869492d08ba..1cc9288a91da 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-01-18 Richard Biener + + PR tree-optimization/69170 + * tree-vect-slp.c (vect_build_slp_tree): Verify we are not + building a vector from scalar results of a pattern stmt. + 2016-01-18 Jakub Jelinek * haifa-sched.c (autopref_multipass_init): Work around diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd9a11653d78..901609330693 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-18 Richard Biener + + PR tree-optimization/69170 + * gcc.dg/torture/pr69170.c: New testcase. + 2016-01-17 John David Anglin * gcc.dg/torture/builtin-integral-1.c: Require c99_runtime. diff --git a/gcc/testsuite/gcc.dg/torture/pr69170.c b/gcc/testsuite/gcc.dg/torture/pr69170.c new file mode 100644 index 000000000000..2af0bde7dad0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69170.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ + +typedef long sha2_word_t; +typedef struct { + sha2_word_t length_upper, length_lower; + char buf[]; +} hash_state; +int a; +hash_state b; +void fn1() +{ + a = 0; + for (; a < 8; a++) + b.buf[a + 1024 / 8] = b.length_upper >> (1 - a) * 5; + a = 0; + for (; a < 8; a++) + b.buf[a + 1024 / 8 + 8] = b.length_lower >> (1 - a) * 5; +} diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 5767e19e8847..d5bd92ec0313 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -966,7 +966,12 @@ vect_build_slp_tree (vec_info *vinfo, { /* If we have all children of child built up from scalars then just throw that away and build it up this node from scalars. */ - if (!SLP_TREE_CHILDREN (child).is_empty ()) + if (!SLP_TREE_CHILDREN (child).is_empty () + /* ??? Rejecting patterns this way doesn't work. We'd have to + do extra work to cancel the pattern so the uses see the + scalar version. */ + && !is_pattern_stmt_p + (vinfo_for_stmt (SLP_TREE_SCALAR_STMTS (child)[0]))) { slp_tree grandchild; @@ -1110,7 +1115,12 @@ vect_build_slp_tree (vec_info *vinfo, /* If we have all children of child built up from scalars then just throw that away and build it up this node from scalars. */ - if (!SLP_TREE_CHILDREN (child).is_empty ()) + if (!SLP_TREE_CHILDREN (child).is_empty () + /* ??? Rejecting patterns this way doesn't work. We'd have + to do extra work to cancel the pattern so the uses see the + scalar version. */ + && !is_pattern_stmt_p + (vinfo_for_stmt (SLP_TREE_SCALAR_STMTS (child)[0]))) { unsigned int j; slp_tree grandchild;