tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail swapping if we actually...
authorRichard Biener <rguenther@suse.de>
Fri, 25 Oct 2019 12:25:52 +0000 (12:25 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 25 Oct 2019 12:25:52 +0000 (12:25 +0000)
2019-10-25  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail
swapping if we actually have to modify the IL on a shared stmt.
(vect_build_slp_tree_2): Never fail swapping on shared stmts
because we no longer modify the IL.

From-SVN: r277446

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

index 3601030bca8d05ae11995d697d17c1d18a9c4392..8762756208e8ae41328d1eb3c2c4b42d082a25b8 100644 (file)
@@ -1,3 +1,10 @@
+2019-10-25  Richard Biener  <rguenther@suse.de>
+
+       * tree-vect-slp.c (vect_get_and_check_slp_defs): Only fail
+       swapping if we actually have to modify the IL on a shared stmt.
+       (vect_build_slp_tree_2): Never fail swapping on shared stmts
+       because we no longer modify the IL.
+
 2019-10-25  Martin Liska  <mliska@suse.cz>
 
        * tree.c (dump_tree_statistics): Use sorted index 'j' and not 'i'.
index 3db08fac4003ab49ebc82aad0c2ccccca01a60e3..f3675955fcbefa7c6f126255b548e49d97af5f35 100644 (file)
@@ -537,19 +537,19 @@ again:
   /* Swap operands.  */
   if (swapped)
     {
-      /* If there are already uses of this stmt in a SLP instance then
-         we've committed to the operand order and can't swap it.  */
-      if (STMT_VINFO_NUM_SLP_USES (stmt_info) != 0)
-       {
-         if (dump_enabled_p ())
-           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
-                            "Build SLP failed: cannot swap operands of "
-                            "shared stmt %G", stmt_info->stmt);
-         return -1;
-       }
-
       if (first_op_cond)
        {
+         /* If there are already uses of this stmt in a SLP instance then
+            we've committed to the operand order and can't swap it.  */
+         if (STMT_VINFO_NUM_SLP_USES (stmt_info) != 0)
+           {
+             if (dump_enabled_p ())
+               dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                                "Build SLP failed: cannot swap operands of "
+                                "shared stmt %G", stmt_info->stmt);
+             return -1;
+           }
+
          /* To get rid of this swapping we have to move the stmt code
             to the SLP tree as well (and gather it here per stmt).  */
          gassign *stmt = as_a <gassign *> (stmt_info->stmt);
@@ -1413,28 +1413,6 @@ vect_build_slp_tree_2 (vec_info *vinfo,
                      swap_not_matching = false;
                      break;
                    }
-                 /* Verify if we can safely swap or if we committed to a
-                    specific operand order already.
-                    ???  Instead of modifying GIMPLE stmts here we could
-                    record whether we want to swap operands in the SLP
-                    node and temporarily do that when processing it
-                    (or wrap operand accessors in a helper).  */
-                 else if (swap[j] != 0
-                          || STMT_VINFO_NUM_SLP_USES (stmt_info))
-                   {
-                     if (!swap_not_matching)
-                       {
-                         if (dump_enabled_p ())
-                           dump_printf_loc (MSG_MISSED_OPTIMIZATION,
-                                            vect_location,
-                                            "Build SLP failed: cannot swap "
-                                            "operands of shared stmt %G",
-                                            stmts[j]->stmt);
-                         goto fail;
-                       }
-                     swap_not_matching = false;
-                     break;
-                   }
                }
            }
          while (j != group_size);