aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-05-29 14:01:26 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-05-29 14:01:26 +0200
commite379122d1f078d230514ff862c4f9053c2898af4 (patch)
tree2e775f122d97f10e38b00212892c83eee50f1aec /gcc
parent1bda738bab8193f0fb4551672d3be928d2015cd2 (diff)
downloadgcc-e379122d1f078d230514ff862c4f9053c2898af4.zip
gcc-e379122d1f078d230514ff862c4f9053c2898af4.tar.gz
gcc-e379122d1f078d230514ff862c4f9053c2898af4.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-cfg.c40
2 files changed, 42 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6a3747c..2a3094b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index ab2feed..4a1b2be 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -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);