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

plus_constant as appropriate.

From-SVN: r6283
This commit is contained in:
Richard Kenner 1993-12-23 17:14:26 -05:00
parent 5d49bd0cf2
commit ea87523e22
1 changed files with 14 additions and 1 deletions

View File

@ -4870,6 +4870,9 @@ expand_expr (exp, target, tmode, modifier)
return temp ? temp : gen_rtx (PLUS, mode, op0, op1);
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,
for the sake of an initializer. */
if ((modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
@ -4880,7 +4883,17 @@ expand_expr (exp, target, tmode, modifier)
VOIDmode, modifier);
rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX,
VOIDmode, modifier);
return gen_rtx (MINUS, mode, op0, op1);
/* 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);
}
/* Convert A - const to A + (-const). */
if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST)