On November 17, 2021 8:46:54 AM GMT+01:00, 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 phiopt could move an assignment from the middle >block >to the non-middle one. This patch fixes that. > >OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
OK. Richard. > PR 103288 > >gcc/ChangeLog: > > * tree-ssa-phiopt.c (value_replacement): Return early if middle > block has more than one pred. > >gcc/testsuite/ChangeLog: > > * gcc.c-torture/compile/pr103288-1.c: New test. >--- > gcc/testsuite/gcc.c-torture/compile/pr103288-1.c | 6 ++++++ > gcc/tree-ssa-phiopt.c | 3 +++ > 2 files changed, 9 insertions(+) > create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr103288-1.c > >diff --git a/gcc/testsuite/gcc.c-torture/compile/pr103288-1.c >b/gcc/testsuite/gcc.c-torture/compile/pr103288-1.c >new file mode 100644 >index 00000000000..88d1c675599 >--- /dev/null >+++ b/gcc/testsuite/gcc.c-torture/compile/pr103288-1.c >@@ -0,0 +1,6 @@ >+ >+int ui_5; >+long func_14_uli_8; >+void func_14() { >+ ui_5 &= (func_14_uli_8 ? 60 : ui_5) ? 5 : 0; >+} >diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c >index 6b22f6bedd4..8984a5e15ab 100644 >--- a/gcc/tree-ssa-phiopt.c >+++ b/gcc/tree-ssa-phiopt.c >@@ -1381,6 +1381,9 @@ value_replacement (basic_block cond_bb, basic_block >middle_bb, > } > } > >+ if (!single_pred_p (middle_bb)) >+ return 0; >+ > /* Now optimize (x != 0) ? x + y : y to just x + y. */ > gsi = gsi_last_nondebug_bb (middle_bb); > if (gsi_end_p (gsi))