cgraph.c (cgraph_node_name): New function.
authorJan Hubicka <jh@suse.cz>
Wed, 9 Jul 2003 01:20:24 +0000 (03:20 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 9 Jul 2003 01:20:24 +0000 (01:20 +0000)
* cgraph.c (cgraph_node_name): New function.
(dump_cgraph): Use it.
* cgraph.h (cgraph_dump_file): Declare.
(cgraph_node_name): Declare.
* cgraphunit.c: Include timevar.h
(cgraph_finalize_compilation_unit): Use timevar; reorganize dumps.
(cgraph_optimize_function): Use TV_INTEGRATION.
(cgraph_mark_local_functions): reorganize dumps.
(cgraph_mark_functions_to_inline_once): Likewise.
(cgraph_optimize): Likewise; use timevar.
* timevar.def (TV_CGRAPH, TV_CGRAPHOPT): New.
* toplev.c (dump_file_index): Add DFI_cgraph.
(dump_file_info): Likewise.
(cgraph_dump_file): New global variable.
(do_compile): Open and close cgraph dump.
* invoke.texi (-d): Document new flag; renumber.

From-SVN: r69120

gcc/ChangeLog
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphunit.c
gcc/doc/invoke.texi
gcc/timevar.def
gcc/toplev.c

index 733ff95fea9b9a997128b87ac61b30f814a77793..ba3cca46746b6f5202462cef91267722f3d8ddd0 100644 (file)
@@ -1,3 +1,22 @@
+Wed Jul  9 03:00:10 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       * cgraph.c (cgraph_node_name): New function.
+       (dump_cgraph): Use it.
+       * cgraph.h (cgraph_dump_file): Declare.
+       (cgraph_node_name): Declare.
+       * cgraphunit.c: Include timevar.h
+       (cgraph_finalize_compilation_unit): Use timevar; reorganize dumps.
+       (cgraph_optimize_function): Use TV_INTEGRATION.
+       (cgraph_mark_local_functions): reorganize dumps.
+       (cgraph_mark_functions_to_inline_once): Likewise.
+       (cgraph_optimize): Likewise; use timevar.
+       * timevar.def (TV_CGRAPH, TV_CGRAPHOPT): New.
+       * toplev.c (dump_file_index): Add DFI_cgraph.
+       (dump_file_info): Likewise.
+       (cgraph_dump_file): New global variable.
+       (do_compile): Open and close cgraph dump.
+       * invoke.texi (-d): Document new flag; renumber.
+
 2003-07-08  Roger Sayle  <roger@eyesopen.com>
 
        PR c/11370
index 36d9814e3653e85f75e7d33493fe34bf02f07014..7bc065b79d32215aaddc95c7a97274cf79f8402b 100644 (file)
@@ -316,6 +316,13 @@ cgraph_rtl_info (decl)
   return &node->rtl;
 }
 
+/* Return name of the node used in debug output.  */
+const char *
+cgraph_node_name (node)
+     struct cgraph_node *node;
+{
+  return (*lang_hooks.decl_printable_name) (node->decl, 2);
+}
 
 /* Dump the callgraph.  */
 
@@ -329,10 +336,9 @@ dump_cgraph (f)
   for (node = cgraph_nodes; node; node = node->next)
     {
       struct cgraph_edge *edge;
-      fprintf (f, "%s", IDENTIFIER_POINTER (DECL_NAME (node->decl)));
+      fprintf (f, "%s", cgraph_node_name (node));
       if (node->origin)
-       fprintf (f, " nested in: %s",
-                IDENTIFIER_POINTER (DECL_NAME (node->origin->decl)));
+       fprintf (f, " nested in: %s", cgraph_node_name (node->origin));
       if (node->needed)
        fprintf (f, " needed");
       else if (node->reachable)
@@ -342,13 +348,11 @@ dump_cgraph (f)
 
       fprintf (f, "\n  called by :");
       for (edge = node->callers; edge; edge = edge->next_caller)
-       fprintf (f, "%s ",
-                IDENTIFIER_POINTER (DECL_NAME (edge->caller->decl)));
+       fprintf (f, "%s ", cgraph_node_name (edge->caller));
 
       fprintf (f, "\n  calls: ");
       for (edge = node->callees; edge; edge = edge->next_callee)
-       fprintf (f, "%s ",
-                IDENTIFIER_POINTER (DECL_NAME (edge->callee->decl)));
+       fprintf (f, "%s ", cgraph_node_name (edge->callee));
       fprintf (f, "\n");
     }
 }
index dbd012fecce60d2db393c438d8a6216086750412..65bda0717ccb94182c26c92e214562a4f2ced06f 100644 (file)
@@ -126,6 +126,7 @@ extern GTY(()) struct cgraph_node *cgraph_nodes;
 extern GTY(()) int cgraph_n_nodes;
 extern bool cgraph_global_info_ready;
 extern GTY(()) struct cgraph_node *cgraph_nodes_queue;
+extern FILE *cgraph_dump_file;
 
 extern GTY(()) int cgraph_varpool_n_nodes;
 extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes_queue;
@@ -142,6 +143,7 @@ bool cgraph_calls_p                 PARAMS ((tree, tree));
 struct cgraph_local_info *cgraph_local_info PARAMS ((tree));
 struct cgraph_global_info *cgraph_global_info PARAMS ((tree));
 struct cgraph_rtl_info *cgraph_rtl_info PARAMS ((tree));
+const char * cgraph_node_name PARAMS ((struct cgraph_node *));
 
 struct cgraph_varpool_node *cgraph_varpool_node (tree decl);
 struct cgraph_varpool_node *cgraph_varpool_node_for_identifier (tree id);
index a904eb544eaf598d7ffc18cceee669a92e267dd0..ad504dd08e5fc9720ad65a25f533f6ac0bed693f 100644 (file)
@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "target.h"
 #include "cgraph.h"
 #include "diagnostic.h"
+#include "timevar.h"
 
 static void cgraph_expand_functions PARAMS ((void));
 static void cgraph_mark_functions_to_output PARAMS ((void));
@@ -140,12 +141,14 @@ cgraph_finalize_compilation_unit ()
 
   cgraph_varpool_assemble_pending_decls ();
 
-  if (!quiet_flag)
+  timevar_push (TV_CGRAPH);
+  if (cgraph_dump_file)
     {
-      fprintf (stderr, "\n\nInitial entry points:");
+      fprintf (cgraph_dump_file, "\nInitial entry points:");
       for (node = cgraph_nodes; node; node = node->next)
        if (node->needed && DECL_SAVED_TREE (node->decl))
-         announce_function (node->decl);
+         fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
+      fprintf (cgraph_dump_file, "\n");
     }
 
   /* Propagate reachability flag and lower representation of all reachable
@@ -198,16 +201,17 @@ cgraph_finalize_compilation_unit ()
     }
   /* Collect entry points to the unit.  */
 
-  if (!quiet_flag)
+  if (cgraph_dump_file)
     {
-      fprintf (stderr, "\n\nUnit entry points:");
+      fprintf (cgraph_dump_file, "\nUnit entry points:");
       for (node = cgraph_nodes; node; node = node->next)
        if (node->needed && DECL_SAVED_TREE (node->decl))
-         announce_function (node->decl);
+         fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
+      fprintf (cgraph_dump_file, "\n");
     }
 
-  if (!quiet_flag)
-    fprintf (stderr, "\n\nReclaiming functions:");
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file, "\nReclaiming functions:");
 
   for (node = cgraph_nodes; node; node = node->next)
     {
@@ -216,10 +220,14 @@ cgraph_finalize_compilation_unit ()
       if (!node->reachable && DECL_SAVED_TREE (decl))
        {
          cgraph_remove_node (node);
-         announce_function (decl);
+         if (cgraph_dump_file)
+           fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
        }
     }
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file, "\n");
   ggc_collect ();
+  timevar_pop (TV_CGRAPH);
 }
 
 /* Figure out what functions we want to assemble.  */
@@ -256,6 +264,7 @@ cgraph_optimize_function (node)
 {
   tree decl = node->decl;
 
+  timevar_push (TV_INTEGRATION);
   if (flag_inline_trees)
     optimize_inline_calls (decl);
   if (node->nested)
@@ -263,6 +272,7 @@ cgraph_optimize_function (node)
       for (node = node->nested; node; node = node->next_nested)
        cgraph_optimize_function (node);
     }
+  timevar_pop (TV_INTEGRATION);
 }
 
 /* Expand function specified by NODE.  */
@@ -385,8 +395,8 @@ cgraph_mark_local_functions ()
 {
   struct cgraph_node *node;
 
-  if (!quiet_flag)
-    fprintf (stderr, "\n\nMarking local functions:");
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file, "Marking local functions:");
 
   /* Figure out functions we want to assemble.  */
   for (node = cgraph_nodes; node; node = node->next)
@@ -395,9 +405,11 @@ cgraph_mark_local_functions ()
                           && DECL_SAVED_TREE (node->decl)
                           && !DECL_COMDAT (node->decl)
                           && !TREE_PUBLIC (node->decl));
-      if (node->local.local)
-       announce_function (node->decl);
+      if (cgraph_dump_file && node->local.local)
+       fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
     }
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file, "\n");
 }
 
 /* Decide what function should be inlined because they are invoked once
@@ -408,8 +420,8 @@ cgraph_mark_functions_to_inline_once ()
 {
   struct cgraph_node *node, *node1;
 
-  if (!quiet_flag)
-    fprintf (stderr, "\n\nMarking functions to inline once:");
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file, "\n\nMarking functions to inline once:");
 
   /* Now look for function called only once and mark them to inline.
      From this point number of calls to given function won't grow.  */
@@ -431,10 +443,13 @@ cgraph_mark_functions_to_inline_once ()
          if (ok)
            {
              node->global.inline_once = true;
-             announce_function (node->decl);
+             if (cgraph_dump_file)
+               fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
            }
        }
     }
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file, "\n");
 }
 
 
@@ -446,11 +461,23 @@ cgraph_optimize ()
   struct cgraph_node *node;
   bool changed = true;
 
+  timevar_push (TV_CGRAPHOPT);
+  if (cgraph_dump_file)
+    {
+      fprintf (cgraph_dump_file, "Initial callgraph:");
+      dump_cgraph (cgraph_dump_file);
+    }
   cgraph_mark_local_functions ();
 
   cgraph_mark_functions_to_inline_once ();
 
   cgraph_global_info_ready = true;
+  if (cgraph_dump_file)
+    {
+      fprintf (cgraph_dump_file, "Optimized callgraph:");
+      dump_cgraph (cgraph_dump_file);
+    }
+  timevar_pop (TV_CGRAPHOPT);
   if (!quiet_flag)
     fprintf (stderr, "\n\nAssembling functions:");
 
@@ -485,4 +512,9 @@ cgraph_optimize ()
            }
        }
     }
+  if (cgraph_dump_file)
+    {
+      fprintf (cgraph_dump_file, "Final callgraph:");
+      dump_cgraph (cgraph_dump_file);
+    }
 }
index ade4e1f6b5ecaaf3d9c6997e8f3e7180b2bd0342..2155e74418b57e3e65b164c68030731e07c36946 100644 (file)
@@ -3118,115 +3118,118 @@ meanings:
 Annotate the assembler output with miscellaneous debugging information.
 @item b
 @opindex db
-Dump after computing branch probabilities, to @file{@var{file}.15.bp}.
+Dump after computing branch probabilities, to @file{@var{file}.16.bp}.
 @item B
 @opindex dB
-Dump after block reordering, to @file{@var{file}.31.bbro}.
+Dump after block reordering, to @file{@var{file}.32.bbro}.
 @item c
 @opindex dc
-Dump after instruction combination, to the file @file{@var{file}.21.combine}.
+Dump after instruction combination, to the file @file{@var{file}.22.combine}.
 @item C
 @opindex dC
-Dump after the first if conversion, to the file @file{@var{file}.16.ce1}.
-Also dump after the second if conversion, to the file @file{@var{file}.22.ce2}.
+Dump after the first if conversion, to the file @file{@var{file}.17.ce1}.
+Also dump after the second if conversion, to the file @file{@var{file}.23.ce2}.
 @item d
 @opindex dd
-Dump after branch target load optimization, to to @file{@var{file}.33.btl}.
-Also dump after delayed branch scheduling, to @file{@var{file}.36.dbr}.
+Dump after branch target load optimization, to to @file{@var{file}.34.btl}.
+Also dump after delayed branch scheduling, to @file{@var{file}.37.dbr}.
 @item D
 @opindex dD
 Dump all macro definitions, at the end of preprocessing, in addition to
 normal output.
 @item e
 @opindex de
-Dump after SSA optimizations, to @file{@var{file}.04.ssa} and
-@file{@var{file}.07.ussa}.
+Dump after SSA optimizations, to @file{@var{file}.05.ssa} and
+@file{@var{file}.010.ussa}.
 @item E
 @opindex dE
-Dump after the second if conversion, to @file{@var{file}.32.ce3}.
+Dump after the second if conversion, to @file{@var{file}.33.ce3}.
 @item f
 @opindex df
-Dump after control and data flow analysis, to @file{@var{file}.14.cfg}.
-Also dump after life analysis, to @file{@var{file}.20.life}.
+Dump after control and data flow analysis, to @file{@var{file}.15.cfg}.
+Also dump after life analysis, to @file{@var{file}.21.life}.
 @item F
 @opindex dF
-Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.10.addressof}.
+Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.11.addressof}.
 @item g
 @opindex dg
-Dump after global register allocation, to @file{@var{file}.26.greg}.
+Dump after global register allocation, to @file{@var{file}.27.greg}.
 @item G
 @opindex dG
-Dump after GCSE, to @file{@var{file}.11.gcse}.
+Dump after GCSE, to @file{@var{file}.12.gcse}.
 Also dump after jump bypassing and control flow optimizations, to
-@file{@var{file}.13.bypass}.
+@file{@var{file}.14.bypass}.
 @item h
 @opindex dh
-Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
+Dump after finalization of EH handling code, to @file{@var{file}.03.eh}.
 @item i
 @opindex di
-Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
+Dump after sibling call optimizations, to @file{@var{file}.02.sibling}.
 @item j
 @opindex dj
-Dump after the first jump optimization, to @file{@var{file}.03.jump}.
+Dump after the first jump optimization, to @file{@var{file}.04.jump}.
 @item k
 @opindex dk
-Dump after conversion from registers to stack, to @file{@var{file}.35.stack}.
+Dump after conversion from registers to stack, to @file{@var{file}.36.stack}.
 @item l
 @opindex dl
-Dump after local register allocation, to @file{@var{file}.25.lreg}.
+Dump after local register allocation, to @file{@var{file}.26.lreg}.
 @item L
 @opindex dL
-Dump after loop optimization passes, to @file{@var{file}.12.loop} and
-@file{@var{file}.18.loop2}.
+Dump after loop optimization passes, to @file{@var{file}.13.loop} and
+@file{@var{file}.19.loop2}.
 @item M
 @opindex dM
 Dump after performing the machine dependent reorganization pass, to
-@file{@var{file}.36.mach}.
+@file{@var{file}.37.mach}.
 @item n
 @opindex dn
-Dump after register renumbering, to @file{@var{file}.30.rnreg}.
+Dump after register renumbering, to @file{@var{file}.31.rnreg}.
 @item N
 @opindex dN
-Dump after the register move pass, to @file{@var{file}.23.regmove}.
+Dump after the register move pass, to @file{@var{file}.24.regmove}.
 @item o
 @opindex do
-Dump after post-reload optimizations, to @file{@var{file}.27.postreload}.
+Dump after post-reload optimizations, to @file{@var{file}.28.postreload}.
 @item r
 @opindex dr
-Dump after RTL generation, to @file{@var{file}.00.rtl}.
+Dump after RTL generation, to @file{@var{file}.01.rtl}.
 @item R
 @opindex dR
-Dump after the second scheduling pass, to @file{@var{file}.34.sched2}.
+Dump after the second scheduling pass, to @file{@var{file}.35.sched2}.
 @item s
 @opindex ds
 Dump after CSE (including the jump optimization that sometimes follows
-CSE), to @file{@var{file}.09.cse}.
+CSE), to @file{@var{file}.019.cse}.
 @item S
 @opindex dS
-Dump after the first scheduling pass, to @file{@var{file}.24.sched}.
+Dump after the first scheduling pass, to @file{@var{file}.25.sched}.
 @item t
 @opindex dt
 Dump after the second CSE pass (including the jump optimization that
-sometimes follows CSE), to @file{@var{file}.19.cse2}.
+sometimes follows CSE), to @file{@var{file}.20.cse2}.
 @item T
 @opindex dT
-Dump after running tracer, to @file{@var{file}.17.tracer}.
+Dump after running tracer, to @file{@var{file}.18.tracer}.
 @item u
 @opindex du
-Dump after null pointer elimination pass to @file{@var{file}.08.null}.
-@item w
+Dump after null pointer elimination pass to @file{@var{file}.018.null}.
+@item U
+@opindex dU
+Dump callgraph and unit-at-a-time optimization @file{@var{file}.00.unit}.
+@litem w
 @opindex dw
-Dump after the second flow pass, to @file{@var{file}.28.flow2}.
+Dump after the second flow pass, to @file{@var{file}.29.flow2}.
 @item W
 @opindex dW
 Dump after SSA conditional constant propagation, to
-@file{@var{file}.05.ssaccp}.
+@file{@var{file}.06.ssaccp}.
 @item X
 @opindex dX
-Dump after SSA dead code elimination, to @file{@var{file}.06.ssadce}.
+Dump after SSA dead code elimination, to @file{@var{file}.07.ssadce}.
 @item z
 @opindex dz
-Dump after the peephole pass, to @file{@var{file}.29.peephole2}.
+Dump after the peephole pass, to @file{@var{file}.30.peephole2}.
 @item a
 @opindex da
 Produce all the dumps listed above.
@@ -3249,7 +3252,7 @@ Also turns on @option{-dp} annotation.
 @item v
 @opindex dv
 For each of the other indicated dump files (except for
-@file{@var{file}.00.rtl}), dump a representation of the control flow graph
+@file{@var{file}.01.rtl}), dump a representation of the control flow graph
 suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
 @item x
 @opindex dx
index f8a32f63a8fb11eccd74773c673c8615c63cf83e..22d3097cf6a7906ee25e76b28d14a27644850c18 100644 (file)
@@ -39,6 +39,8 @@ DEFTIMEVAR (TV_GC                    , "garbage collection")
 /* Time spent generating dump files.  */
 DEFTIMEVAR (TV_DUMP                  , "dump files")
 
+DEFTIMEVAR (TV_CGRAPH                , "callgraph construction")
+DEFTIMEVAR (TV_CGRAPHOPT             , "callgraph optimization")
 /* Time spent by constructing CFG.  */
 DEFTIMEVAR (TV_CFG                   , "cfg construction")
 /* Time spent by cleaning up CFG.  */
index b7bbe8aecbcbe1ede831f38911907e9fcd327e84..84f61b7763602255c41c4e99da36a26a1eee4492 100644 (file)
@@ -247,6 +247,7 @@ struct dump_file_info
 
 enum dump_file_index
 {
+  DFI_cgraph,
   DFI_rtl,
   DFI_sibling,
   DFI_eh,
@@ -294,11 +295,12 @@ enum dump_file_index
    Remaining -d letters:
 
        "            m   q         "
-       "         JK   O Q   UV  YZ"
+       "         JK   O Q    V  YZ"
 */
 
 static struct dump_file_info dump_file[DFI_MAX] =
 {
+  { "cgraph",  'U', 0, 0, 0 },
   { "rtl",     'r', 0, 0, 0 },
   { "sibling",  'i', 0, 0, 0 },
   { "eh",      'h', 0, 0, 0 },
@@ -1567,6 +1569,7 @@ static const lang_independent_options W_options[] =
 FILE *asm_out_file;
 FILE *aux_info_file;
 FILE *rtl_dump_file = NULL;
+FILE *cgraph_dump_file = NULL;
 
 /* Set up a default flag_random_seed and local_tick, unless the user
    already specified one.  */
@@ -4944,10 +4947,23 @@ do_compile (void)
       if (!no_backend)
        backend_init ();
 
+      if (flag_unit_at_a_time)
+       {
+          open_dump_file (DFI_cgraph, NULL);
+         cgraph_dump_file = rtl_dump_file;
+         rtl_dump_file = NULL;
+       }
       /* Language-dependent initialization.  Returns true on success.  */
       if (lang_dependent_init (main_input_filename))
        compile_file ();
 
+      if (flag_unit_at_a_time)
+       {
+         rtl_dump_file = cgraph_dump_file;
+         cgraph_dump_file = NULL;
+          close_dump_file (DFI_cgraph, NULL, NULL_RTX);
+       }
+
       finalize ();
     }