Commit 87e3e0c1 by Richard Kenner

(simplify_rtx, case SUBREG): Don't call force_to_mode.

(simplify_set): Call force_to_mode here.

From-SVN: r7216
parent 83a24b1d
...@@ -3260,16 +3260,10 @@ simplify_rtx (x, op0_mode, last, in_dest) ...@@ -3260,16 +3260,10 @@ simplify_rtx (x, op0_mode, last, in_dest)
&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (op0_mode)) && GET_MODE_SIZE (mode) > GET_MODE_SIZE (op0_mode))
return SUBREG_REG (x); return SUBREG_REG (x);
/* If we are narrowing an integral object, we need to see if we can /* Note that we cannot do any narrowing for non-constants since
simplify the expression for the object knowing that we only need the we might have been counting on using the fact that some bits were
low-order bits. */ zero. We now do this in the SET. */
if (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_INT
&& GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))
&& subreg_lowpart_p (x))
return force_to_mode (SUBREG_REG (x), mode, GET_MODE_MASK (mode),
NULL_RTX, 0);
break; break;
case NOT: case NOT:
...@@ -4201,6 +4195,13 @@ simplify_set (x) ...@@ -4201,6 +4195,13 @@ simplify_set (x)
if (GET_CODE (dest) == PC && GET_CODE (src) == RETURN) if (GET_CODE (dest) == PC && GET_CODE (src) == RETURN)
return src; return src;
/* Now that we know for sure which bits of SRC we are using, see if we can
simplify the expression for the object knowing that we only need the
low-order bits. */
if (GET_MODE_CLASS (mode) == MODE_INT)
src = force_to_mode (src, mode, GET_MODE_MASK (mode), NULL_RTX, 0);
/* Convert this into a field assignment operation, if possible. */ /* Convert this into a field assignment operation, if possible. */
x = make_field_assignment (x); x = make_field_assignment (x);
......
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