Commit ea87523e by Richard Kenner

(expand_expr, case MINUS_EXPR): When expanding an initializer, use

plus_constant as appropriate.

From-SVN: r6283
parent 5d49bd0c
...@@ -4870,6 +4870,9 @@ expand_expr (exp, target, tmode, modifier) ...@@ -4870,6 +4870,9 @@ expand_expr (exp, target, tmode, modifier)
return temp ? temp : gen_rtx (PLUS, mode, op0, op1); return temp ? temp : gen_rtx (PLUS, mode, op0, op1);
case MINUS_EXPR: case MINUS_EXPR:
/* For initializers, we are allowed to return a MINUS of two
symbolic constants. Here we handle all cases when both operands
are constant. */
/* Handle difference of two symbolic constants, /* Handle difference of two symbolic constants,
for the sake of an initializer. */ for the sake of an initializer. */
if ((modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) if ((modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
...@@ -4880,6 +4883,16 @@ expand_expr (exp, target, tmode, modifier) ...@@ -4880,6 +4883,16 @@ expand_expr (exp, target, tmode, modifier)
VOIDmode, modifier); VOIDmode, modifier);
rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX,
VOIDmode, modifier); VOIDmode, modifier);
/* If one operand is a CONST_INT, put it last. */
if (GET_CODE (op0) == CONST_INT)
temp = op0, op0 = op1, op1 = temp;
/* If the last operand is a CONST_INT, use plus_constant of
the negated constant. Else make the MINUS. */
if (GET_CODE (op1) == CONST_INT)
return plus_constant (op0, - INTVAL (op1));
else
return gen_rtx (MINUS, mode, op0, op1); return gen_rtx (MINUS, mode, op0, op1);
} }
/* Convert A - const to A + (-const). */ /* Convert A - const to A + (-const). */
......
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