(expand_binop): Convert X - C to X + (-C).
From-SVN: r2278
This commit is contained in:
parent
7f11183e26
commit
8aecce0a61
22
gcc/optabs.c
22
gcc/optabs.c
|
@ -297,6 +297,15 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
|
|||
op1 = force_not_mem (op1);
|
||||
}
|
||||
|
||||
/* If subtracting an integer constant, convert this into an addition of
|
||||
the negated constant. */
|
||||
|
||||
if (binoptab == sub_optab && GET_CODE (op1) == CONST_INT)
|
||||
{
|
||||
op1 = negate_rtx (mode, op1);
|
||||
binoptab = add_optab;
|
||||
}
|
||||
|
||||
/* If we are inside an appropriately-short loop and one operand is an
|
||||
expensive constant, force it into a register. */
|
||||
if (CONSTANT_P (op0) && preserve_subexpressions_p ()
|
||||
|
@ -307,19 +316,6 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
|
|||
&& rtx_cost (op1, binoptab->code) > 2)
|
||||
op1 = force_reg (shift_op ? word_mode : mode, op1);
|
||||
|
||||
#if 0 /* Turned off because it seems to be a kludgy method. */
|
||||
/* If subtracting integer from pointer, and the pointer has a special mode,
|
||||
then change it to an add. We use the add insn of Pmode for combining
|
||||
integers with pointers, and the sub insn to subtract two pointers. */
|
||||
|
||||
if (binoptab == sub_optab
|
||||
&& GET_MODE (op0) == Pmode && GET_MODE (op1) != Pmode)
|
||||
{
|
||||
op1 = negate_rtx (GET_MODE(op1), op1);
|
||||
binoptab = add_optab;
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
/* Record where to delete back to if we backtrack. */
|
||||
last = get_last_insn ();
|
||||
|
||||
|
|
Loading…
Reference in New Issue