aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-04-29 18:03:58 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-04-29 18:03:58 +0000
commit1fe479fd50d258f09443c50fe2547a6e45b0bb5f (patch)
tree8f3fe70526785c92b8d30116c2b5c889fb7d961f /gcc/tree-cfg.c
parent8e0016807818e6109f61ae825826b9ea10b093c9 (diff)
downloadgcc-1fe479fd50d258f09443c50fe2547a6e45b0bb5f.zip
gcc-1fe479fd50d258f09443c50fe2547a6e45b0bb5f.tar.gz
gcc-1fe479fd50d258f09443c50fe2547a6e45b0bb5f.tar.bz2
tree-cfg.c (verify_gimple_assign_binary): Allow vector shifts of floating point vectors if...
2009-04-29 Richard Guenther <rguenther@suse.de> * tree-cfg.c (verify_gimple_assign_binary): Allow vector shifts of floating point vectors if the shift amount is a constant multiple of the element size. From-SVN: r146983
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 0ef2fb9..b5c67cd8 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3560,7 +3560,8 @@ verify_gimple_assign_binary (gimple stmt)
{
if (TREE_CODE (rhs1_type) != VECTOR_TYPE
|| !(INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
- || FIXED_POINT_TYPE_P (TREE_TYPE (rhs1_type)))
+ || FIXED_POINT_TYPE_P (TREE_TYPE (rhs1_type))
+ || SCALAR_FLOAT_TYPE_P (TREE_TYPE (rhs1_type)))
|| (!INTEGRAL_TYPE_P (rhs2_type)
&& (TREE_CODE (rhs2_type) != VECTOR_TYPE
|| !INTEGRAL_TYPE_P (TREE_TYPE (rhs2_type))))
@@ -3572,6 +3573,16 @@ verify_gimple_assign_binary (gimple stmt)
debug_generic_expr (rhs2_type);
return true;
}
+ /* For shifting a vector of floating point components we
+ only allow shifting by a constant multiple of the element size. */
+ if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (rhs1_type))
+ && (TREE_CODE (rhs2) != INTEGER_CST
+ || !div_if_zero_remainder (EXACT_DIV_EXPR, rhs2,
+ TYPE_SIZE (TREE_TYPE (rhs1_type)))))
+ {
+ error ("non-element sized vector shift of floating point vector");
+ return true;
+ }
return false;
}