On Wed, Jul 30, 2025 at 2:14 AM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > r16-2590-ga51bf9e10182cf was not the correct fix for this in the end. > Instead a much simplier and localized fix is needed, just change the phi > that is being worked on with the new result and arguments that is from the > factored out operator. > This solves the issue of not having result in the IR and causing issues that > way. > > Bootstrapped and tested on x86_64-linux-gnu. > Note this depends on reverting r16-2590-ga51bf9e10182cf.
OK. Thanks, Richard. > PR tree-optimization/121236 > PR tree-optimization/121295 > > gcc/ChangeLog: > > * tree-if-conv.cc (factor_out_operators): Change the phi node > to the new result and args. > > gcc/testsuite/ChangeLog: > > * gcc.dg/torture/pr121236-1.c: New test. > * gcc.dg/torture/pr121295-1.c: New test. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/testsuite/gcc.dg/torture/pr121236-1.c | 20 ++++++++++++++++++++ > gcc/testsuite/gcc.dg/torture/pr121295-1.c | 13 +++++++++++++ > gcc/tree-if-conv.cc | 7 +++++++ > 3 files changed, 40 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/torture/pr121236-1.c > create mode 100644 gcc/testsuite/gcc.dg/torture/pr121295-1.c > > diff --git a/gcc/testsuite/gcc.dg/torture/pr121236-1.c > b/gcc/testsuite/gcc.dg/torture/pr121236-1.c > new file mode 100644 > index 00000000000..2b397e34078 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/torture/pr121236-1.c > @@ -0,0 +1,20 @@ > +/* { dg-do compile } */ > +/* PR tree-optimization/121236 */ > + > + > +unsigned func_26(short *p_27, int gg, int p) { > + unsigned l_184 = 0; > + unsigned m = 0; > + for (int g_59 = 0; g_59 < 10; g_59++) > + { > + if (gg) > + l_184--; > + else > + { > + m |= l_184 |= p; > + (l_184)--; > + } > + } > + return m; > +} > + > diff --git a/gcc/testsuite/gcc.dg/torture/pr121295-1.c > b/gcc/testsuite/gcc.dg/torture/pr121295-1.c > new file mode 100644 > index 00000000000..7825c6ee91b > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/torture/pr121295-1.c > @@ -0,0 +1,13 @@ > +/* { dg-do compile } */ > +/* { dg-additional-options " -fno-tree-copy-prop -fno-tree-pre > -fno-code-hoisting" */ > + > +/* PR tree-optimization/121295 */ > + > + > +int a, b, c; > +int main() { > + int *d = &a; > + while (b) > + b = (*d &= 10) <= 0 || (*d = c); > + return 0; > +} > diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc > index ba25c19c50c..b7ce0720b15 100644 > --- a/gcc/tree-if-conv.cc > +++ b/gcc/tree-if-conv.cc > @@ -2291,6 +2291,13 @@ again: > *arg0 = new_arg0; > *arg1 = new_arg1; > *res = new_res; > + > + /* Update the phi node too. */ > + gimple_phi_set_result (phi, new_res); > + gimple_phi_arg (phi, 0)->def = new_arg0; > + gimple_phi_arg (phi, 0)->def = new_arg1; > + update_stmt (phi); > + > repeated = true; > goto again; > } > -- > 2.43.0 >