public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [sched] Dump dependency graph to a dot file
@ 2015-11-05  8:29 Nikolai Bozhenov
  2015-11-05  9:18 ` Kyrill Tkachov
  0 siblings, 1 reply; 4+ messages in thread
From: Nikolai Bozhenov @ 2015-11-05  8:29 UTC (permalink / raw)
  To: gcc-patches; +Cc: vmakarov, law, meissner, bschmidt, jim.wilson

[-- Attachment #1: Type: text/plain, Size: 210 bytes --]

Hi!

The attached patch adds a procedure to dump the scheduler's dependency
graph into a dot file. The patch has been bootstrapped and regtested
on x86_64. Please commit if it is OK for trunk.

Thanks,
Nikolai

[-- Attachment #2: dep-graph.patch --]
[-- Type: text/x-diff, Size: 5661 bytes --]

2015-11-04  Nikolai Bozhenov  <n.bozhenov@samsung.com>

	* sched-int.h (dump_rgn_dependencies_dot): Declare
	* sched-rgn.c (dump_rgn_dependencies_dot): New function
	* print-rtl.h (print_insn): Add prototype

diff --git a/gcc/print-rtl.h b/gcc/print-rtl.h
index eb079af..f601d33 100644
--- a/gcc/print-rtl.h
+++ b/gcc/print-rtl.h
@@ -25,12 +25,14 @@ extern void print_rtl (FILE *, const_rtx);
 #endif
 
 extern void dump_value_slim (FILE *, const_rtx, int);
 extern void dump_insn_slim (FILE *, const rtx_insn *);
 extern void dump_rtl_slim (FILE *, const rtx_insn *, const rtx_insn *,
 			   int, int);
 extern void print_value (pretty_printer *, const_rtx, int);
 extern void print_pattern (pretty_printer *, const_rtx, int);
+extern void print_insn (pretty_printer *pp, const rtx_insn *x, int verbose);
+
 extern void rtl_dump_bb_for_graph (pretty_printer *, basic_block);
 extern const char *str_pattern_slim (const_rtx);
 
 #endif  // GCC_PRINT_RTL_H
diff --git a/gcc/sched-int.h b/gcc/sched-int.h
index 86f5821..4600347 100644
--- a/gcc/sched-int.h
+++ b/gcc/sched-int.h
@@ -1492,16 +1492,19 @@ extern void sched_rgn_local_finish (void);
 extern void sched_rgn_local_free (void);
 extern void extend_regions (void);
 extern void rgn_make_new_region_out_of_new_block (basic_block);
 
 extern void compute_priorities (void);
 extern void increase_insn_priority (rtx_insn *, int);
 extern void debug_rgn_dependencies (int);
 extern void debug_dependencies (rtx_insn *, rtx_insn *);
+extern void dump_rgn_dependencies_dot (FILE *);
+extern void dump_rgn_dependencies_dot (const char *);
+
 extern void free_rgn_deps (void);
 extern int contributes_to_priority (rtx_insn *, rtx_insn *);
 extern void extend_rgns (int *, int *, sbitmap, int *);
 extern void deps_join (struct deps_desc *, struct deps_desc *);
 
 extern void rgn_setup_common_sched_info (void);
 extern void rgn_setup_sched_infos (void);
 
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index eafb3fd..d744d83 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -58,16 +58,18 @@ along with GCC; see the file COPYING3.  If not see
 #include "insn-attr.h"
 #include "except.h"
 #include "params.h"
 #include "cfganal.h"
 #include "sched-int.h"
 #include "sel-sched.h"
 #include "tree-pass.h"
 #include "dbgcnt.h"
+#include "pretty-print.h"
+#include "print-rtl.h"
 
 #ifdef INSN_SCHEDULING
 
 /* Some accessor macros for h_i_d members only used within this file.  */
 #define FED_BY_SPEC_LOAD(INSN) (HID (INSN)->fed_by_spec_load)
 #define IS_LOAD_INSN(INSN) (HID (insn)->is_load_insn)
 
 /* nr_inter/spec counts interblock/speculative motion for the function.  */
@@ -2855,16 +2857,118 @@ void debug_dependencies (rtx_insn *head, rtx_insn *tail)
 		   DEP_NONREG (dep) ? "n" : "",
 		   DEP_MULTIPLE (dep) ? "m" : "");
       }
       fprintf (sched_dump, "\n");
     }
 
   fprintf (sched_dump, "\n");
 }
+
+/* Dump dependency graph for the current region to a file using dot syntax. */
+
+void
+dump_rgn_dependencies_dot (FILE *file)
+{
+  rtx_insn *head, *tail, *con, *pro;
+  sd_iterator_def sd_it;
+  dep_t dep;
+  int bb;
+  pretty_printer pp;
+
+  pp.buffer->stream = file;
+  pp_printf (&pp, "digraph SchedDG {\n");
+
+  for (bb = 0; bb < current_nr_blocks; ++bb)
+    {
+      // begin subgraph (basic block)
+      pp_printf (&pp, "subgraph cluster_block_%d {\n", bb);
+      pp_printf (&pp, "\t" "color=blue;" "\n");
+      pp_printf (&pp, "\t" "style=bold;" "\n");
+      pp_printf (&pp, "\t" "label=\"BB #%d\";\n", BB_TO_BLOCK (bb));
+
+      // setup head and tail (no support for EBBs)
+      gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
+      get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, &tail);
+      tail = NEXT_INSN (tail);
+
+      // dump all insns
+      for (con = head; con != tail; con = NEXT_INSN (con))
+	{
+	  if (!INSN_P (con))
+	    continue;
+
+	  // pretty print the insn
+	  pp_printf (&pp, "\t%d [label=\"{", INSN_UID (con));
+	  pp_write_text_to_stream (&pp);
+	  print_insn (&pp, con, /*verbose=*/false);
+	  pp_write_text_as_dot_label_to_stream (&pp, /*for_record=*/true);
+	  pp_write_text_to_stream (&pp);
+
+	  // dump instruction attributes
+	  pp_printf (&pp, "|{ uid:%d | luid:%d | prio:%d }}\",shape=record]\n",
+		     INSN_UID (con), INSN_LUID (con), INSN_PRIORITY (con));
+
+	  /* dump all deps */
+	  FOR_EACH_DEP (con, SD_LIST_BACK, sd_it, dep)
+	    {
+	      int weight = 0;
+	      const char *color;
+	      pro = DEP_PRO (dep);
+
+	      switch (DEP_TYPE (dep))
+		{
+		case REG_DEP_TRUE:
+		  color = "black";
+		  weight = 1;
+		  break;
+		case REG_DEP_OUTPUT:
+		case REG_DEP_ANTI:
+		  color = "orange";
+		  break;
+		case REG_DEP_CONTROL:
+		  color = "blue";
+		  break;
+		default:
+		  gcc_unreachable ();
+		}
+
+	      pp_printf (&pp, "\t%d -> %d [color=%s",
+			 INSN_UID (pro), INSN_UID (con), color);
+	      if (int cost = dep_cost (dep))
+		pp_printf (&pp, ",label=%d", cost);
+	      pp_printf (&pp, ",weight=%d", weight);
+	      pp_printf (&pp, "];\n");
+	    }
+	}
+      pp_printf (&pp, "}\n");
+    }
+
+  pp_printf (&pp, "}\n");
+  pp_flush (&pp);
+}
+
+/* Dump dependency graph for the current region to a file using dot syntax. */
+
+DEBUG_FUNCTION void
+dump_rgn_dependencies_dot (const char *fname)
+{
+  FILE *fp;
+
+  fp = fopen (fname, "w");
+  if (!fp)
+    {
+      perror ("fopen");
+      return;
+    }
+
+  dump_rgn_dependencies_dot (fp);
+  fclose (fp);
+}
+
 \f
 /* Returns true if all the basic blocks of the current region have
    NOTE_DISABLE_SCHED_OF_BLOCK which means not to schedule that region.  */
 bool
 sched_is_disabled_for_current_region_p (void)
 {
   int bb;
 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [sched] Dump dependency graph to a dot file
  2015-11-05  8:29 [sched] Dump dependency graph to a dot file Nikolai Bozhenov
@ 2015-11-05  9:18 ` Kyrill Tkachov
  2015-11-05 10:26   ` Nikolai Bozhenov
  0 siblings, 1 reply; 4+ messages in thread
From: Kyrill Tkachov @ 2015-11-05  9:18 UTC (permalink / raw)
  To: Nikolai Bozhenov, gcc-patches
  Cc: vmakarov, law, meissner, bschmidt, jim.wilson

Hi Nikolai,

On 05/11/15 08:29, Nikolai Bozhenov wrote:
> Hi!
>
> The attached patch adds a procedure to dump the scheduler's dependency
> graph into a dot file. The patch has been bootstrapped and regtested
> on x86_64. Please commit if it is OK for trunk.
>
> Thanks,
> Nikolai

A couple of style nits.

+      // begin subgraph (basic block)
+      pp_printf (&pp, "subgraph cluster_block_%d {\n", bb);
+      pp_printf (&pp, "\t" "color=blue;" "\n");
+      pp_printf (&pp, "\t" "style=bold;" "\n");
+      pp_printf (&pp, "\t" "label=\"BB #%d\";\n", BB_TO_BLOCK (bb));
+
+      // setup head and tail (no support for EBBs)
+      gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
+      get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, &tail);
+      tail = NEXT_INSN (tail);
+
+      // dump all insns
+      for (con = head; con != tail; con = NEXT_INSN (con))
+	{
+	  if (!INSN_P (con))
+	    continue;
+
+	  // pretty print the insn
+	  pp_printf (&pp, "\t%d [label=\"{", INSN_UID (con));

Please use C-style comments i.e. /**/ instead of //.
Also, throughout the comments leave two empty spaces after a full stop
i.e. /* <text>.  */.

You can use the check_GNU_style.sh script in the contrib/ directory on
your patches to highlight similar issues. For example:
$ ./contrib/check_GNU_style.sh ~/patches/dep-graph.patch

Dot, space, space, end of comment.
83:+/* Dump dependency graph for the current region to a file using dot syntax. */
166:+/* Dump dependency graph for the current region to a file using dot syntax. */

Sentences should end with a dot.  Dot, space, space, end of the comment.
127:+      /* dump all deps */

Cheers,
Kyrill

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [sched] Dump dependency graph to a dot file
  2015-11-05  9:18 ` Kyrill Tkachov
@ 2015-11-05 10:26   ` Nikolai Bozhenov
  2015-11-06 22:05     ` Jeff Law
  0 siblings, 1 reply; 4+ messages in thread
From: Nikolai Bozhenov @ 2015-11-05 10:26 UTC (permalink / raw)
  To: Kyrill Tkachov, gcc-patches; +Cc: vmakarov, law, meissner, bschmidt, jim.wilson

[-- Attachment #1: Type: text/plain, Size: 1903 bytes --]

On 11/05/2015 12:18 PM, Kyrill Tkachov wrote:
> Hi Nikolai,
>
> On 05/11/15 08:29, Nikolai Bozhenov wrote:
>> Hi!
>>
>> The attached patch adds a procedure to dump the scheduler's dependency
>> graph into a dot file. The patch has been bootstrapped and regtested
>> on x86_64. Please commit if it is OK for trunk.
>>
>> Thanks,
>> Nikolai
>
> A couple of style nits.
>
> +      // begin subgraph (basic block)
> +      pp_printf (&pp, "subgraph cluster_block_%d {\n", bb);
> +      pp_printf (&pp, "\t" "color=blue;" "\n");
> +      pp_printf (&pp, "\t" "style=bold;" "\n");
> +      pp_printf (&pp, "\t" "label=\"BB #%d\";\n", BB_TO_BLOCK (bb));
> +
> +      // setup head and tail (no support for EBBs)
> +      gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
> +      get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, 
> &tail);
> +      tail = NEXT_INSN (tail);
> +
> +      // dump all insns
> +      for (con = head; con != tail; con = NEXT_INSN (con))
> +    {
> +      if (!INSN_P (con))
> +        continue;
> +
> +      // pretty print the insn
> +      pp_printf (&pp, "\t%d [label=\"{", INSN_UID (con));
>
> Please use C-style comments i.e. /**/ instead of //.
> Also, throughout the comments leave two empty spaces after a full stop
> i.e. /* <text>.  */.
>
> You can use the check_GNU_style.sh script in the contrib/ directory on
> your patches to highlight similar issues. For example:
> $ ./contrib/check_GNU_style.sh ~/patches/dep-graph.patch
>
> Dot, space, space, end of comment.
> 83:+/* Dump dependency graph for the current region to a file using 
> dot syntax. */
> 166:+/* Dump dependency graph for the current region to a file using 
> dot syntax. */
>
> Sentences should end with a dot.  Dot, space, space, end of the comment.
> 127:+      /* dump all deps */
>
> Cheers,
> Kyrill
>
>
Thanks for your remarks, Kyrill!

I've uploaded an updated patch.

Nikolai

[-- Attachment #2: dep-graph.patch --]
[-- Type: text/x-diff, Size: 5690 bytes --]

2015-11-04  Nikolai Bozhenov  <n.bozhenov@samsung.com>

	* sched-int.h (dump_rgn_dependencies_dot): Declare
	* sched-rgn.c (dump_rgn_dependencies_dot): New function
	* print-rtl.h (print_insn): Add prototype

diff --git a/gcc/print-rtl.h b/gcc/print-rtl.h
index eb079af..f601d33 100644
--- a/gcc/print-rtl.h
+++ b/gcc/print-rtl.h
@@ -25,12 +25,14 @@ extern void print_rtl (FILE *, const_rtx);
 #endif
 
 extern void dump_value_slim (FILE *, const_rtx, int);
 extern void dump_insn_slim (FILE *, const rtx_insn *);
 extern void dump_rtl_slim (FILE *, const rtx_insn *, const rtx_insn *,
 			   int, int);
 extern void print_value (pretty_printer *, const_rtx, int);
 extern void print_pattern (pretty_printer *, const_rtx, int);
+extern void print_insn (pretty_printer *pp, const rtx_insn *x, int verbose);
+
 extern void rtl_dump_bb_for_graph (pretty_printer *, basic_block);
 extern const char *str_pattern_slim (const_rtx);
 
 #endif  // GCC_PRINT_RTL_H
diff --git a/gcc/sched-int.h b/gcc/sched-int.h
index 86f5821..4600347 100644
--- a/gcc/sched-int.h
+++ b/gcc/sched-int.h
@@ -1492,16 +1492,19 @@ extern void sched_rgn_local_finish (void);
 extern void sched_rgn_local_free (void);
 extern void extend_regions (void);
 extern void rgn_make_new_region_out_of_new_block (basic_block);
 
 extern void compute_priorities (void);
 extern void increase_insn_priority (rtx_insn *, int);
 extern void debug_rgn_dependencies (int);
 extern void debug_dependencies (rtx_insn *, rtx_insn *);
+extern void dump_rgn_dependencies_dot (FILE *);
+extern void dump_rgn_dependencies_dot (const char *);
+
 extern void free_rgn_deps (void);
 extern int contributes_to_priority (rtx_insn *, rtx_insn *);
 extern void extend_rgns (int *, int *, sbitmap, int *);
 extern void deps_join (struct deps_desc *, struct deps_desc *);
 
 extern void rgn_setup_common_sched_info (void);
 extern void rgn_setup_sched_infos (void);
 
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index eafb3fd..d744d83 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -58,16 +58,18 @@ along with GCC; see the file COPYING3.  If not see
 #include "insn-attr.h"
 #include "except.h"
 #include "params.h"
 #include "cfganal.h"
 #include "sched-int.h"
 #include "sel-sched.h"
 #include "tree-pass.h"
 #include "dbgcnt.h"
+#include "pretty-print.h"
+#include "print-rtl.h"
 
 #ifdef INSN_SCHEDULING
 
 /* Some accessor macros for h_i_d members only used within this file.  */
 #define FED_BY_SPEC_LOAD(INSN) (HID (INSN)->fed_by_spec_load)
 #define IS_LOAD_INSN(INSN) (HID (insn)->is_load_insn)
 
 /* nr_inter/spec counts interblock/speculative motion for the function.  */
@@ -2855,16 +2857,118 @@ void debug_dependencies (rtx_insn *head, rtx_insn *tail)
 		   DEP_NONREG (dep) ? "n" : "",
 		   DEP_MULTIPLE (dep) ? "m" : "");
       }
       fprintf (sched_dump, "\n");
     }
 
   fprintf (sched_dump, "\n");
 }
+
+/* Dump dependency graph for the current region to a file using dot syntax.  */
+
+void
+dump_rgn_dependencies_dot (FILE *file)
+{
+  rtx_insn *head, *tail, *con, *pro;
+  sd_iterator_def sd_it;
+  dep_t dep;
+  int bb;
+  pretty_printer pp;
+
+  pp.buffer->stream = file;
+  pp_printf (&pp, "digraph SchedDG {\n");
+
+  for (bb = 0; bb < current_nr_blocks; ++bb)
+    {
+      /* Begin subgraph (basic block).  */
+      pp_printf (&pp, "subgraph cluster_block_%d {\n", bb);
+      pp_printf (&pp, "\t" "color=blue;" "\n");
+      pp_printf (&pp, "\t" "style=bold;" "\n");
+      pp_printf (&pp, "\t" "label=\"BB #%d\";\n", BB_TO_BLOCK (bb));
+
+      /* Setup head and tail (no support for EBBs).  */
+      gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
+      get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, &tail);
+      tail = NEXT_INSN (tail);
+
+      /* Dump all insns.  */
+      for (con = head; con != tail; con = NEXT_INSN (con))
+	{
+	  if (!INSN_P (con))
+	    continue;
+
+	  /* Pretty print the insn.  */
+	  pp_printf (&pp, "\t%d [label=\"{", INSN_UID (con));
+	  pp_write_text_to_stream (&pp);
+	  print_insn (&pp, con, /*verbose=*/false);
+	  pp_write_text_as_dot_label_to_stream (&pp, /*for_record=*/true);
+	  pp_write_text_to_stream (&pp);
+
+	  /* Dump instruction attributes.  */
+	  pp_printf (&pp, "|{ uid:%d | luid:%d | prio:%d }}\",shape=record]\n",
+		     INSN_UID (con), INSN_LUID (con), INSN_PRIORITY (con));
+
+	  /* Dump all deps.  */
+	  FOR_EACH_DEP (con, SD_LIST_BACK, sd_it, dep)
+	    {
+	      int weight = 0;
+	      const char *color;
+	      pro = DEP_PRO (dep);
+
+	      switch (DEP_TYPE (dep))
+		{
+		case REG_DEP_TRUE:
+		  color = "black";
+		  weight = 1;
+		  break;
+		case REG_DEP_OUTPUT:
+		case REG_DEP_ANTI:
+		  color = "orange";
+		  break;
+		case REG_DEP_CONTROL:
+		  color = "blue";
+		  break;
+		default:
+		  gcc_unreachable ();
+		}
+
+	      pp_printf (&pp, "\t%d -> %d [color=%s",
+			 INSN_UID (pro), INSN_UID (con), color);
+	      if (int cost = dep_cost (dep))
+		pp_printf (&pp, ",label=%d", cost);
+	      pp_printf (&pp, ",weight=%d", weight);
+	      pp_printf (&pp, "];\n");
+	    }
+	}
+      pp_printf (&pp, "}\n");
+    }
+
+  pp_printf (&pp, "}\n");
+  pp_flush (&pp);
+}
+
+/* Dump dependency graph for the current region to a file using dot syntax.  */
+
+DEBUG_FUNCTION void
+dump_rgn_dependencies_dot (const char *fname)
+{
+  FILE *fp;
+
+  fp = fopen (fname, "w");
+  if (!fp)
+    {
+      perror ("fopen");
+      return;
+    }
+
+  dump_rgn_dependencies_dot (fp);
+  fclose (fp);
+}
+
 \f
 /* Returns true if all the basic blocks of the current region have
    NOTE_DISABLE_SCHED_OF_BLOCK which means not to schedule that region.  */
 bool
 sched_is_disabled_for_current_region_p (void)
 {
   int bb;
 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [sched] Dump dependency graph to a dot file
  2015-11-05 10:26   ` Nikolai Bozhenov
@ 2015-11-06 22:05     ` Jeff Law
  0 siblings, 0 replies; 4+ messages in thread
From: Jeff Law @ 2015-11-06 22:05 UTC (permalink / raw)
  To: Nikolai Bozhenov, Kyrill Tkachov, gcc-patches
  Cc: vmakarov, meissner, bschmidt, jim.wilson

On 11/05/2015 03:26 AM, Nikolai Bozhenov wrote:
> On 11/05/2015 12:18 PM, Kyrill Tkachov wrote:
>> Hi Nikolai,
>>
>> On 05/11/15 08:29, Nikolai Bozhenov wrote:
>>> Hi!
>>>
>>> The attached patch adds a procedure to dump the scheduler's dependency
>>> graph into a dot file. The patch has been bootstrapped and regtested
>>> on x86_64. Please commit if it is OK for trunk.
>>>
>>> Thanks,
>>> Nikolai
>>
>> A couple of style nits.
>>
>> +      // begin subgraph (basic block)
>> +      pp_printf (&pp, "subgraph cluster_block_%d {\n", bb);
>> +      pp_printf (&pp, "\t" "color=blue;" "\n");
>> +      pp_printf (&pp, "\t" "style=bold;" "\n");
>> +      pp_printf (&pp, "\t" "label=\"BB #%d\";\n", BB_TO_BLOCK (bb));
>> +
>> +      // setup head and tail (no support for EBBs)
>> +      gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
>> +      get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head,
>> &tail);
>> +      tail = NEXT_INSN (tail);
>> +
>> +      // dump all insns
>> +      for (con = head; con != tail; con = NEXT_INSN (con))
>> +    {
>> +      if (!INSN_P (con))
>> +        continue;
>> +
>> +      // pretty print the insn
>> +      pp_printf (&pp, "\t%d [label=\"{", INSN_UID (con));
>>
>> Please use C-style comments i.e. /**/ instead of //.
>> Also, throughout the comments leave two empty spaces after a full stop
>> i.e. /* <text>.  */.
>>
>> You can use the check_GNU_style.sh script in the contrib/ directory on
>> your patches to highlight similar issues. For example:
>> $ ./contrib/check_GNU_style.sh ~/patches/dep-graph.patch
>>
>> Dot, space, space, end of comment.
>> 83:+/* Dump dependency graph for the current region to a file using
>> dot syntax. */
>> 166:+/* Dump dependency graph for the current region to a file using
>> dot syntax. */
>>
>> Sentences should end with a dot.  Dot, space, space, end of the comment.
>> 127:+      /* dump all deps */
>>
>> Cheers,
>> Kyrill
>>
>>
> Thanks for your remarks, Kyrill!
>
> I've uploaded an updated patch.
>
> Nikolai
>
> dep-graph.patch
>
>
> 2015-11-04  Nikolai Bozhenov<n.bozhenov@samsung.com>
>
> 	* sched-int.h (dump_rgn_dependencies_dot): Declare
> 	* sched-rgn.c (dump_rgn_dependencies_dot): New function
> 	* print-rtl.h (print_insn): Add prototype
I was briefly worried about using the DOT format here.  There was a time 
when GraphViz was considered by the FSF to be non-free and thus using 
the DOT format was verboten.  That thankfully changed way back in 2005 :-)

With that out of the way, this patch is fine for the trunk.  Please install.

Thanks,
Jeff

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-11-06 22:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-05  8:29 [sched] Dump dependency graph to a dot file Nikolai Bozhenov
2015-11-05  9:18 ` Kyrill Tkachov
2015-11-05 10:26   ` Nikolai Bozhenov
2015-11-06 22:05     ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).