mirror of git://gcc.gnu.org/git/gcc.git
Revert this patch:
2005-09-15 Paolo Bonzini <bonzini@gnu.org> * optabs.c (expand_binop): Use swap_commutative_operands_with_target to order operands. (swap_commutative_operands_with_target): New. From-SVN: r104775
This commit is contained in:
parent
02eb875fcf
commit
be1ea09b13
|
|
@ -1,3 +1,13 @@
|
||||||
|
2005-09-29 Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
|
Revert this patch:
|
||||||
|
|
||||||
|
2005-09-15 Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
|
* optabs.c (expand_binop): Use swap_commutative_operands_with_target
|
||||||
|
to order operands.
|
||||||
|
(swap_commutative_operands_with_target): New.
|
||||||
|
|
||||||
2005-09-29 Paolo Bonzini <bonzini@gnu.org>
|
2005-09-29 Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
PR c/21419
|
PR c/21419
|
||||||
|
|
|
||||||
35
gcc/optabs.c
35
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 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
|
/* Generate code to perform an operation specified by BINOPTAB
|
||||||
on operands OP0 and OP1, with result having machine-mode MODE.
|
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. */
|
/* Record where to delete back to if we backtrack. */
|
||||||
last = get_last_insn ();
|
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
|
if (GET_RTX_CLASS (binoptab->code) == RTX_COMM_ARITH
|
||||||
|| binoptab == smul_widen_optab
|
|| binoptab == smul_widen_optab
|
||||||
|| binoptab == umul_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)
|
|| binoptab == umul_highpart_optab)
|
||||||
{
|
{
|
||||||
commutative_op = 1;
|
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;
|
temp = op1;
|
||||||
op1 = op0;
|
op1 = op0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue