On Fri, Dec 4, 2015 at 4:00 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> On 02 Dec 16:27, Richard Biener wrote:
>> On Wed, Dec 2, 2015 at 4:24 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
>> >
>> > The problem is that conversion is supposed to be handled by
>> > vectorizable_conversion,
>> > but it fails to because it is not actually a conversion. I suppose it
>> > may be handled
>> > in vectorizable_assignment but I chose this pattern because it's meant
>> > to handle mask
>> > conversion issues.
>>
>> I think it's always better to avoid patterns if you can.
>>
>> Richard.
>>
>
> Here is a variant with vectorizable_assignment change.  Bootstrapped and 
> regtested on x86_64-unknown-linux-gnu.  Does it look better?

Yes.

Thanks,
Richard.

> Thanks,
> Ilya
> --
> gcc/
>
> 2015-12-04  Ilya Enkovich  <enkovich....@gmail.com>
>
>         * tree-vect-stmts.c (vectorizable_assignment): Support
>         useless boolean conversion.
>
>
> diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
> index 3b078da..2cdbb04 100644
> --- a/gcc/tree-vect-stmts.c
> +++ b/gcc/tree-vect-stmts.c
> @@ -4229,7 +4229,12 @@ vectorizable_assignment (gimple *stmt, 
> gimple_stmt_iterator *gsi,
>        /* But a conversion that does not change the bit-pattern is ok.  */
>        && !((TYPE_PRECISION (TREE_TYPE (scalar_dest))
>             > TYPE_PRECISION (TREE_TYPE (op)))
> -          && TYPE_UNSIGNED (TREE_TYPE (op))))
> +          && TYPE_UNSIGNED (TREE_TYPE (op)))
> +      /* Conversion between boolean types of different sizes is
> +        a simple assignment in case their vectypes are same
> +        boolean vectors.  */
> +      && (!VECTOR_BOOLEAN_TYPE_P (vectype)
> +         || !VECTOR_BOOLEAN_TYPE_P (vectype_in)))
>      {
>        if (dump_enabled_p ())
>          dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,

Reply via email to