Hi Richard,

> On 13 Nov 2026, at 09:49, Richard Sandiford <[email protected]> 
> wrote:
> 
> On Fri, 13 Nov 2026 at 15:39, Jeff Law <[email protected]> wrote:
>> On 11/12/26 8:34 AM, [email protected] wrote:
>>> From: Kyrylo Tkachov <[email protected]>
>>> 
>>> simplify_phi_setup calls simplify_phi_propagate for every phi.  That
>>> walks the list of all phi uses of the phi, to propagate the phi's mode
>>> to the uses and to check for lower-uid users whose optimistic
>>> assumptions were wrong.  The use_infos on that list belong to many
>>> different phis, so for a phi network with a large number of inputs the
>>> walk touches each use_info with poor locality.  Nearly all of these
>>> uses are backedge uses whose assumptions turn out to be valid, so the
>>> walk almost never changes anything other than the use's mode.
>>> 
>>> Instead, do the set-up checks from the user side.  After all phis have
>>> been set up, visit the inputs of each phi, which are allocated
>>> contiguously, and apply the checks that simplify_phi_propagate would
>>> have applied to the phi's backedge inputs.  This is done by a new
>>> function simplify_phi_backedges, which shares the per-user update logic
>>> with simplify_phi_propagate through simplify_phi_update_user.  Write the
>>> final phi modes to the phi uses in one pass at the end, rather than as a
>>> side effect of each propagation.
>>> 
>>> The set of assumptions that is reached is the same, since the worklist
>>> phase still revisits any phi whose assumptions or mode changed.
>>> 
>>> The users of RTL-SSA, such as fold-mem-offsets and the AArch64 load/store
>>> pair fusion pass, spent more than half of their time in
>>> simplify_phi_propagate when compiling POVRay fnpovfpu.cpp at -O2.  On that
>>> file this patch alone reduces the compile time by 37%.  On top of the
>>> previous patch, which bounds the number of dispatch copies, it removes a
>>> further 13% at -O2 and 11% at -O3, and cuts the time in each of
>>> fold-mem-offsets and machine dependent reorg by 44%.  Together the two
>>> patches reduce the compile time of that file by 80% at -O2, and of the whole
>>> of 511.povray_r by 13%, leaving it within 1% of compiling with
>>> -fno-duplicate-switch-dispatch.
>>> 
>>> Bootstrapped and tested on aarch64-none-linux-gnu
>>> Ok for trunk?
>>> Thanks,
>>> Kyrill
>>> 
>>> Cc: Richard Sandiford <[email protected]>
>>> 
>>> gcc/ChangeLog:
>>> 
>>>      PR target/128512
>>>      * rtl-ssa/functions.h (function_info::simplify_phi_setup): Remove
>>>      the worklist parameter.
>>>      (function_info::simplify_phi_update_user)
>>>      (function_info::simplify_phi_backedges): Declare.
>>>      * rtl-ssa/functions.cc (function_info::simplify_phi_setup): Do not
>>>      call simplify_phi_propagate.
>>>      (function_info::simplify_phi_update_user): New function, split out
>>>      from simplify_phi_propagate.
>>>      (function_info::simplify_phi_backedges): New function.
>>>      (function_info::simplify_phi_propagate): Use
>>>      simplify_phi_update_user.  Do not update the modes of the uses.
>>>      (function_info::simplify_phis): Call simplify_phi_backedges for
>>>      each phi after the set-up phase.  Update the modes of phi uses
>>>      after the propagation phase.
>>> 
>>> Signed-off-by: Kyrylo Tkachov <[email protected]>
>> I'll defer to Richard S. on this. If he doesn't chime in over the next
>> week, then ping and I'll take it.
> 
> Thanks.  Mind if we park both parts of this series till mid-December?
> 
> Andrea noted a while back that late RTL-SSA passes were causing slow
> behaviour for certain cases, which I'd also identified as being caused
> by running after uplicate_computed_goto.  I was working on a patch that
> changed how the phis were built and (possibly) how they were simplified.
> There were various alternatives and I never settled on something that
> I was happy with.
> 
> I'd like to compare what I was doing with this patch.  I can't remember
> the details now though and I'm away from my main machine for a few weeks.
> 

Sure, no problem with me. As long as we handle this for GCC 17 I’m not worried 
about the exact timeline.
Thanks,
Kyrill

> Richard


Reply via email to