aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-11-25 08:59:28 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-11-25 08:59:28 +0000
commit5bcfb22cf6bea2ad30b4d31a14c94bce374c817b (patch)
treed1c582808a2d3fe7f4c7ee95ace262335279faae /gcc
parent758dcf83e3d6db7a7b0d7171f0adf71301a7802d (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/tree-vectorizer.c11
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");