Commit b2796a4b by Richard Kenner

(find_comparison_args): Look for comparison operations if the second arg is 0 in any mode.

(find_comparison_args): Look for comparison operations if the second arg is
0 in any mode.
(record_jump_cond): Don't make classes equivalent for floating-point equality
comparison.

From-SVN: r1900
parent 7fe4336e
...@@ -2639,7 +2639,7 @@ find_comparison_args (code, parg1, parg2) ...@@ -2639,7 +2639,7 @@ find_comparison_args (code, parg1, parg2)
/* If ARG2 is const0_rtx, see what ARG1 is equivalent to. */ /* If ARG2 is const0_rtx, see what ARG1 is equivalent to. */
while (arg2 == const0_rtx) while (arg2 == CONST0_RTX (GET_MODE (arg1)))
{ {
/* Set non-zero when we find something of interest. */ /* Set non-zero when we find something of interest. */
rtx x = 0; rtx x = 0;
...@@ -5366,8 +5366,12 @@ record_jump_cond (code, mode, op0, op1, reversed_nonequality) ...@@ -5366,8 +5366,12 @@ record_jump_cond (code, mode, op0, op1, reversed_nonequality)
op1_elt = lookup (op1, op1_hash_code, mode); op1_elt = lookup (op1, op1_hash_code, mode);
/* If we aren't setting two things equal all we can do is save this /* If we aren't setting two things equal all we can do is save this
comparison. */ comparison. Similarly if this is floating-point. In the latter
if (code != EQ) case, OP1 might be zero and both -0.0 and 0.0 are equal to it.
If we record the equality, we might inadvertently delete code
whose intent was to change -0 to +0. */
if (code != EQ || GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT)
{ {
/* If we reversed a floating-point comparison, if OP0 is not a /* If we reversed a floating-point comparison, if OP0 is not a
register, or if OP1 is neither a register or constant, we can't register, or if OP1 is neither a register or constant, we can't
......
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