From 2ca9ae17a98002c6e244d66acea052d25770e0dc Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 26 Apr 1995 11:08:54 -0700 Subject: [PATCH] (simplify_rtx, case TRUNCATE): Add. Use force_to_mode. (force_to_mode, case AND): Allow some simplifications when GET_MODE (x) has more bits than HOST_BITS_PER_WIDE_INT. From-SVN: r9479 --- gcc/combine.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gcc/combine.c b/gcc/combine.c index 9d355cb..827141c 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3447,6 +3447,13 @@ simplify_rtx (x, op0_mode, last, in_dest) } break; + case TRUNCATE: + if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) + SUBST (XEXP (x, 0), + force_to_mode (XEXP (x, 0), GET_MODE (XEXP (x, 0)), + GET_MODE_MASK (mode), NULL_RTX, 0)); + break; + case FLOAT_TRUNCATE: /* (float_truncate:SF (float_extend:DF foo:SF)) = foo:SF. */ if (GET_CODE (XEXP (x, 0)) == FLOAT_EXTEND @@ -5765,8 +5772,7 @@ force_to_mode (x, mode, mask, reg, just_select) whose constant is the AND of that constant with MASK. If it remains an AND of MASK, delete it since it is redundant. */ - if (GET_CODE (XEXP (x, 1)) == CONST_INT - && GET_MODE_BITSIZE (GET_MODE (x)) <= HOST_BITS_PER_WIDE_INT) + if (GET_CODE (XEXP (x, 1)) == CONST_INT) { x = simplify_and_const_int (x, op_mode, XEXP (x, 0), mask & INTVAL (XEXP (x, 1))); @@ -5785,7 +5791,8 @@ force_to_mode (x, mode, mask, reg, just_select) cheaper constant. */ if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT - && GET_MODE_MASK (GET_MODE (x)) != mask) + && GET_MODE_MASK (GET_MODE (x)) != mask + && GET_MODE_BITSIZE (GET_MODE (x)) <= HOST_BITS_PER_WIDE_INT) { HOST_WIDE_INT cval = (INTVAL (XEXP (x, 1)) | (GET_MODE_MASK (GET_MODE (x)) & ~ mask)); -- 2.7.4