Thanks for the update, looks good apart from…

"duanbo (C)" <duan...@huawei.com> writes:
> @@ -4361,7 +4391,7 @@ vect_recog_mask_conversion_pattern (vec_info *vinfo,
>        if (known_eq (TYPE_VECTOR_SUBPARTS (vectype1),
>                   TYPE_VECTOR_SUBPARTS (vectype2))
>         && (TREE_CODE (rhs1) == SSA_NAME
> -           || rhs1_type == TREE_TYPE (TREE_OPERAND (rhs1, 0))))
> +           || !rhs1_op0_type || !rhs1_op1_type))
>       return NULL;

…I think this should be:

          && (TREE_CODE (rhs1) == SSA_NAME
              || (!rhs1_op0_type && !rhs1_op1_type))

i.e. punt only if both types are already OK.  If one operand wants
a specific mask type, we should continue to the code below and attach
the chosen type to the comparison.

Although I guess this simplifies to:

      if (known_eq (TYPE_VECTOR_SUBPARTS (vectype1),
                    TYPE_VECTOR_SUBPARTS (vectype2))
          && !rhs1_op0_type
          && !rhs1_op1_type)
        return NULL;

(I think the comment above the code is still accurate with this change.)

> @@ -4393,7 +4423,16 @@ vect_recog_mask_conversion_pattern (vec_info *vinfo,
>        if (TREE_CODE (rhs1) != SSA_NAME)
>       {
>         tmp = vect_recog_temp_ssa_var (TREE_TYPE (rhs1), NULL);
> -       pattern_stmt = gimple_build_assign (tmp, rhs1);
> +       if (rhs1_op0_type && TYPE_PRECISION (rhs1_op0_type)
> +                             != TYPE_PRECISION (rhs1_type))
> +         rhs1_op0 = build_mask_conversion (vinfo, rhs1_op0,
> +                                           vectype2, stmt_vinfo);
> +       if (rhs1_op1_type && TYPE_PRECISION (rhs1_op1_type)
> +                             != TYPE_PRECISION (rhs1_type))

Very minor -- I would have fixed this up before committing if it
wasn't for the above -- but: GCC formatting is instead:

          if (rhs1_op1_type
              && TYPE_PRECISION (rhs1_op1_type) != TYPE_PRECISION (rhs1_type))

LGTM with those changes, thanks.

Richard

> +         rhs1_op1 = build_mask_conversion (vinfo, rhs1_op1,
> +                                           vectype2, stmt_vinfo);
> +       pattern_stmt = gimple_build_assign (tmp, TREE_CODE (rhs1),
> +                                           rhs1_op0, rhs1_op1);
>         rhs1 = tmp;
>         append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, vectype2,
>                                 rhs1_type);

Reply via email to