diff options
author | Richard Biener <rguenther@suse.de> | 2016-11-25 08:59:28 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-11-25 08:59:28 +0000 |
commit | 5bcfb22cf6bea2ad30b4d31a14c94bce374c817b (patch) | |
tree | d1c582808a2d3fe7f4c7ee95ace262335279faae /gcc/tree-vectorizer.c | |
parent | 758dcf83e3d6db7a7b0d7171f0adf71301a7802d (diff) | |
download | gcc-5bcfb22cf6bea2ad30b4d31a14c94bce374c817b.zip gcc-5bcfb22cf6bea2ad30b4d31a14c94bce374c817b.tar.gz gcc-5bcfb22cf6bea2ad30b4d31a14c94bce374c817b.tar.bz2 |
re PR tree-optimization/78396 (gcc.dg/vect/bb-slp-cond-1.c FAILs after fix for PR77848)
2016-11-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/78396
* tree-vectorizer.c (vectorize_loops): When the if-converted
body contains masked loads or stores do not attempt to
basic-block-vectorize it.
From-SVN: r242865
Diffstat (limited to 'gcc/tree-vectorizer.c')
-rw-r--r-- | gcc/tree-vectorizer.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index b390664..7538c6c 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -570,14 +570,23 @@ vectorize_epilogue: && ! loop->inner) { basic_block bb = loop->header; + bool has_mask_load_store = false; for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple *stmt = gsi_stmt (gsi); + if (is_gimple_call (stmt) + && gimple_call_internal_p (stmt) + && (gimple_call_internal_fn (stmt) == IFN_MASK_LOAD + || gimple_call_internal_fn (stmt) == IFN_MASK_STORE)) + { + has_mask_load_store = true; + break; + } gimple_set_uid (stmt, -1); gimple_set_visited (stmt, false); } - if (vect_slp_bb (bb)) + if (! has_mask_load_store && vect_slp_bb (bb)) { dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location, "basic block vectorized\n"); |