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 | |
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')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-vectorizer.c | 11 |
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fefba90..a0db22e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +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. + 2016-11-25 Richard Sandiford <richard.sandiford@arm.com> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> 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"); |