On Tue, 29 May 2018, Jakub Jelinek wrote:

> On Tue, May 29, 2018 at 11:15:51AM +0200, Richard Biener wrote:
> > Looking at other examples the only thing we have is
> > maybe_ne and friends on TYPE_VECTOR_SUBPARTS.  But I think the only
> > thing missing is
> > 
> >  || (maybe_ne (TYPE_VECTOR_SUBPARTS (lhs_type),
> >            2 * TYPE_VECTOR_SUBPARTS (rhs_type)))
> > 
> > that together with the mode size check should ensure same size
> > vectors.
> 
> The other way around.  It would then be (and I've added similar tests for
> VEC_PACK*):

Ah, of course...

OK if it tests ok.

Thanks,
Richard.

> 2018-05-29  Jakub Jelinek  <ja...@redhat.com>
> 
>       * tree-cfg.c (verify_gimple_assign_unary): Add checking for
>       VEC_UNPACK_*_EXPR.
>       (verify_gimple_assign_binary): Check TYPE_VECTOR_SUBPARTS for
>       VEC_PACK_*_EXPR.
> 
> --- gcc/tree-cfg.c.jj 2018-05-28 19:47:55.180685259 +0200
> +++ gcc/tree-cfg.c    2018-05-29 11:27:14.521339290 +0200
> @@ -3678,7 +3678,37 @@ verify_gimple_assign_unary (gassign *stm
>      case VEC_UNPACK_FLOAT_LO_EXPR:
>      case VEC_UNPACK_FIX_TRUNC_HI_EXPR:
>      case VEC_UNPACK_FIX_TRUNC_LO_EXPR:
> -      /* FIXME.  */
> +      if (TREE_CODE (rhs1_type) != VECTOR_TYPE
> +          || TREE_CODE (lhs_type) != VECTOR_TYPE
> +          || (!INTEGRAL_TYPE_P (TREE_TYPE (lhs_type))
> +           && !SCALAR_FLOAT_TYPE_P (TREE_TYPE (lhs_type)))
> +          || (!INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
> +           && !SCALAR_FLOAT_TYPE_P (TREE_TYPE (rhs1_type)))
> +       || ((rhs_code == VEC_UNPACK_HI_EXPR
> +            || rhs_code == VEC_UNPACK_LO_EXPR)
> +           && (INTEGRAL_TYPE_P (TREE_TYPE (lhs_type))
> +               != INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))))
> +       || ((rhs_code == VEC_UNPACK_FLOAT_HI_EXPR
> +            || rhs_code == VEC_UNPACK_FLOAT_LO_EXPR)
> +           && (INTEGRAL_TYPE_P (TREE_TYPE (lhs_type))
> +               || SCALAR_FLOAT_TYPE_P (TREE_TYPE (rhs1_type))))
> +       || ((rhs_code == VEC_UNPACK_FIX_TRUNC_HI_EXPR
> +            || rhs_code == VEC_UNPACK_FIX_TRUNC_LO_EXPR)
> +           && (INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
> +               || SCALAR_FLOAT_TYPE_P (TREE_TYPE (lhs_type))))
> +       || (maybe_ne (GET_MODE_SIZE (element_mode (lhs_type)),
> +                     2 * GET_MODE_SIZE (element_mode (rhs1_type)))
> +           && (!VECTOR_BOOLEAN_TYPE_P (lhs_type)
> +               || !VECTOR_BOOLEAN_TYPE_P (rhs1_type)))
> +       || maybe_ne (2 * TYPE_VECTOR_SUBPARTS (lhs_type),
> +                    TYPE_VECTOR_SUBPARTS (rhs1_type)))
> +     {
> +       error ("type mismatch in vector unpack expression");
> +       debug_generic_expr (lhs_type);
> +       debug_generic_expr (rhs1_type);
> +       return true;
> +        }
> +
>        return false;
>  
>      case NEGATE_EXPR:
> @@ -3993,7 +4023,9 @@ verify_gimple_assign_binary (gassign *st
>                    == INTEGRAL_TYPE_P (TREE_TYPE (lhs_type))))
>           || !types_compatible_p (rhs1_type, rhs2_type)
>           || maybe_ne (GET_MODE_SIZE (element_mode (rhs1_type)),
> -                      2 * GET_MODE_SIZE (element_mode (lhs_type))))
> +                      2 * GET_MODE_SIZE (element_mode (lhs_type)))
> +         || maybe_ne (2 * TYPE_VECTOR_SUBPARTS (rhs1_type),
> +                      TYPE_VECTOR_SUBPARTS (lhs_type)))
>            {
>              error ("type mismatch in vector pack expression");
>              debug_generic_expr (lhs_type);
> @@ -4012,7 +4044,9 @@ verify_gimple_assign_binary (gassign *st
>         || !SCALAR_FLOAT_TYPE_P (TREE_TYPE (lhs_type))
>         || !types_compatible_p (rhs1_type, rhs2_type)
>         || maybe_ne (GET_MODE_SIZE (element_mode (rhs1_type)),
> -                    2 * GET_MODE_SIZE (element_mode (lhs_type))))
> +                    2 * GET_MODE_SIZE (element_mode (lhs_type)))
> +       || maybe_ne (2 * TYPE_VECTOR_SUBPARTS (rhs1_type),
> +                    TYPE_VECTOR_SUBPARTS (lhs_type)))
>       {
>         error ("type mismatch in vector pack expression");
>         debug_generic_expr (lhs_type);
> 
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to