Commit 246e00f2 by Richard Kenner

(simplify_set): Move call to make_field_assignment to end; if SRC or DEST is a…

(simplify_set): Move call to make_field_assignment to end; if SRC or DEST is a (clobber (const_int 0)), return it.

(simplify_set): Move call to make_field_assignment to end; if SRC or DEST is
a (clobber (const_int 0)), return it.
(force_to_mode): If X is a CALL, just return it.

From-SVN: r7323
parent c0d3ac4d
...@@ -4196,9 +4196,6 @@ simplify_set (x) ...@@ -4196,9 +4196,6 @@ simplify_set (x)
if (GET_MODE_CLASS (mode) == MODE_INT) if (GET_MODE_CLASS (mode) == MODE_INT)
src = force_to_mode (src, mode, GET_MODE_MASK (mode), NULL_RTX, 0); src = force_to_mode (src, mode, GET_MODE_MASK (mode), NULL_RTX, 0);
/* Convert this into a field assignment operation, if possible. */
x = make_field_assignment (x);
/* If we are setting CC0 or if the source is a COMPARE, look for the use of /* If we are setting CC0 or if the source is a COMPARE, look for the use of
the comparison result and try to simplify it unless we already have used the comparison result and try to simplify it unless we already have used
undobuf.other_insn. */ undobuf.other_insn. */
...@@ -4435,7 +4432,15 @@ simplify_set (x) ...@@ -4435,7 +4432,15 @@ simplify_set (x)
} }
#endif #endif
return x; /* If either SRC or DEST is a CLOBBER of (const_int 0), make this
whole thing fail. */
if (GET_CODE (src) == CLOBBER && XEXP (src, 0) == const0_rtx)
return src;
else if (GET_CODE (dest) == CLOBBER && XEXP (dest, 0) == const0_rtx)
return dest;
else
/* Convert this into a field assignment operation, if possible. */
return make_field_assignment (x);
} }
/* Simplify, X, and AND, IOR, or XOR operation, and return the simplified /* Simplify, X, and AND, IOR, or XOR operation, and return the simplified
...@@ -5632,6 +5637,11 @@ force_to_mode (x, mode, mask, reg, just_select) ...@@ -5632,6 +5637,11 @@ force_to_mode (x, mode, mask, reg, just_select)
unsigned HOST_WIDE_INT fuller_mask, nonzero; unsigned HOST_WIDE_INT fuller_mask, nonzero;
rtx op0, op1, temp; rtx op0, op1, temp;
/* If this is a CALL, don't do anything. Some of the code below
will do the wrong thing since the mode of a CALL is VOIDmode. */
if (code == CALL)
return x;
/* We want to perform the operation is its present mode unless we know /* We want to perform the operation is its present mode unless we know
that the operation is valid in MODE, in which case we do the operation that the operation is valid in MODE, in which case we do the operation
in MODE. */ in MODE. */
......
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