On Thu, May 24, 2018 at 10:31 AM Jakub Jelinek <ja...@redhat.com> wrote:

> On Thu, May 24, 2018 at 09:21:35AM +0100, Richard Sandiford wrote:
> > vect_recog_divmod_pattern currently bails out if the target has
> > native support for integer division, but I think in practice
> > it's always going to be better to open-code it anyway, just as
> > we usually open-code scalar divisions by constants.
> >
> > I think the only currently affected target is MIPS MSA, where for:

> Isn't powerpcspe affected too?  It has a divv2si3 pattern.

> > --- gcc/tree-vect-patterns.c  2018-05-16 12:48:59.115202362 +0100
> > +++ gcc/tree-vect-patterns.c  2018-05-24 09:18:10.445466941 +0100
> > @@ -2639,7 +2639,6 @@ vect_recog_divmod_pattern (vec<gimple *>
> >    enum tree_code rhs_code;
> >    stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt);
> >    vec_info *vinfo = stmt_vinfo->vinfo;
> > -  optab optab;
> >    tree q;
> >    int dummy_int, prec;
> >    stmt_vec_info def_stmt_vinfo;
> > @@ -2674,17 +2673,6 @@ vect_recog_divmod_pattern (vec<gimple *>
> >    if (vectype == NULL_TREE)
> >      return NULL;
> >
> > -  /* If the target can handle vectorized division or modulo natively,
> > -     don't attempt to optimize this.  */
> > -  optab = optab_for_tree_code (rhs_code, vectype, optab_default);
> > -  if (optab != unknown_optab)
> > -    {
> > -      machine_mode vec_mode = TYPE_MODE (vectype);
> > -      int icode = (int) optab_handler (optab, vec_mode);
> > -      if (icode != CODE_FOR_nothing)
> > -     return NULL;
> > -    }
> > -

> Shouldn't we instead keep it, but only do it if
> optimize_bb_for_size_p (gimple_bb (last_stmt)) ?
> I mean, a hw division is very likely shorter than what we replace it
with...

Good idea.  While loops are checked for optimize_loop_nest_for_speed if
not forced vect BB vectorization has no such predicate.

Richard.

>          Jakub

Reply via email to