[PATCH][stage1] Support profile (BB counts and edge probabilities) in GIMPLE FE.

Martin Liška mliska@suse.cz
Tue Apr 9 13:15:00 GMT 2019


On 4/8/19 3:35 PM, Martin Liška wrote:
> On 4/8/19 11:11 AM, Richard Biener wrote:
>> On Fri, Apr 5, 2019 at 2:32 PM Martin Liška <mliska@suse.cz> wrote:
>>>
>>> Hi.
>>>
>>> The patch adds support for profile for GIMPLE FE. That can be useful
>>> in the future.
>>>
>>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>>>
>>> Ready to be installed after stage1 opens?
>>
>> Hmm, I guess to be useful we need the profile quality indicators as well
>> (and think about a proper syntax here since it seems related).
> 
> I wanted to make it easy, buy yes. We should implement that.
> 
>>
>> Btw, do BB counts and edge probabilities not have a relation?
> 
> Yes, they should match. But you have optimizations that make some discrepancies.
> So that I would implement support for both of them.
> 
>>  If so why
>> do we need both?  In predict.c we also look at ENTRY_BLOCK->count
>> so we need a place to set that as well.  We should probably set
>> edge probabilities of fallthru edges properly during our "CFG build".
>>
>> +    goto __BB3(44739243);
>>
>> since we eventually want to add other flags this syntactically
>> should maybe be goto __BB3(guessed(44739243)); and similar
>> for the __BB count case (just s/count/quality/).
> 
> The syntax works for me.
> 
>>
>> The entry block count could be sticked to __GIMPLE (ssa,guessed(N))
>> for example.  There's also the exit block, not sure if we ever look at
>> its count, so __GIMPLE (ssa,guessed(N[,M])) might be a possibility
>> if we always have the same quality here (probably not...).
> 
> I'll check it.
> 
>>
>> Otherwise thanks for trying ;)
>>
>> Richard.
>>
>>> Thanks,
>>> Martin
>>>
>>> gcc/ChangeLog:
>>>
>>> 2019-04-05  Martin Liska  <mliska@suse.cz>
>>>
>>>         * gimple-pretty-print.c (dump_gimple_bb_header):
>>>         Dump BB count.
>>>         (pp_cfg_jump): Dump edge probability.
>>>         * profile-count.h (get_raw_value): New function.
>>>         (from_raw_value): Likewise.
>>>
>>> gcc/c/ChangeLog:
>>>
>>> 2019-04-05  Martin Liska  <mliska@suse.cz>
>>>
>>>         * gimple-parser.c (struct gimple_parser): Add frequency
>>>         for gimple_parser_edge.
>>>         (gimple_parser::push_edge): Add new argument frequency.
>>>         (c_parser_gimple_parse_bb_spec): Parse also frequency
>>>         if present.
>>>         (c_parser_parse_gimple_body): Set edge probability.
>>>         (c_parser_gimple_compound_statement): Consume token
>>>         before calling c_parser_gimple_goto_stmt.
>>>         Parse BB counts.
>>>         (c_parser_gimple_statement): Pass new argument.
>>>         (c_parser_gimple_goto_stmt): Likewise.
>>>         (c_parser_gimple_if_stmt): Likewise.
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> 2019-04-05  Martin Liska  <mliska@suse.cz>
>>>
>>>         * gcc.dg/gimplefe-37.c: New test.
>>> ---
>>>  gcc/c/gimple-parser.c              | 116 +++++++++++++++++++++++------
>>>  gcc/gimple-pretty-print.c          |   8 ++
>>>  gcc/profile-count.h                |  15 ++++
>>>  gcc/testsuite/gcc.dg/gimplefe-37.c |  27 +++++++
>>>  4 files changed, 144 insertions(+), 22 deletions(-)
>>>  create mode 100644 gcc/testsuite/gcc.dg/gimplefe-37.c
>>>
>>>
> 

Hi.

There's updated version that supports profile quality for both counts
and probabilities. I'm wondering whether ENTRY and EXIT BBs needs to
have set probability. Apparently, I haven't seen any verifier that
would complain.

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Support-profile-BB-counts-and-edge-probabilities-in-.patch
Type: text/x-patch
Size: 23529 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20190409/a64dd54f/attachment.bin>


More information about the Gcc-patches mailing list