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] genmatch: isolate reporting into a function


On Mon, Sep 3, 2018 at 4:19 PM Martin Liška <mliska@suse.cz> wrote:
>
> On 09/03/2018 03:31 PM, Richard Biener wrote:
> > On Mon, Sep 3, 2018 at 2:09 PM Martin Liška <mliska@suse.cz> wrote:
> >>
> >> On 09/03/2018 10:19 AM, Richard Biener wrote:
> >>> On Mon, Sep 3, 2018 at 9:56 AM Martin Liška <mliska@suse.cz> wrote:
> >>>>
> >>>> Hi.
> >>>>
> >>>> This is small improvement for {gimple,generic}-match.c files.
> >>>> The code path that reports application of a pattern is now guarded
> >>>> with __builtin_expect. And reporting function lives in gimple.c.
> >>>>
> >>>> For gimple-match.o, difference is:
> >>>>
> >>>> bloaty /tmp/after.o -- /tmp/before.o
> >>>>      VM SIZE                           FILE SIZE
> >>>>  ++++++++++++++ GROWING             ++++++++++++++
> >>>>   [ = ]       0 .rela.debug_loc     +58.5Ki  +0.5%
> >>>>   +0.7% +7.70Ki .text               +7.70Ki  +0.7%
> >>>>   [ = ]       0 .debug_info         +3.53Ki  +0.6%
> >>>>   [ = ]       0 .rela.debug_ranges  +2.02Ki  +0.0%
> >>>>   [ = ]       0 .debug_loc          +1.86Ki  +0.7%
> >>>>   +0.7%    +448 .eh_frame              +448  +0.7%
> >>>>   [ = ]       0 .rela.eh_frame         +192  +0.7%
> >>>>   [ = ]       0 .rela.debug_line        +48  +0.4%
> >>>>   [ = ]       0 .debug_str              +26  +0.0%
> >>>>   +6.9%      +9 .rodata.str1.1           +9  +6.9%
> >>>>
> >>>>  -------------- SHRINKING           --------------
> >>>>  -97.5% -24.8Ki .rodata.str1.8      -24.8Ki -97.5%
> >>>>   [ = ]       0 .symtab             -14.7Ki -26.1%
> >>>>   [ = ]       0 .strtab             -3.57Ki  -2.2%
> >>>>   [ = ]       0 .rela.debug_info    -2.81Ki  -0.0%
> >>>>   [ = ]       0 .debug_line         -2.14Ki  -0.6%
> >>>>   [ = ]       0 .rela.text             -816  -0.1%
> >>>>   [ = ]       0 .rela.text.unlikely    -288  -0.1%
> >>>>   -0.1%    -131 .text.unlikely         -131  -0.1%
> >>>>   [ = ]       0 [Unmapped]              -23 -14.0%
> >>>>   [ = ]       0 .debug_abbrev            -2  -0.1%
> >>>>
> >>>>   -1.2% -16.8Ki TOTAL               +25.1Ki  +0.1%
> >>>>
> >>>> I'm testing the patch.
> >>>> Thoughts?
> >>>
> >>> Looks good in principle but why have the function in gimple.c
> >>> rather than in gimple-match-head.c where it could be static?
> >>> Do we still end up inlining it even though it is guarded with
> >>> __builtin_expect?
> >>
> >> Done that transformation:
> >>
> >> #include "gimple-match-head.c"
> >> static void report_match_pattern (const char *match_file, unsigned int match_file_line, const char *generated_file, unsigned int generate_file_line)
> >> {
> >> fprintf (dump_file, "Applying pattern %s:%d, %s:%d\n",match_file, match_file_line, generated_file, generate_file_line);
> >> }
> >>
> >> Yes, I can confirm it's inlined now.
> >
> > Hmm, but that was the point of the exercise?  Not inlining it?  Or was
> > the point to have
> > the __builtin_expect()?
>
> The point was __builtin_expect and I thought I can also save some space.
>
> >
> >> Ready to install after proper testing?
> >
> > Just occured to me you need a copy of that in generic-match-head.c.
> >
> > But then, why not just add the __builtin_expect()...
>
> Yes, let's add that. And it's questionable whether to split the string in:
>
>                         gimple_seq *lseq = seq;
> -                       if (dump_file && (dump_flags & TDF_FOLDING)) fprintf (dump_file, "Applying pattern match.pd:4858, %s:%d\n", __FILE__, __LINE__);
> +                       if (__builtin_expect (dump_file && (dump_flags & TDF_FOLDING), 0)) fprintf (dump_file, "Applying pattern %s:%d, %s:%d\n", "match.pd", 4858, __FILE__, __LINE__);
>                         res_op->set_op (CFN_FNMA, type, 3);

I guess it makes sense to split it, so the patch is OK.

Richard.

> That does:
>
> bloaty /tmp/after.o -- /tmp/before.o
>      VM SIZE                          FILE SIZE
>  ++++++++++++++ GROWING            ++++++++++++++
>   [ = ]       0 .rela.text         +22.7Ki  +3.5%
>   +1.6% +17.8Ki .text              +17.8Ki  +1.6%
>   [ = ]       0 .rela.debug_ranges +3.89Ki  +0.0%
>   [ = ]       0 .debug_info        +3.08Ki  +0.5%
>   +1.8% +1.09Ki .eh_frame          +1.09Ki  +1.8%
>   [ = ]       0 .debug_loc         +1.01Ki  +0.4%
>   [ = ]       0 .rela.eh_frame        +480  +1.9%
>   +0.1%    +195 .text.unlikely        +195  +0.1%
>   [ = ]       0 .rela.debug_line       +72  +0.6%
>   +6.9%      +9 .rodata.str1.1          +9  +6.9%
>   [ = ]       0 .debug_ranges           +1  +0.0%
>
>  -------------- SHRINKING          --------------
>  -97.4% -24.8Ki .rodata.str1.8     -24.8Ki -97.4%
>   [ = ]       0 .rela.debug_loc    -14.5Ki  -0.1%
>   [ = ]       0 .symtab            -14.4Ki -25.6%
>   [ = ]       0 .rela.debug_info   -3.45Ki  -0.0%
>   [ = ]       0 .strtab            -2.48Ki  -1.5%
>   [ = ]       0 .debug_line        -2.43Ki  -0.7%
>   [ = ]       0 [Unmapped]             -15  -9.1%
>   [ = ]       0 .debug_abbrev          -12  -0.6%
>
>   -0.4% -5.68Ki TOTAL              -11.7Ki  -0.0%
>
> It's up to you.
>
> Martin
>
> >
> >> Martin
> >>
> >>>
> >>> Richard.
> >>>
> >>>>
> >>>> Martin
> >>>>
> >>>> gcc/ChangeLog:
> >>>>
> >>>> 2018-08-31  Martin Liska  <mliska@suse.cz>
> >>>>
> >>>>         * genmatch.c (output_line_directive): Add new argument
> >>>>         fnargs.
> >>>>         (dt_simplify::gen_1): Generate call to report_match_pattern
> >>>>         function and wrap that into __builtin_expect.
> >>>>         * gimple.c (report_match_pattern): New function.
> >>>>         * gimple.h (report_match_pattern): Likewise.
> >>>> ---
> >>>>  gcc/genmatch.c | 18 ++++++++++++------
> >>>>  gcc/gimple.c   | 14 ++++++++++++++
> >>>>  gcc/gimple.h   |  4 ++++
> >>>>  3 files changed, 30 insertions(+), 6 deletions(-)
> >>>>
> >>>>
> >>
>


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