Commit b65c1b5b by Richard Kenner

(subst, case SUBREG): Handle paradoxical SUBREG of constant.

(IF_THEN_ELSE): Add missing "else" and check for comparison before
calling reversible_comparison_p.

From-SVN: r6419
parent 127e4d19
...@@ -3216,6 +3216,12 @@ subst (x, from, to, in_dest, unique_copy) ...@@ -3216,6 +3216,12 @@ subst (x, from, to, in_dest, unique_copy)
) )
return gen_lowpart_for_combine (mode, SUBREG_REG (x)); return gen_lowpart_for_combine (mode, SUBREG_REG (x));
/* A paradoxical SUBREG of a VOIDmode constant is the same constant,
since we are saying that the high bits don't matter. */
if (CONSTANT_P (SUBREG_REG (x)) && GET_MODE (SUBREG_REG (x)) == VOIDmode
&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (op0_mode))
return SUBREG_REG (x);
/* If we are narrowing an integral object, we need to see if we can /* If we are narrowing an integral object, we need to see if we can
simplify the expression for the object knowing that we only need the simplify the expression for the object knowing that we only need the
low-order bits. */ low-order bits. */
...@@ -4002,7 +4008,8 @@ subst (x, from, to, in_dest, unique_copy) ...@@ -4002,7 +4008,8 @@ subst (x, from, to, in_dest, unique_copy)
m = GET_MODE (XEXP (t, 0)); m = GET_MODE (XEXP (t, 0));
} }
if (reversible_comparison_p (XEXP (x, 0)) else if (GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == '<'
&& reversible_comparison_p (XEXP (x, 0))
&& (GET_CODE (f) == PLUS || GET_CODE (f) == MINUS && (GET_CODE (f) == PLUS || GET_CODE (f) == MINUS
|| GET_CODE (f) == IOR || GET_CODE (f) == XOR || GET_CODE (f) == IOR || GET_CODE (f) == XOR
|| GET_CODE (f) == ASHIFT || GET_CODE (f) == ASHIFT
......
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