On Fri, Nov 19, 2021 at 2:54 AM apinski--- via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > From: Andrew Pinski <apin...@marvell.com> > > The problem is r12-5300-gf98f373dd822b35c allows phiopt to recognize more > basic blocks > but missed one location where the basic block does not need to be empty but > still > needs to have a single predecessor. This patch fixes that over sight. > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
OK. Thanks, Richard. > PR tree-optimization/103317 > > gcc/ChangeLog: > > * tree-ssa-phiopt.c (minmax_replacement): For the non empty > middle bb case, check to make sure it has a single predecessor. > > gcc/testsuite/ChangeLog: > > * gcc.c-torture/compile/pr103317-1.c: New test. > --- > gcc/testsuite/gcc.c-torture/compile/pr103317-1.c | 13 +++++++++++++ > gcc/tree-ssa-phiopt.c | 3 +++ > 2 files changed, 16 insertions(+) > create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr103317-1.c > > diff --git a/gcc/testsuite/gcc.c-torture/compile/pr103317-1.c > b/gcc/testsuite/gcc.c-torture/compile/pr103317-1.c > new file mode 100644 > index 00000000000..f9d145e0da9 > --- /dev/null > +++ b/gcc/testsuite/gcc.c-torture/compile/pr103317-1.c > @@ -0,0 +1,13 @@ > +int a, b; > +char c; > +void > +d (void) > +{ > + char e = c; > + if (b) > + if (c < 16 - 11) > + e = 16 - 11; > + if (e > 8) > + e = 8; > + a = e; > +} > diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c > index f0431684089..1abc4ea21cc 100644 > --- a/gcc/tree-ssa-phiopt.c > +++ b/gcc/tree-ssa-phiopt.c > @@ -1780,6 +1780,9 @@ minmax_replacement (basic_block cond_bb, basic_block > middle_bb, > gimple *assign = last_and_only_stmt (middle_bb); > tree lhs, op0, op1, bound; > > + if (!single_pred_p (middle_bb)) > + return false; > + > if (!assign > || gimple_code (assign) != GIMPLE_ASSIGN) > return false; > -- > 2.17.1 >