On Wed, 4 Sep 2024, Palmer Dabbelt wrote:

> On Wed, 04 Sep 2024 04:10:52 PDT (-0700), rguent...@suse.de wrote:
> > The following adds SLP discovery for roots that are only live but
> > otherwise unused.  These are usually inductions.  This allows a
> > few more testcases to be handled fully with SLP, for example
> > gcc.dg/vect/no-scevccp-pr86725-1.c
> >
> > Bootstrap and regtest running on x86_64-unknown-linux-gnu.
> >
> >  * tree-vect-slp.cc (vect_analyze_slp): Analyze SLP for live
> >  but otherwise unused defs.
> > ---
> >  gcc/tree-vect-slp.cc | 30 ++++++++++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> 
> Are you putting the "RISC-V" in there just to kick the CI into running it?

Yes.

> If so you can also just CC <patchworks...@rivosinc.com> (or trip anything that
> matches the filter at [1]).  No big deal on my end, just worried non-RISC-V
> people are going to see the tag and think this is RISC-V-only and thus ignore
> it.
> 
> If you're looking for a RISC-V reviewer, I don't really know this stuff well
> enough to say much here.  Robin would probably be the best bet...

Good points, I'll see to use CCing patchworks...@rivosinc.com from now.
I can self-approve those patches but of course still welcome 
feedback.

Richard.

> [1]:
> https://github.com/patrick-rivos/riscv-gnu-toolchain/blob/1496f76a9ad4081c0afdde8f7f8ffb22573a1789/scripts/create_patches_files.py#L89
> 
> > diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
> > index 41bc92b138a..91d6927016d 100644
> > --- a/gcc/tree-vect-slp.cc
> > +++ b/gcc/tree-vect-slp.cc
> > @@ -4704,6 +4704,36 @@ vect_analyze_slp (vec_info *vinfo, unsigned
> > max_tree_size)
> >         saved_stmts.release ();
> >       }
> >     }
> > +
> > +      /* Make sure to vectorize only-live stmts, usually inductions.  */
> > +      for (edge e : get_loop_exit_edges (LOOP_VINFO_LOOP (loop_vinfo)))
> > +   for (auto gsi = gsi_start_phis (e->dest); !gsi_end_p (gsi);
> > +        gsi_next (&gsi))
> > +     {
> > +       gphi *lc_phi = *gsi;
> > +       tree def = gimple_phi_arg_def_from_edge (lc_phi, e);
> > +       stmt_vec_info stmt_info;
> > +       if (TREE_CODE (def) == SSA_NAME
> > +           && !virtual_operand_p (def)
> > +           && (stmt_info = loop_vinfo->lookup_def (def))
> > +           && STMT_VINFO_RELEVANT (stmt_info) == vect_used_only_live
> > +           && STMT_VINFO_LIVE_P (stmt_info)
> > +           && (STMT_VINFO_DEF_TYPE (stmt_info) == vect_induction_def
> > +               || (STMT_VINFO_DEF_TYPE (stmt_info) == vect_internal_def
> > +                   && STMT_VINFO_REDUC_IDX (stmt_info) == -1)))
> > +         {
> > +           vec<stmt_vec_info> stmts;
> > +           vec<stmt_vec_info> roots = vNULL;
> > +           vec<tree> remain = vNULL;
> > +           stmts.create (1);
> > +           stmts.quick_push (vect_stmt_to_vectorize (stmt_info));
> > +           vect_build_slp_instance (vinfo,
> > +                                    slp_inst_kind_reduc_group,
> > +                                    stmts, roots, remain,
> > +                                    max_tree_size, &limit,
> > +                                    bst_map, NULL);
> > +         }
> > +     }
> >      }
> >
> >    hash_set<slp_tree> visited_patterns;
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to