mirror of git://gcc.gnu.org/git/gcc.git
lower-subreg.c (shift_cost): Use set_src_cost, avoiding the SET.
gcc/ * lower-subreg.c (shift_cost): Use set_src_cost, avoiding the SET. (compute_costs): Likewise for the zero extension. Use set_rtx_cost to compute the cost of moves. Set the mode of the target register. From-SVN: r187212
This commit is contained in:
parent
4fe977f2d6
commit
69523a7c89
|
@ -1,3 +1,9 @@
|
||||||
|
2012-05-06 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
|
* lower-subreg.c (shift_cost): Use set_src_cost, avoiding the SET.
|
||||||
|
(compute_costs): Likewise for the zero extension. Use set_rtx_cost
|
||||||
|
to compute the cost of moves. Set the mode of the target register.
|
||||||
|
|
||||||
2012-05-05 Richard Sandiford <rdsandiford@googlemail.com>
|
2012-05-05 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* rtl.h (plus_constant, plus_constant_mode): Merge into a single
|
* rtl.h (plus_constant, plus_constant_mode): Merge into a single
|
||||||
|
|
|
@ -135,13 +135,11 @@ static int
|
||||||
shift_cost (bool speed_p, struct cost_rtxes *rtxes, enum rtx_code code,
|
shift_cost (bool speed_p, struct cost_rtxes *rtxes, enum rtx_code code,
|
||||||
enum machine_mode mode, int op1)
|
enum machine_mode mode, int op1)
|
||||||
{
|
{
|
||||||
PUT_MODE (rtxes->target, mode);
|
|
||||||
PUT_CODE (rtxes->shift, code);
|
PUT_CODE (rtxes->shift, code);
|
||||||
PUT_MODE (rtxes->shift, mode);
|
PUT_MODE (rtxes->shift, mode);
|
||||||
PUT_MODE (rtxes->source, mode);
|
PUT_MODE (rtxes->source, mode);
|
||||||
XEXP (rtxes->shift, 1) = GEN_INT (op1);
|
XEXP (rtxes->shift, 1) = GEN_INT (op1);
|
||||||
SET_SRC (rtxes->set) = rtxes->shift;
|
return set_src_cost (rtxes->shift, speed_p);
|
||||||
return insn_rtx_cost (rtxes->set, speed_p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For each X in the range [0, BITS_PER_WORD), set SPLITTING[X]
|
/* For each X in the range [0, BITS_PER_WORD), set SPLITTING[X]
|
||||||
|
@ -189,11 +187,12 @@ compute_costs (bool speed_p, struct cost_rtxes *rtxes)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int word_move_zero_cost, word_move_cost;
|
int word_move_zero_cost, word_move_cost;
|
||||||
|
|
||||||
|
PUT_MODE (rtxes->target, word_mode);
|
||||||
SET_SRC (rtxes->set) = CONST0_RTX (word_mode);
|
SET_SRC (rtxes->set) = CONST0_RTX (word_mode);
|
||||||
word_move_zero_cost = insn_rtx_cost (rtxes->set, speed_p);
|
word_move_zero_cost = set_rtx_cost (rtxes->set, speed_p);
|
||||||
|
|
||||||
SET_SRC (rtxes->set) = rtxes->source;
|
SET_SRC (rtxes->set) = rtxes->source;
|
||||||
word_move_cost = insn_rtx_cost (rtxes->set, speed_p);
|
word_move_cost = set_rtx_cost (rtxes->set, speed_p);
|
||||||
|
|
||||||
if (LOG_COSTS)
|
if (LOG_COSTS)
|
||||||
fprintf (stderr, "%s move: from zero cost %d, from reg cost %d\n",
|
fprintf (stderr, "%s move: from zero cost %d, from reg cost %d\n",
|
||||||
|
@ -209,7 +208,7 @@ compute_costs (bool speed_p, struct cost_rtxes *rtxes)
|
||||||
|
|
||||||
PUT_MODE (rtxes->target, mode);
|
PUT_MODE (rtxes->target, mode);
|
||||||
PUT_MODE (rtxes->source, mode);
|
PUT_MODE (rtxes->source, mode);
|
||||||
mode_move_cost = insn_rtx_cost (rtxes->set, speed_p);
|
mode_move_cost = set_rtx_cost (rtxes->set, speed_p);
|
||||||
|
|
||||||
if (LOG_COSTS)
|
if (LOG_COSTS)
|
||||||
fprintf (stderr, "%s move: original cost %d, split cost %d * %d\n",
|
fprintf (stderr, "%s move: original cost %d, split cost %d * %d\n",
|
||||||
|
@ -236,10 +235,8 @@ compute_costs (bool speed_p, struct cost_rtxes *rtxes)
|
||||||
|
|
||||||
/* The only case here to check to see if moving the upper part with a
|
/* The only case here to check to see if moving the upper part with a
|
||||||
zero is cheaper than doing the zext itself. */
|
zero is cheaper than doing the zext itself. */
|
||||||
PUT_MODE (rtxes->target, twice_word_mode);
|
|
||||||
PUT_MODE (rtxes->source, word_mode);
|
PUT_MODE (rtxes->source, word_mode);
|
||||||
SET_SRC (rtxes->set) = rtxes->zext;
|
zext_cost = set_src_cost (rtxes->zext, speed_p);
|
||||||
zext_cost = insn_rtx_cost (rtxes->set, speed_p);
|
|
||||||
|
|
||||||
if (LOG_COSTS)
|
if (LOG_COSTS)
|
||||||
fprintf (stderr, "%s %s: original cost %d, split cost %d + %d\n",
|
fprintf (stderr, "%s %s: original cost %d, split cost %d + %d\n",
|
||||||
|
|
Loading…
Reference in New Issue