public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jeff Law <jeffreyalaw@gmail.com>
To: Aldy Hernandez <aldyh@redhat.com>,
	Richard Biener <richard.guenther@gmail.com>
Cc: GCC patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH] Abstract PHI and forwarder block checks in jump threader.
Date: Tue, 7 Sep 2021 09:05:43 -0600	[thread overview]
Message-ID: <386ba9f0-e396-200a-5ddf-85039f658a52@gmail.com> (raw)
In-Reply-To: <2e8290b5-bd89-1fb6-5bb2-bbd133c2d251@redhat.com>



On 9/7/2021 7:23 AM, Aldy Hernandez wrote:
>
>
> On 9/7/21 2:59 PM, Richard Biener wrote:
>> On September 7, 2021 12:02:27 PM GMT+02:00, Aldy Hernandez 
>> <aldyh@redhat.com> wrote:
>>>
>>>
>>> On 9/6/21 9:19 AM, Richard Biener wrote:
>>>> On Fri, Sep 3, 2021 at 3:59 PM Aldy Hernandez via Gcc-patches
>>>> <gcc-patches@gcc.gnu.org> wrote:
>>>>>
>>>>> This patch abstracts out a couple common idioms in the forward
>>>>> threader that I found useful while navigating the code base.
>>>>>
>>>>> Tested on x86-64 Linux.
>>>>>
>>>>> OK?
>>>>>
>>>>> gcc/ChangeLog:
>>>>>
>>>>>           * tree-ssa-threadedge.c (has_phis_p): New.
>>>>>           (forwarder_block_p): New.
>>>>>           (potentially_threadable_block): Call forwarder_block_p.
>>>>>           (jump_threader::thread_around_empty_blocks): Call 
>>>>> has_phis_p.
>>>>>           (jump_threader::thread_through_normal_block): Call
>>>>>           forwarder_block_p.
>>>>> ---
>>>>>    gcc/tree-ssa-threadedge.c | 25 +++++++++++++++++++------
>>>>>    1 file changed, 19 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
>>>>> index e57f6d3e39c..3db54a199fd 100644
>>>>> --- a/gcc/tree-ssa-threadedge.c
>>>>> +++ b/gcc/tree-ssa-threadedge.c
>>>>> @@ -95,6 +95,21 @@ jump_threader::thread_through_all_blocks (bool 
>>>>> may_peel_loop_headers)
>>>>>      return m_registry->thread_through_all_blocks 
>>>>> (may_peel_loop_headers);
>>>>>    }
>>>>>
>>>>> +static inline bool
>>>>> +has_phis_p (basic_block bb)
>>>>> +{
>>>>> +  return !gsi_end_p (gsi_start_phis (bb));
>>>>
>>>> gimple_seq_empty_p (phi_nodes (bb)) shoud be cheaper.  Do virtual PHIs
>>>> count as PHIs for you?
>>>
>>> I don't know.  The goal was to abstract some common idioms without
>>> changing existing behavior, but if my abstractions confuse other
>>> readers, perhaps I should revert my patch.
>>>
>>> FWIW, my initial motivation here was to merge the path profitability
>>> code between the forward and backward threaders.  It seems the forward
>>> threader is more permissive than the backward threader, even though the
>>> latter can thread more paths than it's allowed (per profitable_path_p).
>>>
>>>>
>>>>> +}
>>>>> +
>>>>> +/* Return TRUE for a forwarder block which is defined as having PHIs
>>>>> +   but no instructions.  */
>>>>> +
>>>>> +static bool
>>>>> +forwarder_block_p (basic_block bb)
>>>>
>>>> There exists a function with exactly the same signature in 
>>>> cfgrtl.h, likewise
>>>> several similar implementations might exist elsewhere.
>>>
>>> Ughh, that's definitely not good.
>>>
>>>>
>>>> Your definition is also quite odd, not matching what one would expect
>>>> (the PHI requirement).  The tree-cfgcleanup.c variant has
>>>> tree_forwarder_block_p which is explicit about this.
>>>>
>>>> Btw, gsi_start_nondebug_bb does not ignore labels.
>>>
>>> Would a name like empty_block_with_phis_p be more appropriate?
>>
>> I think so.  That said, my main concern ist the clash with the same 
>> named function.
>
> Agreed.
>
> OK for trunk?
>
> Aldy
>
>
> p.patch
>
> commit 77ac56456d5db150d6a71eaca918f19d2b478f82
> Author: Aldy Hernandez <aldyh@redhat.com>
> Date:   Tue Sep 7 15:20:23 2021 +0200
>
>      Rename forwarder_block_p in treading code to empty_block_with_phis_p.
>      
>      gcc/ChangeLog:
>      
>              * tree-ssa-threadedge.c (forwarder_block_p): Rename to...
>              (empty_block_with_phis_p): ...this.
>              (potentially_threadable_block): Same.
>              (jump_threader::thread_through_normal_block): Same.
OK.  I nearly called out a request for a name change....  Guess I should 
have :-)

jeff


  reply	other threads:[~2021-09-07 15:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-03 13:58 Aldy Hernandez
2021-09-06  7:19 ` Richard Biener
2021-09-07 10:02   ` Aldy Hernandez
2021-09-07 12:59     ` Richard Biener
2021-09-07 13:23       ` Aldy Hernandez
2021-09-07 15:05         ` Jeff Law [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-09-03 13:56 [PATCH] Improve backwards threader debugging dumps Aldy Hernandez
2021-09-03 13:56 ` [PATCH] Abstract PHI and forwarder block checks in jump threader Aldy Hernandez
2021-09-03 15:00   ` Jeff Law

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=386ba9f0-e396-200a-5ddf-85039f658a52@gmail.com \
    --to=jeffreyalaw@gmail.com \
    --cc=aldyh@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).