diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-12-17 22:36:21 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-12-17 22:36:21 +0100 |
commit | 14407011d62da724e88ac0cb30390d3f8fda2b9f (patch) | |
tree | df730755811e510ea5686e42c3ad678895eac5cb /gcc | |
parent | 5aac5cb24bdf2c868e1f22d83afaef66e2f00d8d (diff) | |
download | gcc-14407011d62da724e88ac0cb30390d3f8fda2b9f.zip gcc-14407011d62da724e88ac0cb30390d3f8fda2b9f.tar.gz gcc-14407011d62da724e88ac0cb30390d3f8fda2b9f.tar.bz2 |
re PR tree-optimization/59523 (r205856 caused internal compiler error: verify_ssa failed)
PR tree-optimization/59523
* tree-vectorizer.c (fold_loop_vectorized_call): Call update_stmt
on updated stmts.
* gcc.dg/pr59523.c: New test.
From-SVN: r206069
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr59523.c | 17 | ||||
-rw-r--r-- | gcc/tree-vectorizer.c | 7 |
4 files changed, 33 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e798972..58613ee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-12-17 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/59523 + * tree-vectorizer.c (fold_loop_vectorized_call): Call update_stmt + on updated stmts. + 2013-12-17 Aldy Hernandez <aldyh@redhat.com> * ipa-inline.c (gate_ipa_inline): Remove. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d0b796c..29110ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-12-17 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/59523 + * gcc.dg/pr59523.c: New test. + 2013-12-17 Marek Polacek <polacek@redhat.com> * c-c++-common/ubsan/overflow-int128.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr59523.c b/gcc/testsuite/gcc.dg/pr59523.c new file mode 100644 index 0000000..b523eae --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59523.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/59523 */ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-additional-options "-mavx2" { target { i?86-*-* x86_64-*-* } } } */ + +int * +foo (int a, int *b, int *c, int *d) +{ + int i, *r = __builtin_alloca (a * sizeof (int)); + __builtin_memcpy (r, d, a * sizeof (int)); + for (i = 0; i < 64; i++) + c[i] += b[i]; + for (i = 0; i < a; i++) + if (r[i] == 0) + r[i] = 1; + return r; +} diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index 1c411c4..e3e552b 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -369,8 +369,11 @@ fold_loop_vectorized_call (gimple g, tree value) update_call_from_tree (&gsi, value); FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs) - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - SET_USE (use_p, value); + { + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + SET_USE (use_p, value); + update_stmt (use_stmt); + } } /* Function vectorize_loops. |