On Fri, Oct 21, 2011 at 02:37:06PM +0200, Ira Rosen wrote:
> > @@ -1620,7 +1615,13 @@ vectorizable_call (gimple stmt, gimple_s
> >
> >   gcc_assert (!gimple_vuse (stmt));
> >
> > -  if (modifier == NARROW)
> > +  if (slp_node || PURE_SLP_STMT (stmt_info))
> > +    {
> > +      if (modifier != NONE)
> > +       return false;
> > +      ncopies = 1;
> > +    }
> 
> If you want to bail out if it's SLP and modifier != NONE, this check
> is not enough. PURE_SLP means the stmt is not used outside the SLP
> instance, so for hybrid SLP stmts (those that have uses outside SLP)
> this check will not work. You need
> 
>   if (modifier != NONE && STMT_SLP_TYPE (stmt_info))
>      return false;

I just blindly copied what vectorizable_operation does, without
too much understanding what PURE_SLP_STMT or STMT_SLP_TYPE etc. mean.
Didn't get that far.
But modifier != NONE && something would sometimes allow modifier != NONE
through, which at least the current code isn't prepared to handle.
Did you mean || instead?

> But I wonder why not allow different type sizes? I see that we fail in
> such cases in vectorizable_conversion too, but I think we should
> support this as well.

Merely because I don't know SLP enough, vectorizable_operation also
handles just same size to same size, so I didn't have good examples
on how to do it.  For loops narrowing or widening operations are
handled through ncopies != 1, but for SLP it seems it is always
asserted it is 1...

> No need in \n.

Ok.

> >   for (i = 0; i < number_of_oprnds; i++)
> >     {
> > -      oprnd = gimple_op (stmt, i + 1);
> > +      if (is_gimple_call (stmt))
> > +       oprnd = gimple_call_arg (stmt, i);
> > +      else
> > +       oprnd = gimple_op (stmt, i + 1);
> >
> >       if (!vect_is_simple_use (oprnd, loop_vinfo, bb_vinfo, &def_stmt, 
> > &def[i],
> >                                &dt[i])
> 
> I think you forgot to check that all the calls are to the same function.

Right, that is easy to add, but modifier != NONE is something I have no idea
how to do currently.

        Jakub

Reply via email to