re PR tree-optimization/78396 (gcc.dg/vect/bb-slp-cond-1.c FAILs after fix for PR77848)
authorRichard Biener <rguenther@suse.de>
Fri, 25 Nov 2016 08:59:28 +0000 (08:59 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 25 Nov 2016 08:59:28 +0000 (08:59 +0000)
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

gcc/ChangeLog
gcc/tree-vectorizer.c

index fefba90eab6c68c393f94ada579d63d8049f4446..a0db22e199a7578741823cd58ed658562724bf60 100644 (file)
@@ -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>
index b3906643b8f6506b8fad6b5b014e02b4a0476fb0..7538c6cac715bc107942c4b6f7dd73e7b2ef5b5d 100644 (file)
@@ -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");