diff options
author | Yuri Rumyantsev <ysrumyan@gmail.com> | 2016-02-02 09:46:26 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2016-02-02 09:46:26 +0000 |
commit | 2d4dc2233b4a3aef3edeb23d6acaaa8a5327c137 (patch) | |
tree | 406eb48f3246bc92d314640f0b58301e7c2c6257 /gcc/tree-vectorizer.c | |
parent | 65c98fdec722720ae9b2a6765232fe4535e06d4e (diff) | |
download | gcc-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.c | 6 |
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; } |