aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2009-01-04 22:14:39 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2009-01-04 22:14:39 +0000
commit0009b473a0fe5c76e303f1cc34251df0cba2d478 (patch)
tree2afc7059c58e4a4029cc635e870740de81b70352
parent4f24c6d62f0818c402bcffb78186d1a64f2c5d1c (diff)
downloadgcc-0009b473a0fe5c76e303f1cc34251df0cba2d478.zip
gcc-0009b473a0fe5c76e303f1cc34251df0cba2d478.tar.gz
gcc-0009b473a0fe5c76e303f1cc34251df0cba2d478.tar.bz2
tree.def (LSHIFT_EXPR, [...]): Add commentary.
gcc/ * tree.def (LSHIFT_EXPR, RSHIFT_EXPR): Add commentary. * tree-cfg.c (verify_gimple_assign_binary): Allow shifts of fixed-point types, and vectors of the same. From-SVN: r143061
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-cfg.c9
-rw-r--r--gcc/tree.def8
3 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 032f028..d7056f3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2009-01-04 Richard Sandiford <rdsandiford@googlemail.com>
+ * tree.def (LSHIFT_EXPR, RSHIFT_EXPR): Add commentary.
+ * tree-cfg.c (verify_gimple_assign_binary): Allow shifts of
+ fixed-point types, and vectors of the same.
+
+2009-01-04 Richard Sandiford <rdsandiford@googlemail.com>
+
* config/mips/sync.md (*mb_barrier): Rename to...
(*memory_barrier): ...this.
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 3def9a2..875d123 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3474,6 +3474,12 @@ verify_gimple_assign_binary (gimple stmt)
case LSHIFT_EXPR:
case RSHIFT_EXPR:
+ if (FIXED_POINT_TYPE_P (rhs1_type)
+ && INTEGRAL_TYPE_P (rhs2_type)
+ && useless_type_conversion_p (lhs_type, rhs1_type))
+ return false;
+ /* Fall through. */
+
case LROTATE_EXPR:
case RROTATE_EXPR:
{
@@ -3495,7 +3501,8 @@ verify_gimple_assign_binary (gimple stmt)
case VEC_RSHIFT_EXPR:
{
if (TREE_CODE (rhs1_type) != VECTOR_TYPE
- || !INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
+ || !(INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
+ || FIXED_POINT_TYPE_P (TREE_TYPE (rhs1_type)))
|| (!INTEGRAL_TYPE_P (rhs2_type)
&& (TREE_CODE (rhs2_type) != VECTOR_TYPE
|| !INTEGRAL_TYPE_P (TREE_TYPE (rhs2_type))))
diff --git a/gcc/tree.def b/gcc/tree.def
index 3e077cc..19a5029 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -691,7 +691,13 @@ DEFTREECODE (ABS_EXPR, "abs_expr", tcc_unary, 1)
The second operand is the number of bits to
shift by; it need not be the same type as the first operand and result.
Note that the result is undefined if the second operand is larger
- than or equal to the first operand's type size. */
+ than or equal to the first operand's type size.
+
+ The first operand of a shift can have either an integer or a
+ (non-integer) fixed-point type. We follow the ISO/IEC TR 18037:2004
+ semantics for the latter.
+
+ Rotates are defined for integer types only. */
DEFTREECODE (LSHIFT_EXPR, "lshift_expr", tcc_binary, 2)
DEFTREECODE (RSHIFT_EXPR, "rshift_expr", tcc_binary, 2)
DEFTREECODE (LROTATE_EXPR, "lrotate_expr", tcc_binary, 2)