On Tue, Oct 1, 2013 at 7:31 PM, Cong Hou <co...@google.com> wrote: > The current uniform_vector_p() function only returns non-NULL when the > vector is directly a uniform vector. For example, for the following > gimple code: > > vect_cst_.15_91 = {_9, _9, _9, _9, _9, _9, _9, _9}; > > > The current implementation can only detect that {_9, _9, _9, _9, _9, > _9, _9, _9} is a uniform vector, but fails to recognize > vect_cst_.15_91 is also one. This simple patch searches through > assignment chains to find more uniform vectors. >
Changing uniform_vector_p looks wrong - it is a predicate on GENERIC and you are adding SSA specifics to it. I suggest you simply lookup the def of the SSA name for the example you give in later mail. Richard. > thanks, > Cong > > > > diff --git a/gcc/ChangeLog b/gcc/ChangeLog > index 45c1667..b42f8a9 100644 > --- a/gcc/ChangeLog > +++ b/gcc/ChangeLog > @@ -1,3 +1,9 @@ > +2013-10-01 Cong Hou <co...@google.com> > + > + * tree.c: Improve the function uniform_vector_p() so that a > + vector assigned with a uniform vector is also treated as a > + uniform vector. > + > diff --git a/gcc/tree.c b/gcc/tree.c > index 1c881e4..1d6d894 100644 > --- a/gcc/tree.c > +++ b/gcc/tree.c > @@ -10297,6 +10297,17 @@ uniform_vector_p (const_tree vec) > return first; > } > > + if (TREE_CODE (vec) == SSA_NAME) > + { > + gimple def = SSA_NAME_DEF_STMT (vec); > + if (gimple_code (def) == GIMPLE_ASSIGN) > + { > + tree rhs = gimple_op (def, 1); > + if (VECTOR_TYPE_P (TREE_TYPE (rhs))) > + return uniform_vector_p (rhs); > + } > + } > + > return NULL_TREE; > }