On Mon, Apr 1, 2024 at 3:36 PM Qing Zhao <qing.z...@oracle.com> wrote: > > This is a bug in tree-ssa-math-opts.c, when applying the widening mul > optimization, the compiler needs to check whether the operand is in a > ABNORMAL PHI, if YES, we should avoid the transformation. > > PR tree-optimization/111407 > > gcc/ChangeLog: > > * tree-ssa-math-opts.c (convert_mult_to_widen): Avoid the transform > when one of the operands is subject to abnormal coalescing. > > gcc/testsuite/ChangeLog: > > * gcc.dg/pr111407.c: New test. > > (cherry picked from commit 4aca1cfd6235090e48a53dab734437740671bbf3) > > bootstraped and regression tested on both aarch64 and x86. > > Okay for commit to GCC10?
Note the GCC 10 branch is closed. If the patch boostraps/tests on the 11, 12 and 13 branches it is OK there. You do not need approval to backport fixes for _regressions_ if the patch cherry-picks without major edits and boostraps/tests OK. Thanks, Richard. > thanks. > > Qing > --- > gcc/testsuite/gcc.dg/pr111407.c | 21 +++++++++++++++++++++ > gcc/tree-ssa-math-opts.c | 8 ++++++++ > 2 files changed, 29 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/pr111407.c > > diff --git a/gcc/testsuite/gcc.dg/pr111407.c b/gcc/testsuite/gcc.dg/pr111407.c > new file mode 100644 > index 000000000000..a171074753f9 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr111407.c > @@ -0,0 +1,21 @@ > +/* PR tree-optimization/111407*/ > +/* { dg-do compile } */ > +/* { dg-options "-O2" } */ > +enum { SEND_TOFILE } __sigsetjmp(); > +void fclose(); > +void foldergets(); > +void sendpart_stats(int *p1, int a1, int b1) { > + int *a = p1; > + fclose(); > + p1 = 0; > + long t = b1; > + if (__sigsetjmp()) { > + { > + long t1 = a1; > + a1+=1; > + fclose(a1*(long)t1); > + } > + } > + if (p1) > + fclose(); > +} > diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c > index dd0b8c6f0577..47981da20e05 100644 > --- a/gcc/tree-ssa-math-opts.c > +++ b/gcc/tree-ssa-math-opts.c > @@ -2543,6 +2543,14 @@ convert_mult_to_widen (gimple *stmt, > gimple_stmt_iterator *gsi) > if (!is_widening_mult_p (stmt, &type1, &rhs1, &type2, &rhs2)) > return false; > > + /* if any one of rhs1 and rhs2 is subject to abnormal coalescing, > + avoid the tranform. */ > + if ((TREE_CODE (rhs1) == SSA_NAME > + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs1)) > + || (TREE_CODE (rhs2) == SSA_NAME > + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs2))) > + return false; > + > to_mode = SCALAR_INT_TYPE_MODE (type); > from_mode = SCALAR_INT_TYPE_MODE (type1); > if (to_mode == from_mode) > -- > 2.31.1 >