Hi All, Here is a patch for 481.wrf preformance regression for avx2 which is sligthly modified mask store optimization. This transformation allows perform unpredication for semi-hammock containing masked stores, other words if we have a loop like for (i=0; i PR middle-end/68542 * config/i386/i386.c (ix86_expand_branch): Implement integral vector comparison with boolean result. * config/i386/sse.md (define_expand "cbranch4): Add define-expand for vector comparion with eq/ne only. * fold-const.c (fold_relational_const): Add handling of vector comparison with boolean result. * tree-cfg.c (verify_gimple_comparison): Add argument CODE, allow comparison of vector operands with boolean result for EQ/NE only. (verify_gimple_assign_binary): Adjust call for verify_gimple_comparison. (verify_gimple_cond): Likewise. * tree-ssa-forwprop.c (combine_cond_expr_cond): Do not perform combining for non-compatible vector types. * tree-vect-loop.c (is_valid_sink): New function. (optimize_mask_stores): Likewise. * 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. * tree-vectorizer.h (loop_vec_info): Add new has_mask_store field and correspondent macros. (optimize_mask_stores): Add prototype. * tree-vrp.c (register_edge_assert_for): Do not handle NAME with vector type. gcc/testsuite/ChangeLog: * gcc.target/i386/avx2-vect-mask-store-move1.c: New test.