From 8aecce0a61795105b4bcd0eea2d4d5ad74a54eca Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Tue, 29 Sep 1992 10:14:19 -0400 Subject: [PATCH] (expand_binop): Convert X - C to X + (-C). From-SVN: r2278 --- gcc/optabs.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/gcc/optabs.c b/gcc/optabs.c index cabab7f449e..82f10780e40 100644 --- a/gcc/optabs.c +++ b/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 (); -- 2.30.2