From: Paolo Bonzini Date: Thu, 29 Sep 2005 14:57:23 +0000 (+0000) Subject: Revert this patch: X-Git-Tag: misc/cutover-cvs2svn~412 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be1ea09b13ab5de0aed1ea8f507565bfc64be116;p=thirdparty%2Fgcc.git Revert this patch: 2005-09-15 Paolo Bonzini * optabs.c (expand_binop): Use swap_commutative_operands_with_target to order operands. (swap_commutative_operands_with_target): New. From-SVN: r104775 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2d793e03d12b..ebedfcacf59d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-09-29 Paolo Bonzini + + Revert this patch: + + 2005-09-15 Paolo Bonzini + + * optabs.c (expand_binop): Use swap_commutative_operands_with_target + to order operands. + (swap_commutative_operands_with_target): New. + 2005-09-29 Paolo Bonzini PR c/21419 diff --git a/gcc/optabs.c b/gcc/optabs.c index bc8592052796..70cf2b4de2e5 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -998,28 +998,6 @@ expand_simple_binop (enum machine_mode mode, enum rtx_code code, rtx op0, return expand_binop (mode, binop, op0, op1, target, unsignedp, methods); } - -/* Return whether OP0 and OP1 should be swapped when expanding a commutative - binop. Order them according to commutative_operand_precedence and, if - possible, try to put TARGET first. */ -static bool -swap_commutative_operands_with_target (rtx target, rtx op0, rtx op1) -{ - int op0_prec = commutative_operand_precedence (op0); - int op1_prec = commutative_operand_precedence (op1); - - if (op0_prec < op1_prec) - return true; - - if (op0_prec > op1_prec) - return false; - - /* With equal precedence, both orders are ok, but try to put the - target first. */ - return target && rtx_equal_p (op1, target); -} - - /* Generate code to perform an operation specified by BINOPTAB on operands OP0 and OP1, with result having machine-mode MODE. @@ -1083,7 +1061,10 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, /* Record where to delete back to if we backtrack. */ last = get_last_insn (); - /* If operation is commutative, canonicalize the order of the operands. */ + /* If operation is commutative, + try to make the first operand a register. + Even better, try to make it the same as the target. + Also try to make the last operand a constant. */ if (GET_RTX_CLASS (binoptab->code) == RTX_COMM_ARITH || binoptab == smul_widen_optab || binoptab == umul_widen_optab @@ -1091,7 +1072,13 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, || binoptab == umul_highpart_optab) { commutative_op = 1; - if (swap_commutative_operands_with_target (target, op0, op1)) + + if (((target == 0 || REG_P (target)) + ? ((REG_P (op1) + && !REG_P (op0)) + || target == op1) + : rtx_equal_p (op1, target)) + || GET_CODE (op0) == CONST_INT) { temp = op1; op1 = op0;