Committed, thanks Richard. Lili.
> -----Original Message----- > From: Richard Biener <richard.guent...@gmail.com> > Sent: Wednesday, May 31, 2023 3:22 PM > To: Cui, Lili <lili....@intel.com> > Cc: gcc-patches@gcc.gnu.org > Subject: Re: [PATCH] Fix ICE in rewrite_expr_tree_parallel > > 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 > >