Better function header dump
authorDavid Li <davidxl@google.com>
Wed, 1 Jun 2011 17:42:39 +0000 (17:42 +0000)
committerXinliang David Li <davidxl@gcc.gnu.org>
Wed, 1 Jun 2011 17:42:39 +0000 (17:42 +0000)
From-SVN: r174536

gcc/ChangeLog
gcc/final.c
gcc/passes.c
gcc/tree-cfg.c
gcc/tree-pretty-print.c
gcc/tree-pretty-print.h

index 9b969a76bf5667f3ec95044c04eb56790bf28b7e..363c655a73a105f75f3c32954ab4a7e2254d2665 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-01  David Li  <davidxl@google.com>
+
+       * tree-pretty-print.c (dump_function_header): New function.
+       * final.c (rest_of_clean_state): Use header dumper.
+       * tree-cfg.c (gimple_dump_cfg): Use header dumper.
+       * passes.c (pass_init_dump_file): Use header dumper.
+
 2011-06-01  Jakub Jelinek  <jakub@redhat.com>
 
        * dwarf2out.c (compare_loc_descriptor, scompare_loc_descriptor,
index 7e1ae902477ef312a5447b3d89c63ef3420d6e45..af8047c1608f2b3802bef51c08f80337da623d65 100644 (file)
@@ -83,6 +83,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "ggc.h"
 #include "cfgloop.h"
 #include "params.h"
+#include "tree-pretty-print.h"
 
 #ifdef XCOFF_DEBUGGING_INFO
 #include "xcoffout.h"          /* Needed for external data
@@ -4360,20 +4361,7 @@ rest_of_clean_state (void)
        }
       else
        {
-         const char *aname;
-         struct cgraph_node *node = cgraph_get_node (current_function_decl);
-
-         aname = (IDENTIFIER_POINTER
-                  (DECL_ASSEMBLER_NAME (current_function_decl)));
-         fprintf (final_output, "\n;; Function (%s) %s\n\n", aname,
-            node->frequency == NODE_FREQUENCY_HOT
-            ? " (hot)"
-            : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
-            ? " (unlikely executed)"
-            : node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
-            ? " (executed once)"
-            : "");
-
+         dump_function_header (final_output, current_function_decl);
          flag_dump_noaddr = flag_dump_unnumbered = 1;
          if (flag_compare_debug_opt || flag_compare_debug)
            dump_flags |= TDF_NOUID;
index 4cfc4d37ee6783f5eb7e1b1ae3f615f1c4734bc7..d5189ca17d2b6faa424c5b021ea9dd687e937023 100644 (file)
@@ -74,6 +74,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "lto-streamer.h"
 #include "plugin.h"
 #include "ipa-utils.h"
+#include "tree-pretty-print.h"
 
 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
 #include "dwarf2out.h"
@@ -1637,21 +1638,7 @@ pass_init_dump_file (struct opt_pass *pass)
       dump_file_name = get_dump_file_name (pass->static_pass_number);
       dump_file = dump_begin (pass->static_pass_number, &dump_flags);
       if (dump_file && current_function_decl)
-       {
-         const char *dname, *aname;
-         struct cgraph_node *node = cgraph_get_node (current_function_decl);
-         dname = lang_hooks.decl_printable_name (current_function_decl, 2);
-         aname = (IDENTIFIER_POINTER
-                  (DECL_ASSEMBLER_NAME (current_function_decl)));
-         fprintf (dump_file, "\n;; Function %s (%s)%s\n\n", dname, aname,
-            node->frequency == NODE_FREQUENCY_HOT
-            ? " (hot)"
-            : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
-            ? " (unlikely executed)"
-            : node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
-            ? " (executed once)"
-            : "");
-       }
+        dump_function_header (dump_file, current_function_decl);
       return initializing_dump;
     }
   else
index f6b171024bd6d86ed5cd4697d083f2c31646ed9e..5ba659c2b0b93654c0dcd1460a2a6a38661e1380 100644 (file)
@@ -2052,11 +2052,7 @@ gimple_dump_cfg (FILE *file, int flags)
 {
   if (flags & TDF_DETAILS)
     {
-      const char *funcname
-       = lang_hooks.decl_printable_name (current_function_decl, 2);
-
-      fputc ('\n', file);
-      fprintf (file, ";; Function %s\n\n", funcname);
+      dump_function_header (file, current_function_decl);
       fprintf (file, ";; \n%d basic blocks, %d edges, last basic block %d.\n\n",
               n_basic_blocks, n_edges, last_basic_block);
 
@@ -7525,4 +7521,3 @@ struct gimple_opt_pass pass_warn_unused_result =
     0,                                 /* todo_flags_finish */
   }
 };
-
index f2f5a220018285a558dc823c2a820314faa53cb5..f49881972256da5139d1104e036dae785051844e 100644 (file)
@@ -3013,3 +3013,39 @@ pp_base_tree_identifier (pretty_printer *pp, tree id)
     pp_append_text (pp, IDENTIFIER_POINTER (id),
                    IDENTIFIER_POINTER (id) + IDENTIFIER_LENGTH (id));
 }
+
+/* A helper function that is used to dump function information before the
+   function dump.  */
+
+void
+dump_function_header (FILE *dump_file, tree fdecl)
+{
+  const char *dname, *aname;
+  struct cgraph_node *node = cgraph_get_node (fdecl);
+  struct function *fun = DECL_STRUCT_FUNCTION (fdecl);
+
+  dname = lang_hooks.decl_printable_name (fdecl, 2);
+
+  if (DECL_ASSEMBLER_NAME_SET_P (fdecl))
+    aname = (IDENTIFIER_POINTER
+             (DECL_ASSEMBLER_NAME (fdecl)));
+  else
+    aname = "<unset-asm-name>";
+
+  if (node)
+    {
+      fprintf (dump_file, "\n;; Function %s (%s, funcdef_no=%d, decl_uid = %d, cgraph_uid=%d)",
+               dname, aname, fun->funcdef_no, DECL_UID(fdecl), node->uid);
+      fprintf (dump_file, "%s\n\n",
+               node->frequency == NODE_FREQUENCY_HOT
+               ? " (hot)"
+               : node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED
+               ? " (unlikely executed)"
+               : node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
+               ? " (executed once)"
+               : "");
+    }
+  else
+    fprintf (dump_file, "\n;; Function %s (%s, funcdef_no=%d, decl_uid = %d)",
+             dname, aname, fun->funcdef_no, DECL_UID(fdecl));
+}
index 8346dc4e48fc312a3662d5c947d04531cb7c47df..60758789f15b78c03c0597597d18bab23f23b382 100644 (file)
@@ -50,6 +50,7 @@ extern void debug_generic_expr (tree);
 extern void debug_generic_stmt (tree);
 extern void debug_tree_chain (tree);
 extern void percent_K_format (text_info *);
+extern void dump_function_header (FILE *, tree);
 
 /* In toplev.c  */
 extern bool default_tree_printer (pretty_printer *, text_info *, const char *,