On Tue, 28 Jul 2026, Kyrylo Tkachov wrote:

> 
> 
> > On 24 Jul 2026, at 20:15, Jeffrey Law <[email protected]> wrote:
> > 
> > 
> > 
> > On 7/22/2026 9:24 AM, [email protected] wrote:
> >> From: Kyrylo Tkachov <[email protected]>
> >> 
> >> init_noce_multiple_sets_info records earlier SET destinations that are
> >> mentioned by a later SET source.  When a pseudo is set more than once, only
> >> its most recent prior definition reaches that source.
> >> 
> >> Recording every definition is unsafe in the second
> >> noce_convert_multiple_sets_1 attempt.  The newest definition can be emitted
> >> directly into its target pseudo, making its replacement a no-op.  A later
> >> replacement using an older definition then substitutes a stale value.
> >> 
> >> PR126184 contains the following dependency chain:
> >> 
> >>   c = x + 1;
> >>   x = c * y;
> >>   c = z + 3;
> >>   y = c * x;
> >> 
> >> The unfixed conversion computes the last multiply with the temporary that
> >> holds `x + 1`, rather than the reaching `z + 3` value.
> >> 
> >> The unfixed final sequence forms `x + 1` in x0 and later uses x0 as the
> >> multiply operand:
> >> 
> >>   add     x0, x1, 1
> >>   csel    x1, x1, x3, eq
> >>   mul     x0, x1, x0
> >> 
> >> With the fix, x3 retains z until `z + 3` is formed and used by the 
> >> multiply:
> >> 
> >>   add     x3, x3, 3
> >>   csel    x0, x0, x1, ne
> >>   mul     x3, x0, x3
> >> 
> >> Walk definitions from newest to oldest and record only the first match for
> >> each pseudo.  Add an AArch64 execution test for the reported dependency.
> >> 
> >> Bootstrapped and tested on aarch64-none-linux-gnu and
> >> x86_64-pc-linux-gnu.
> >> 
> >> gcc/ChangeLog:
> >> 
> >> PR rtl-optimization/126184
> >> * ifcvt.cc (init_noce_multiple_sets_info): Record only the most
> >> recent prior definition of each pseudo register.
> >> 
> >> gcc/testsuite/ChangeLog:
> >> 
> >> PR rtl-optimization/126184
> >> * gcc.target/aarch64/pr126184.c: New test.
> > OK
> 
> Thanks, I committed the two patches over the weekend.
> Richard: is this and the prerequisite patch at:
> https://gcc.gnu.org/cgit/gcc/commit/?id=7b4d5b42a78859b30c9b48fa0a426effbbd71ff7
> Ok to backport for GCC 16.2?

Yes.

> They should be fairly localized wrong-code fixes for ifcvt.
> Thanks,
> Kyrill
> 
> 
> > jeff
> 
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Abhinav Puri; (HRB 36809, AG Nuernberg)

Reply via email to