aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vectorizer.c
diff options
context:
space:
mode:
authorYuri Rumyantsev <ysrumyan@gmail.com>2016-02-02 09:46:26 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2016-02-02 09:46:26 +0000
commit2d4dc2233b4a3aef3edeb23d6acaaa8a5327c137 (patch)
tree406eb48f3246bc92d314640f0b58301e7c2c6257 /gcc/tree-vectorizer.c
parent65c98fdec722720ae9b2a6765232fe4535e06d4e (diff)
downloadgcc-2d4dc2233b4a3aef3edeb23d6acaaa8a5327c137.zip
gcc-2d4dc2233b4a3aef3edeb23d6acaaa8a5327c137.tar.gz
gcc-2d4dc2233b4a3aef3edeb23d6acaaa8a5327c137.tar.bz2
re PR middle-end/68542 (10% 481.wrf performance regression)
gcc/ 2016-02-02 Yuri Rumyantsev <ysrumyan@gmail.com> PR middle-end/68542 * config/i386/i386.c (ix86_expand_branch): Add support for conditional branch with vector comparison. * config/i386/sse.md (VI48_AVX): New mode iterator. (define_expand "cbranch<mode>4): Add support for conditional branch with vector comparison. * tree-vect-loop.c (optimize_mask_stores): New function. * tree-vect-stmts.c (vectorizable_mask_load_store): Initialize has_mask_store field of vect_info. * tree-vectorizer.c (vectorize_loops): Invoke optimaze_mask_stores for vectorized loops having masked stores after vec_info destroy. * tree-vectorizer.h (loop_vec_info): Add new has_mask_store field and correspondent macros. (optimize_mask_stores): Add prototype. gcc/testsuite 2016-02-02 Yuri Rumyantsev <ysrumyan@gmail.com> PR middle-end/68542 * gcc.dg/vect/vect-mask-store-move-1.c: New test. * gcc.target/i386/avx2-vect-mask-store-move1.c: New test. From-SVN: r233068
Diffstat (limited to 'gcc/tree-vectorizer.c')
-rw-r--r--gcc/tree-vectorizer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index e1c2ced..2b25b45 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -604,12 +604,18 @@ vectorize_loops (void)
for (i = 1; i < vect_loops_num; i++)
{
loop_vec_info loop_vinfo;
+ bool has_mask_store;
loop = get_loop (cfun, i);
if (!loop)
continue;
loop_vinfo = (loop_vec_info) loop->aux;
+ has_mask_store = false;
+ if (loop_vinfo)
+ has_mask_store = LOOP_VINFO_HAS_MASK_STORE (loop_vinfo);
destroy_loop_vec_info (loop_vinfo, true);
+ if (has_mask_store)
+ optimize_mask_stores (loop);
loop->aux = NULL;
}