rs6000.c (rs6000_rtx_costs): Indicate that the rs6000 doesn't have shift-and-add or shift-and-sub...

* config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the
	rs6000 doesn't have shift-and-add or shift-and-sub instructions
	by returning the cost of a multiplication plus an addition.

From-SVN: r84556
This commit is contained in:
Roger Sayle 2004-07-12 13:42:28 +00:00 committed by Roger Sayle
parent 62e39334a0
commit 938bf7475d
2 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2004-07-12 Roger Sayle <roger@eyesopen.com>
* config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the
rs6000 doesn't have shift-and-add or shift-and-sub instructions
by returning the cost of a multiplication plus an addition.
2004-07-12 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/14107

View File

@ -16535,6 +16535,12 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
: rs6000_cost->fp;
else if (mode == SFmode)
*total = rs6000_cost->fp;
else if (GET_CODE (XEXP (x, 0)) == MULT)
{
/* The rs6000 doesn't have shift-and-add instructions. */
rs6000_rtx_costs (XEXP (x, 0), MULT, PLUS, total);
*total += COSTS_N_INSNS (1);
}
else
*total = ((GET_CODE (XEXP (x, 1)) == CONST_INT
&& ((unsigned HOST_WIDE_INT) (INTVAL (XEXP (x, 1))
@ -16551,6 +16557,12 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
: rs6000_cost->fp;
else if (mode == SFmode)
*total = rs6000_cost->fp;
else if (GET_CODE (XEXP (x, 0)) == MULT)
{
/* The rs6000 doesn't have shift-and-sub instructions. */
rs6000_rtx_costs (XEXP (x, 0), MULT, MINUS, total);
*total += COSTS_N_INSNS (1);
}
else
*total = COSTS_N_INSNS (1);
return true;