Commit aeedc93f by Richard Stallman

*** empty log message ***

From-SVN: r779
parent 19c98942
......@@ -66,26 +66,26 @@ init_expmed ()
rtx lea;
int i, dummy;
add_cost = rtx_cost (gen_rtx (PLUS, word_mode, reg, reg));
add_cost = rtx_cost (gen_rtx (PLUS, word_mode, reg, reg), SET);
shift_cost = rtx_cost (gen_rtx (LSHIFT, word_mode, reg,
/* Using a constant gives better
estimate of typical costs.
1 or 2 might have quirks. */
gen_rtx (CONST_INT, VOIDmode, 3)));
mult_cost = rtx_cost (gen_rtx (MULT, word_mode, reg, reg));
negate_cost = rtx_cost (gen_rtx (NEG, word_mode, reg));
gen_rtx (CONST_INT, VOIDmode, 3)), SET);
mult_cost = rtx_cost (gen_rtx (MULT, word_mode, reg, reg), SET);
negate_cost = rtx_cost (gen_rtx (NEG, word_mode, reg), SET);
/* 999999 is chosen to avoid any plausible faster special case. */
mult_is_very_cheap
= (rtx_cost (gen_rtx (MULT, word_mode, reg,
gen_rtx (CONST_INT, VOIDmode, 999999)))
gen_rtx (CONST_INT, VOIDmode, 999999)), SET)
< rtx_cost (gen_rtx (LSHIFT, word_mode, reg,
gen_rtx (CONST_INT, VOIDmode, 7))));
gen_rtx (CONST_INT, VOIDmode, 7)), SET));
sdiv_pow2_cheap
= rtx_cost (gen_rtx (DIV, word_mode, reg, pow2)) <= 2 * add_cost;
= rtx_cost (gen_rtx (DIV, word_mode, reg, pow2), SET) <= 2 * add_cost;
smod_pow2_cheap
= rtx_cost (gen_rtx (MOD, word_mode, reg, pow2)) <= 2 * add_cost;
= rtx_cost (gen_rtx (MOD, word_mode, reg, pow2), SET) <= 2 * add_cost;
init_recog ();
for (i = 2;; i <<= 1)
......@@ -100,7 +100,7 @@ init_expmed ()
if (recog (lea, 0, &dummy) < 0)
break;
lea_max_mul = i;
lea_cost = rtx_cost (SET_SRC (lea));
lea_cost = rtx_cost (SET_SRC (lea), SET);
}
/* Free the objects we just allocated. */
......
......@@ -229,10 +229,12 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
/* 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 () && rtx_cost (op0) > 2)
if (CONSTANT_P (op0) && preserve_subexpressions_p ()
&& rtx_cost (op0, binoptab->code) > 2)
op0 = force_reg (mode, op0);
if (CONSTANT_P (op1) && preserve_subexpressions_p () && rtx_cost (op1) > 2)
if (CONSTANT_P (op1) && preserve_subexpressions_p ()
&& 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. */
......@@ -871,10 +873,12 @@ expand_twoval_binop (binoptab, op0, op1, targ0, targ1, unsignedp)
/* 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 () && rtx_cost (op0) > 2)
if (CONSTANT_P (op0) && preserve_subexpressions_p ()
&& rtx_cost (op0, binoptab->code) > 2)
op0 = force_reg (mode, op0);
if (CONSTANT_P (op1) && preserve_subexpressions_p () && rtx_cost (op1) > 2)
if (CONSTANT_P (op1) && preserve_subexpressions_p ()
&& rtx_cost (op1, binoptab->code) > 2)
op1 = force_reg (mode, op1);
if (targ0)
......@@ -1450,10 +1454,10 @@ emit_cmp_insn (x, y, comparison, size, mode, unsignedp, align)
/* If we are inside an appropriately-short loop and one operand is an
expensive constant, force it into a register. */
if (CONSTANT_P (x) && preserve_subexpressions_p () && rtx_cost (x) > 2)
if (CONSTANT_P (x) && preserve_subexpressions_p () && rtx_cost (x, COMPARE) > 2)
x = force_reg (mode, x);
if (CONSTANT_P (y) && preserve_subexpressions_p () && rtx_cost (y) > 2)
if (CONSTANT_P (y) && preserve_subexpressions_p () && rtx_cost (y, COMPARE) > 2)
y = force_reg (mode, y);
/* Don't let both operands fail to indicate the mode. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment