On Wed, May 31, 2023 at 3:35 AM Cui, Lili <lili....@intel.com> wrote: > > Hi, > > This patch is to fix ICE in rewrite_expr_tree_parallel. > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110038 > > Bootstrapped and regtested. Ok for trunk?
OK. > Regards > Lili. > > 1. Limit the value of tree-reassoc-width to IntegerRange(0, 256). > 2. Add width limit in rewrite_expr_tree_parallel. > > gcc/ChangeLog: > > PR tree-optimization/110038 > * params.opt: Add a limit on tree-reassoc-width. > * tree-ssa-reassoc.cc > (rewrite_expr_tree_parallel): Add width limit. > > gcc/testsuite/ChangeLog: > > PR tree-optimization/110038 > * gcc.dg/pr110038.c: New test. > --- > gcc/params.opt | 2 +- > gcc/testsuite/gcc.dg/pr110038.c | 10 ++++++++++ > gcc/tree-ssa-reassoc.cc | 3 +++ > 3 files changed, 14 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/pr110038.c > > diff --git a/gcc/params.opt b/gcc/params.opt > index 66f1c99036a..70cfb495e3a 100644 > --- a/gcc/params.opt > +++ b/gcc/params.opt > @@ -1091,7 +1091,7 @@ Common Joined UInteger > Var(param_tracer_min_branch_ratio) Init(10) IntegerRange( > Stop reverse growth if the reverse probability of best edge is less than > this threshold (in percent). > > -param=tree-reassoc-width= > -Common Joined UInteger Var(param_tree_reassoc_width) Param Optimization > +Common Joined UInteger Var(param_tree_reassoc_width) IntegerRange(0, 256) > Param Optimization > Set the maximum number of instructions executed in parallel in reassociated > tree. If 0, use the target dependent heuristic. > > -param=tsan-distinguish-volatile= > diff --git a/gcc/testsuite/gcc.dg/pr110038.c b/gcc/testsuite/gcc.dg/pr110038.c > new file mode 100644 > index 00000000000..0f578b182ca > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr110038.c > @@ -0,0 +1,10 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O --param=tree-reassoc-width=256" } */ > + > +unsigned a, b; > + > +void > +foo (unsigned c) > +{ > + a += b + c + 1; > +} > diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc > index ad2f528ff07..f8055d59d57 100644 > --- a/gcc/tree-ssa-reassoc.cc > +++ b/gcc/tree-ssa-reassoc.cc > @@ -5510,6 +5510,9 @@ rewrite_expr_tree_parallel (gassign *stmt, int width, > bool has_fma, > for (i = stmt_num - 2; i >= 0; i--) > stmts[i] = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmts[i+1])); > > + /* Width should not be larger than op_num/2. */ > + width = width <= op_num / 2 ? width : op_num / 2; > + > /* Build parallel dependency chain according to width. */ > for (i = 0; i < width; i++) > { > -- > 2.25.1 >