re PR tree-optimization/92405 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect...
authorRichard Biener <rguenther@suse.de>
Thu, 7 Nov 2019 11:49:09 +0000 (11:49 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 7 Nov 2019 11:49:09 +0000 (11:49 +0000)
2019-11-07  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92405
* tree-vect-loop.c (vectorizable_reduction): Appropriately
restrict lane-reducing ops to single stmt chains.

From-SVN: r277921

gcc/ChangeLog
gcc/tree-vect-loop.c

index 4f5662d..55532cc 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-07  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/92405
+       * tree-vect-loop.c (vectorizable_reduction): Appropriately
+       restrict lane-reducing ops to single stmt chains.
+
 2019-11-07  Martin Jambor  <mjambor@suse.cz>
 
        PR lto/70929
index 788cc87..dfa087e 100644 (file)
@@ -5865,6 +5865,18 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
       reduc_chain_length++;
     }
 
+  /* For lane-reducing ops we're reducing the number of reduction PHIs
+     which means the only use of that may be in the lane-reducing operation.  */
+  if (lane_reduc_code_p
+      && reduc_chain_length != 1
+      && !only_slp_reduc_chain)
+    {
+      if (dump_enabled_p ())
+       dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                        "lane-reducing reduction with extra stmts.\n");
+      return false;
+    }
+
   reduc_def = PHI_RESULT (reduc_def_phi);
   for (i = 0; i < op_type; i++)
     {