This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Improving uniform_vector_p() function.


On Tue, Oct 1, 2013 at 10:31 AM, Cong Hou <congh@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.
>
>
> 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  <congh@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)


do  this:

             if (is_gimple_assign (def) && gimple_assign_copy_p (def))

> +        {
> +          tree rhs = gimple_op (def, 1);
> +          if (VECTOR_TYPE_P (TREE_TYPE (rhs)))
> +            return uniform_vector_p (rhs);
> +        }
> +    }
> +
>    return NULL_TREE;
>  }

Do you have a test case showing what missed optimization this fix can enable ?

David


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]