From cf5b2be2a4b13c3fb806033840581cd02080375c Mon Sep 17 00:00:00 2001 From: Cong Hou Date: Mon, 3 Feb 2014 13:15:56 -0500 Subject: [PATCH] re PR tree-optimization/60000 (GCC trunk build failure caused by the vectorizer) 2014-02-03 Cong Hou PR tree-optimization/60000 * tree-vect-loop.c (vect_transform_loop): Set pattern_def_seq to NULL if the vectorized statement is a store. A store statement can only appear at the end of pattern statements. 2014-02-03 Cong Hou PR tree-optimization/60000 * g++.dg/vect/pr60000.cc: New test. From-SVN: r207433 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/vect/pr60000.cc | 13 +++++++++++++ gcc/tree-vect-loop.c | 9 +++++---- 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/vect/pr60000.cc diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5938f54df1e..f3ebc0cb543 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-02-03 Cong Hou + + PR tree-optimization/60000 + * tree-vect-loop.c (vect_transform_loop): Set pattern_def_seq to NULL + if the vectorized statement is a store. A store statement can only + appear at the end of pattern statements. + 2014-02-03 H.J. Lu * config/i386/i386.c (flag_opts): Add -mlong-double-128. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d87b06e62d1..d896017e5d4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-03 Cong Hou + + PR tree-optimization/60000 + * g++.dg/vect/pr60000.cc: New test. + 2014-02-03 H.J. Lu * gcc.target/i386/long-double-64-1.c: Verify __multf3 isn't used. diff --git a/gcc/testsuite/g++.dg/vect/pr60000.cc b/gcc/testsuite/g++.dg/vect/pr60000.cc new file mode 100644 index 00000000000..fe39d6ae9a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr60000.cc @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-tree-vrp" } */ + +void foo (bool* a, int* b) +{ + for (int i = 0; i < 1000; ++i) + { + a[i] = i % 2; + b[i] = i % 3; + } +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 2bb9fbdb2f1..eb7ecb60065 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6054,7 +6054,6 @@ vect_transform_loop (loop_vec_info loop_vinfo) the chain. */ gsi_next (&si); vect_remove_stores (GROUP_FIRST_ELEMENT (stmt_info)); - continue; } else { @@ -6064,11 +6063,13 @@ vect_transform_loop (loop_vec_info loop_vinfo) unlink_stmt_vdef (store); gsi_remove (&si, true); release_defs (store); - continue; } - } - if (!transform_pattern_stmt && gsi_end_p (pattern_def_si)) + /* Stores can only appear at the end of pattern statements. */ + gcc_assert (!transform_pattern_stmt); + pattern_def_seq = NULL; + } + else if (!transform_pattern_stmt && gsi_end_p (pattern_def_si)) { pattern_def_seq = NULL; gsi_next (&si); -- 2.30.2