diff options
author | Richard Guenther <rguenther@suse.de> | 2009-04-29 18:03:58 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-04-29 18:03:58 +0000 |
commit | 1fe479fd50d258f09443c50fe2547a6e45b0bb5f (patch) | |
tree | 8f3fe70526785c92b8d30116c2b5c889fb7d961f /gcc/tree-cfg.c | |
parent | 8e0016807818e6109f61ae825826b9ea10b093c9 (diff) | |
download | gcc-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.c | 13 |
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; } |