improve SLP vect dumping
authorRichard Biener <rguenther@suse.de>
Mon, 7 Sep 2020 12:26:46 +0000 (14:26 +0200)
committerRichard Biener <rguenther@suse.de>
Mon, 7 Sep 2020 12:29:39 +0000 (14:29 +0200)
This adds additional dumping helping in particular basic-block
vectorization SLP dump reading plus showing what we actually
generate code from.

2020-09-07  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_analyze_slp_instance): Dump
stmts we start SLP analysis from, failure and splitting.
(vect_schedule_slp): Dump SLP graph entry and root stmt
we are about to emit code for.

gcc/tree-vect-slp.c

index c89ed04f4793e5083f91ef7313c1dd08581eccf1..dcc80d559177aa8b32dd66f94a640277a4c3c1ea 100644 (file)
@@ -2202,6 +2202,15 @@ vect_analyze_slp_instance (vec_info *vinfo,
        scalar_stmts.safe_push (next_info);
     }
 
+  if (dump_enabled_p ())
+    {
+      dump_printf_loc (MSG_NOTE, vect_location,
+                      "Starting SLP discovery for\n");
+      for (i = 0; i < scalar_stmts.length (); ++i)
+       dump_printf_loc (MSG_NOTE, vect_location,
+                        "  %G", scalar_stmts[i]->stmt);
+    }
+
   /* Build the tree for the SLP instance.  */
   bool *matches = XALLOCAVEC (bool, group_size);
   unsigned npermutes = 0;
@@ -2232,6 +2241,10 @@ vect_analyze_slp_instance (vec_info *vinfo,
              return false;
            }
          /* Fatal mismatch.  */
+         if (dump_enabled_p ())
+           dump_printf_loc (MSG_NOTE, vect_location,
+                            "SLP discovery succeeded but node needs "
+                            "splitting\n");
          matches[0] = true;
          matches[group_size / const_max_nunits * const_max_nunits] = false;
          vect_free_slp_tree (node, false);
@@ -2374,6 +2387,9 @@ vect_analyze_slp_instance (vec_info *vinfo,
          gcc_assert ((const_nunits & (const_nunits - 1)) == 0);
          unsigned group1_size = i & ~(const_nunits - 1);
 
+         if (dump_enabled_p ())
+           dump_printf_loc (MSG_NOTE, vect_location,
+                            "Splitting SLP group at stmt %u\n", i);
          stmt_vec_info rest = vect_split_slp_store_group (stmt_info,
                                                           group1_size);
          bool res = vect_analyze_slp_instance (vinfo, bst_map, stmt_info,
@@ -2395,6 +2411,9 @@ vect_analyze_slp_instance (vec_info *vinfo,
         (some) of the remainder.  FORNOW ignore this possibility.  */
     }
 
+  /* Failed to SLP.  */
+  if (dump_enabled_p ())
+    dump_printf_loc (MSG_NOTE, vect_location, "SLP discovery failed\n");
   return false;
 }
 
@@ -4662,6 +4681,16 @@ vect_schedule_slp (vec_info *vinfo)
   FOR_EACH_VEC_ELT (slp_instances, i, instance)
     {
       slp_tree node = SLP_INSTANCE_TREE (instance);
+      if (dump_enabled_p ())
+       {
+         dump_printf_loc (MSG_NOTE, vect_location,
+                          "Vectorizing SLP tree:\n");
+         if (SLP_INSTANCE_ROOT_STMT (instance))
+           dump_printf_loc (MSG_NOTE, vect_location, "Root stmt: %G",
+                        SLP_INSTANCE_ROOT_STMT (instance)->stmt);
+         vect_print_slp_graph (MSG_NOTE, vect_location,
+                               SLP_INSTANCE_TREE (instance));
+       }
       /* Schedule the tree of INSTANCE.  */
       vect_schedule_slp_instance (vinfo, node, instance);