rs6000.c (rs6000_rtx_costs): Improve DIV/MOD.

2004-08-20  Dale Johannesen  <dalej@apple.com>

        * config/rs6000/rs6000.c (rs6000_rtx_costs): Improve DIV/MOD.

From-SVN: r86334
This commit is contained in:
Dale Johannesen 2004-08-20 19:07:10 +00:00 committed by Dale Johannesen
parent b7d9c3aefe
commit 627b6fe2df
2 changed files with 27 additions and 10 deletions

View File

@ -1,3 +1,7 @@
2004-08-20 Dale Johannesen <dalej@apple.com>
* config/rs6000/rs6000.c (rs6000_rtx_costs): Improve DIV/MOD.
2004-08-20 Daniel Jacobowitz <dan@debian.org>
* regrename.c (kill_value_one_regno): Renamed from kill_value_regno.

View File

@ -17064,6 +17064,9 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
|| ((outer_code == IOR || outer_code == XOR)
&& (CONST_OK_FOR_LETTER_P (INTVAL (x), 'K')
|| CONST_OK_FOR_LETTER_P (INTVAL (x), 'L')))
|| ((outer_code == DIV || outer_code == UDIV
|| outer_code == MOD || outer_code == UMOD)
&& exact_log2 (INTVAL (x)) >= 0)
|| (outer_code == AND
&& (CONST_OK_FOR_LETTER_P (INTVAL (x), 'K')
|| CONST_OK_FOR_LETTER_P (INTVAL (x), 'L')
@ -17232,20 +17235,30 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
: rs6000_cost->sdiv;
return false;
}
if (GET_CODE (XEXP (x, 1)) == CONST_INT
&& exact_log2 (INTVAL (XEXP (x, 1))) >= 0)
{
*total = COSTS_N_INSNS (2);
return false;
}
/* FALLTHRU */
case UDIV:
case UMOD:
if (GET_MODE (XEXP (x, 1)) == DImode)
*total = rs6000_cost->divdi;
else
*total = rs6000_cost->divsi;
if (GET_CODE (XEXP (x, 1)) == CONST_INT
&& exact_log2 (INTVAL (XEXP (x, 1))) >= 0)
{
if (code == DIV || code == MOD)
/* Shift, addze */
*total = COSTS_N_INSNS (2);
else
/* Shift */
*total = COSTS_N_INSNS (1);
}
else
{
if (GET_MODE (XEXP (x, 1)) == DImode)
*total = rs6000_cost->divdi;
else
*total = rs6000_cost->divsi;
}
/* Add in shift and subtract for MOD. */
if (code == MOD || code == UMOD)
*total += COSTS_N_INSNS (2);
return false;
case FFS: