[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