This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Make lto-dump dump symtab callgraph in graphviz format


On 7/1/19 7:32 PM, Giuliano Belinassi wrote:
> Hi, Liška
> 
> I incorporated all your suggestions to the patch, but before sending the
> v2 I want to discuss some errors reported by the style script.
> 
>> === ERROR type #1: blocks of 8 spaces should be replaced with tabs (16
>> error(s)) ===
>> gcc/lto/lto-dump.c:263:22:    "  -list [options]████████   Dump the
>> symbol list.\n"
>> gcc/lto/lto-dump.c:264:18:    "    -demangle████████       Dump the
>> demangled output.\n"
>> gcc/lto/lto-dump.c:265:22:    "    -defined-only████████   Dump only the
>> defined symbols.\n"
>> gcc/lto/lto-dump.c:266:21:    "    -print-value████████    Dump initial
>> values of the variables.\n"
>> gcc/lto/lto-dump.c:267:19:    "    -name-sort████████      Sort the
>> symbols alphabetically.\n"
>> gcc/lto/lto-dump.c:268:19:    "    -size-sort████████      Sort the
>> symbols according to size.\n"
>> gcc/lto/lto-dump.c:269:22:    "    -reverse-sort████████   Dump the
>> symbols in reverse order.\n"
>> gcc/lto/lto-dump.c:270:15:    "  -symbol=████████████████  Dump the
>> details of specific symbol.\n"
>> gcc/lto/lto-dump.c:271:15:    "  -objects████████████████  Dump the
>> details of LTO objects.\n"
>> gcc/lto/lto-dump.c:272:17:    "  -callgraph████████████████Dump the
>> callgraph in graphviz format.\n"
>> gcc/lto/lto-dump.c:273:18:    "  -type-stats████████       Dump
>> statistics of tree types.\n"
>> gcc/lto/lto-dump.c:274:18:    "  -tree-stats████████       Dump
>> statistics of trees.\n"
>> gcc/lto/lto-dump.c:275:20:    "  -gimple-stats████████     Dump
>> statistics of gimple statements.\n"
>> gcc/lto/lto-dump.c:276:18:    "  -dump-body=████████       Dump the
>> specific gimple body.\n"
>> gcc/lto/lto-dump.c:277:19:    "  -dump-level=████████      Deciding the
>> optimization level of body.\n"
>> gcc/lto/lto-dump.c:278:12:    "  -help████████████████     Display the
>> dump tool help.\n";
>>
> Is this correct? I think that replacing these spaces with tabs will do
> bad things in some terminals.

This one is a false positive.

> 
>> === ERROR type #2: there should be exactly one space between function
>> name and parenthesis (1 error(s)) ===
>> gcc/lto/lang.opt:131:11:LTODump Var(flag_dump_callgraph)
> 
> I just followed the pattern in that file. Unless everything there is
> wrong, the style in the patch is correct.

Likewise here.

> 
>>
>> === ERROR type #3: there should be no space before a left square bracket
>> (2 error(s)) ===
>> gcc/lto/lto-dump.c:261:21:    "Usage: lto-dump [OPTION]... SUB_COMMAND
>> [OPTION]...\n\n"
>> gcc/lto/lto-dump.c:263:13:    "  -list [options]           Dump the
>> symbol list.\n"
>>
>> === ERROR type #4: trailing operator (1 error(s)) ===
>> gcc/lto/lto-dump.c:260:18:  const char *msg =
> 
> I think doing it in this way is cleaner than the previous version, where
> there was a printf for each line. Therefore this change is less noisy
> because I just write the string with keeping in mind with what will be
> displayed in the terminal, and then print it.  Of course this is my point
> of view and it is completely subjective.

I agree with yout.

> 
> Any other style error suggested by the script were fixed.

Thanks,
Martin

> 
> On 07/01, Martin Liška wrote:
>> On 7/1/19 2:56 PM, Giuliano Belinassi wrote:
>>> Hi,
>>>
>>> On 07/01, Martin Jambor wrote:
>>>> On Sat, Jun 29 2019, Giuliano Belinassi wrote:
>>>>> This patch makes lto-dump dump the symbol table callgraph in graphviz
>>>>> format.
>>>> -ENOPATCH
>>> Sorry,
>>> I forgot the most important. Here it is.
>>
>> Hello.
>>
>> I like the intention! Please try to use:
>> $ git diff HEAD > /tmp/patch && ~/Programming/gcc/contrib/check_GNU_style.py /tmp/patch
>>
>> which will show you some coding style issues.
>>
>>>
>>>> Martin
>>>>
>>>>> I've not added any test to this because I couldn't find a way to call
>>>>> lto-dump from the testsuite. Also, any feedback with regard to how can
>>>>> I improve this is welcome.
>>>>>
>>>>>     gcc/ChangeLog
>>>>>     2019-06-29  Giuliano Belinassi  <giuliano.belinassi@usp.br>
>>>>>
>>>>>             * cgraph.c (dump_graphviz): New function
>>>>>             * cgraph.h (dump_graphviz): New function
>>>>>             * symtab.c (dump_graphviz): New function
>>>>>             * varpool.c (dump_graphviz): New function
>>>>>
>>>>>     gcc/lto/ChangeLog
>>>>>     2019-06-29  Giuliano Belinassi  <giuliano.belinassi@usp.br>
>>>>>
>>>>>             * lang.opt (flag_dump_callgraph): New flag
>>>>>             * lto-dump.c (dump_symtab_graphviz): New function
>>>>>             * lto-dump.c (dump_tool_help): New option
>>>>>             * lto-dump.c (lto_main): New option
>>> Giuliano
>>>
>>> =======================================
>>>
>>> diff --git gcc/cgraph.c gcc/cgraph.c
>>> index 28019aba434..55f4ee0bdaa 100644
>>>
>>> --- gcc/cgraph.c
>>>
>>> +++ gcc/cgraph.c
>>>
>>> @@ -2204,6 +2204,22 @@
>>>
>>>  cgraph_node::dump (FILE *f)
>>>
>>> }
>>> }
>>> +/* Dump call graph node to file F in graphviz format. */
>>> +
>>> +void
>>> +cgraph_node::dump_graphviz (FILE *f)
>>> +{
>>> + cgraph_edge *edge;
>>> +
>>> + for (edge = callees; edge; edge = edge->next_callee)
>>> + {
>>> + cgraph_node *callee = edge->callee;
>>> +
>>> + fprintf(f, "\t\"%s\" -> \"%s\"\n", name (), callee->name ());
>>> + }
>>> +}
>>> +
>>> +
>>> /* Dump call graph node NODE to stderr. */
>>> DEBUG_FUNCTION void
>>>
>>> =======================================
>>>
>>> diff --git gcc/cgraph.h gcc/cgraph.h
>>> index 18839a4a5ec..181c00a3bd8 100644
>>>
>>> --- gcc/cgraph.h
>>>
>>> +++ gcc/cgraph.h
>>>
>>> @@ -135,6 +135,9 @@
>>>
>>>  public:
>>>
>>> /* Dump symtab node to F. */
>>> void dump (FILE *f);
>>> + /* Dump symtab callgraph in graphviz format*/
>>> + void dump_graphviz (FILE *f);
>>> +
>>> /* Dump symtab node to stderr. */
>>> void DEBUG_FUNCTION debug (void);
>>>
>>> @@ -1106,6 +1109,9 @@
>>>
>>>  public:
>>>
>>> /* Dump call graph node to file F. */
>>> void dump (FILE *f);
>>> + /* Dump call graph node to file F. */
>>> + void dump_graphviz (FILE *f);
>>> +
>>> /* Dump call graph node to stderr. */
>>> void DEBUG_FUNCTION debug (void);
>>>
>>> @@ -1861,6 +1867,9 @@
>>>
>>>  public:
>>>
>>> /* Dump given varpool node to F. */
>>> void dump (FILE *f);
>>> + /* Dump given varpool node in graphviz format to F. */
>>> + void dump_graphviz (FILE *f);
>>> +
>>> /* Dump given varpool node to stderr. */
>>> void DEBUG_FUNCTION debug (void);
>>>
>>> @@ -2279,6 +2288,9 @@
>>>
>>>  public:
>>>
>>> /* Dump symbol table to F. */
>>> void dump (FILE *f);
>>> + /* Dump symbol table to F in graphviz format. */
>>> + void dump_graphviz (FILE *f);
>>> +
>>
>> I would not define it for varpool_node as you don't need it.
>>
>>> /* Dump symbol table to stderr. */
>>> void DEBUG_FUNCTION debug (void);
>>>
>>> =======================================
>>>
>>> diff --git gcc/lto/lang.opt gcc/lto/lang.opt
>>> index 5bacef349e3..c62dd5aac08 100644
>>>
>>> --- gcc/lto/lang.opt
>>>
>>> +++ gcc/lto/lang.opt
>>>
>>> @@ -127,6 +127,9 @@
>>>
>>>  help
>>>
>>> LTODump Var(flag_lto_dump_tool_help)
>>> Dump the dump tool command line options.
>>> +callgraph
>>> +LTODump Var(flag_dump_callgraph)
>>> +Dump the symtab callgraph.
>>> fresolution=
>>> LTO Joined
>>>
>>> =======================================
>>>
>>> diff --git gcc/lto/lto-dump.c gcc/lto/lto-dump.c
>>> index 691d109ff34..bc20120f2d5 100644
>>>
>>> --- gcc/lto/lto-dump.c
>>>
>>> +++ gcc/lto/lto-dump.c
>>>
>>> @@ -197,6 +197,12 @@
>>>
>>>  void dump_list_variables (void)
>>>
>>> e->dump ();
>>> }
>>> +/* Dump symbol table in graphviz format. */
>>> +void dump_symtab_graphviz (void)
>>> +{
>>> + symtab->dump_graphviz (stdout);
>>> +}
>>> +
>>> /* Dump symbol list. */
>>> void dump_list (void)
>>>
>>> @@ -251,26 +257,27 @@
>>>
>>>  void dump_body ()
>>>
>>> /* List of command line options for dumping. */
>>> void dump_tool_help ()
>>> {
>>> - printf ("Usage: lto-dump [OPTION]... SUB_COMMAND [OPTION]...\n\n");
>>> - printf ("LTO dump tool command line options.\n\n");
>>> - printf (" -list [options] Dump the symbol list.\n");
>>> - printf (" -demangle Dump the demangled output.\n");
>>> - printf (" -defined-only Dump only the defined symbols.\n");
>>> - printf (" -print-value Dump initial values of the "
>>> - "variables.\n");
>>> - printf (" -name-sort Sort the symbols alphabetically.\n");
>>> - printf (" -size-sort Sort the symbols according to size.\n");
>>> - printf (" -reverse-sort Dump the symbols in reverse order.\n");
>>> - printf (" -symbol= Dump the details of specific symbol.\n");
>>> - printf (" -objects Dump the details of LTO objects.\n");
>>> - printf (" -type-stats Dump statistics of tree types.\n");
>>> - printf (" -tree-stats Dump statistics of trees.\n");
>>> - printf (" -gimple-stats Dump statistics of gimple "
>>> - "statements.\n");
>>> - printf (" -dump-body= Dump the specific gimple body.\n");
>>> - printf (" -dump-level= Deciding the optimization level "
>>> - "of body.\n");
>>> - printf (" -help Display the dump tool help.\n");
>>> + const char *msg =
>>> + "Usage: lto-dump [OPTION]... SUB_COMMAND [OPTION]...\n\n"
>>> + "LTO dump tool command line options.\n\n"
>>> + " -list [options] Dump the symbol list.\n"
>>> + " -demangle Dump the demangled output.\n"
>>> + " -defined-only Dump only the defined symbols.\n"
>>> + " -print-value Dump initial values of the variables.\n"
>>> + " -name-sort Sort the symbols alphabetically.\n"
>>> + " -size-sort Sort the symbols according to size.\n"
>>> + " -reverse-sort Dump the symbols in reverse order.\n"
>>> + " -symbol= Dump the details of specific symbol.\n"
>>> + " -objects Dump the details of LTO objects.\n"
>>> + " -callgraph Dump the callgraph in graphviz format.\n"
>>> + " -type-stats Dump statistics of tree types.\n"
>>> + " -tree-stats Dump statistics of trees.\n"
>>> + " -gimple-stats Dump statistics of gimple statements.\n"
>>> + " -dump-body= Dump the specific gimple body.\n"
>>> + " -dump-level= Deciding the optimization level of body.\n"
>>> + " -help Display the dump tool help.\n";
>>> +
>>> + fputs(msg, stdout);
>>> return;
>>> }
>>>
>>> @@ -344,4 +351,9 @@
>>>
>>>  lto_main (void)
>>>
>>> dump_body ();
>>> return;
>>> }
>>> + else if (flag_dump_callgraph)
>>> + {
>>> + dump_symtab_graphviz ();
>>> + return;
>>> + }
>>> }
>>>
>>> =======================================
>>>
>>> diff --git gcc/symtab.c gcc/symtab.c
>>> index 905ca05e578..13882b40ad3 100644
>>>
>>> --- gcc/symtab.c
>>>
>>> +++ gcc/symtab.c
>>>
>>> @@ -955,6 +955,15 @@
>>>
>>>  symtab_node::dump (FILE *f)
>>>
>>> vnode->dump (f);
>>> }
>>> +void
>>> +symtab_node::dump_graphviz (FILE *f)
>>> +{
>>> + if (cgraph_node *cnode = dyn_cast <cgraph_node *> (this))
>>> + cnode->dump_graphviz (f);
>>> + else if (varpool_node *vnode = dyn_cast <varpool_node *> (this))
>>> + vnode->dump_graphviz (f);
>>
>> Then this part can be removed.
>>
>>> +}
>>> +
>>> void
>>> symbol_table::dump (FILE *f)
>>> {
>>>
>>> @@ -964,6 +973,16 @@
>>>
>>>  symbol_table::dump (FILE *f)
>>>
>>> node->dump (f);
>>> }
>>> +void
>>> +symbol_table::dump_graphviz (FILE *f)
>>> +{
>>> + symtab_node *node;
>>> + fprintf (f, "digraph symtab {\n");
>>> + FOR_EACH_SYMBOL (node)
>>> + node->dump_graphviz (f);
>>> + fprintf (f, "}\n");
>>> +}
>>> +
>>> DEBUG_FUNCTION void
>>> symbol_table::debug (void)
>>> {
>>>
>>> =======================================
>>>
>>> diff --git gcc/varpool.c gcc/varpool.c
>>> index 8e5a9372656..645236293f5 100644
>>>
>>> --- gcc/varpool.c
>>>
>>> +++ gcc/varpool.c
>>>
>>> @@ -237,6 +237,12 @@
>>>
>>>  varpool_node::dump (FILE *f)
>>>
>>> fprintf (f, "\n");
>>> }
>>> +/* Dump given varpool node to F in graphviz format. */
>>> +void
>>> +varpool_node::dump_graphviz (FILE *f)
>>> +{
>>> + return;
>>> +}
>>
>> Likewise here.
>>
>> Martin
>>
>>> /* Dump given varpool node to stderr. */
>>> void varpool_node::debug (void)
>>>
>>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]