Commit 2ca9ae17 by Jim Wilson

(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
parent 99f762bf
...@@ -3447,6 +3447,13 @@ simplify_rtx (x, op0_mode, last, in_dest) ...@@ -3447,6 +3447,13 @@ simplify_rtx (x, op0_mode, last, in_dest)
} }
break; 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: case FLOAT_TRUNCATE:
/* (float_truncate:SF (float_extend:DF foo:SF)) = foo:SF. */ /* (float_truncate:SF (float_extend:DF foo:SF)) = foo:SF. */
if (GET_CODE (XEXP (x, 0)) == FLOAT_EXTEND if (GET_CODE (XEXP (x, 0)) == FLOAT_EXTEND
...@@ -5765,8 +5772,7 @@ force_to_mode (x, mode, mask, reg, just_select) ...@@ -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 whose constant is the AND of that constant with MASK. If it
remains an AND of MASK, delete it since it is redundant. */ remains an AND of MASK, delete it since it is redundant. */
if (GET_CODE (XEXP (x, 1)) == CONST_INT if (GET_CODE (XEXP (x, 1)) == CONST_INT)
&& GET_MODE_BITSIZE (GET_MODE (x)) <= HOST_BITS_PER_WIDE_INT)
{ {
x = simplify_and_const_int (x, op_mode, XEXP (x, 0), x = simplify_and_const_int (x, op_mode, XEXP (x, 0),
mask & INTVAL (XEXP (x, 1))); mask & INTVAL (XEXP (x, 1)));
...@@ -5785,7 +5791,8 @@ force_to_mode (x, mode, mask, reg, just_select) ...@@ -5785,7 +5791,8 @@ force_to_mode (x, mode, mask, reg, just_select)
cheaper constant. */ cheaper constant. */
if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT 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)) HOST_WIDE_INT cval = (INTVAL (XEXP (x, 1))
| (GET_MODE_MASK (GET_MODE (x)) & ~ mask)); | (GET_MODE_MASK (GET_MODE (x)) & ~ mask));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment