tree-cfg.c (verify_gimple_assign_unary): Add checking for VEC_UNPACK_*_EXPR.

* 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.

From-SVN: r260894
This commit is contained in:
Jakub Jelinek 2018-05-29 14:01:26 +02:00 committed by Jakub Jelinek
parent 1bda738bab
commit e379122d1f
2 changed files with 42 additions and 3 deletions

View File

@ -1,5 +1,10 @@
2018-05-29 Jakub Jelinek <jakub@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.
PR target/85918
* tree.def (VEC_UNPACK_FIX_TRUNC_HI_EXPR, VEC_UNPACK_FIX_TRUNC_LO_EXPR,
VEC_PACK_FLOAT_EXPR): New tree codes.

View File

@ -3678,7 +3678,37 @@ verify_gimple_assign_unary (gassign *stmt)
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 *stmt)
== 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 *stmt)
|| !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);