diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-07-11 22:37:18 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-07-11 22:37:18 +0200 |
commit | c392943c5049a94782fe548003ddd0913b09b292 (patch) | |
tree | 92f4a25c4f547736917787d6ecdf9661e5c2d875 /gcc | |
parent | 76225d2ca77038233f5af5903ab0bd10aa78e611 (diff) | |
download | gcc-c392943c5049a94782fe548003ddd0913b09b292.zip gcc-c392943c5049a94782fe548003ddd0913b09b292.tar.gz gcc-c392943c5049a94782fe548003ddd0913b09b292.tar.bz2 |
re PR tree-optimization/71823 (g++ segfaults with -mfma and -ftree-slp-vectorize)
PR tree-optimization/71823
* tree-vect-stmts.c (vectorizable_operation): Use vect_get_vec_defs
to get vec_oprnds2 from op2.
* gcc.dg/vect/pr71823.c: New test.
From-SVN: r238229
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr71823.c | 14 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 7 |
4 files changed, 27 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0f8fb53..ac3f065 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-07-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/71823 + * tree-vect-stmts.c (vectorizable_operation): Use vect_get_vec_defs + to get vec_oprnds2 from op2. + 2016-07-11 Uros Bizjak <ubizjak@gmail.com> * config/i386/predicates.md (x86_64_immediate_operand) <case CONST>: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b4ddd49..0673701 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/71823 + * gcc.dg/vect/pr71823.c: New test. + 2016-07-11 David Malcolm <dmalcolm@redhat.com> * gcc.dg/plugin/location_overflow_plugin.c (plugin_init): Avoid diff --git a/gcc/testsuite/gcc.dg/vect/pr71823.c b/gcc/testsuite/gcc.dg/vect/pr71823.c new file mode 100644 index 0000000..079cde4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr71823.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/71823 */ +/* { dg-do compile } */ +/* { dg-additional-options "-mfma" { target i?86-*-* x86_64-*-* } } */ + +float a[4], b[4]; + +int +main () +{ + int i; + for (i = 0; i < 4; ++i) + b[i] = __builtin_fma (1024.0f, 1024.0f, a[i]); + return 0; +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index ffa5e98..8c77d7e 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5362,11 +5362,8 @@ vectorizable_operation (gimple *stmt, gimple_stmt_iterator *gsi, vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL, slp_node, -1); if (op_type == ternary_op) - { - vec_oprnds2.create (1); - vec_oprnds2.quick_push (vect_get_vec_def_for_operand (op2, - stmt)); - } + vect_get_vec_defs (op2, NULL_TREE, stmt, &vec_oprnds2, NULL, + slp_node, -1); } else { |