diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2011-04-20 08:23:03 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2011-04-20 08:23:03 +0000 |
commit | 1da0876c9551590b2ff880e14f9510cd6e5bd467 (patch) | |
tree | 201a53d6d89c1c0dfaa08f2124484735059dcf88 /gcc | |
parent | 25583c4f453910e4bf35cc55b692dea60007f673 (diff) | |
download | gcc-1da0876c9551590b2ff880e14f9510cd6e5bd467.zip gcc-1da0876c9551590b2ff880e14f9510cd6e5bd467.tar.gz gcc-1da0876c9551590b2ff880e14f9510cd6e5bd467.tar.bz2 |
tree-vect-stmts.c (vectorizable_store): Only chain one related statement per copy.
gcc/
* tree-vect-stmts.c (vectorizable_store): Only chain one related
statement per copy.
From-SVN: r172759
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 15 |
2 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e9b126b..3474847 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2011-04-20 Richard Sandiford <richard.sandiford@linaro.org> + * tree-vect-stmts.c (vectorizable_store): Only chain one related + statement per copy. + +2011-04-20 Richard Sandiford <richard.sandiford@linaro.org> + * Makefile.in (INTERNAL_FN_DEF, INTERNAL_FN_H): Define. (GIMPLE_H): Include $(INTERNAL_FN_H). (OBJS-common): Add internal-fn.o. diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 0c7ab5a..879153d 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3632,6 +3632,7 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt, NULL_TREE); } + new_stmt = NULL; if (strided_store) { result_chain = VEC_alloc (tree, heap, group_size); @@ -3688,16 +3689,18 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, if (slp) continue; - if (j == 0) - STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt; - else - STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt; - - prev_stmt_info = vinfo_for_stmt (new_stmt); next_stmt = DR_GROUP_NEXT_DR (vinfo_for_stmt (next_stmt)); if (!next_stmt) break; } + if (!slp) + { + if (j == 0) + STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt; + else + STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt; + prev_stmt_info = vinfo_for_stmt (new_stmt); + } } VEC_free (tree, heap, dr_chain); |