Commit 259febfe by John David Anglin Committed by John David Anglin

pa.c (hppa_rtx_costs): Update costs for large integer modes.

	* config/pa/pa.c (hppa_rtx_costs): Update costs for large integer modes.

From-SVN: r191102
parent 4e5315e5
2012-09-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* config/pa/pa.c (hppa_rtx_costs): Update costs for large integer modes.
2012-09-08 Andi Kleen <ak@linux.intel.com>
* gcc/lto/lto.c (do_whole_program_analysis):
......
......@@ -1422,6 +1422,8 @@ static bool
hppa_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
int *total, bool speed ATTRIBUTE_UNUSED)
{
int factor;
switch (code)
{
case CONST_INT:
......@@ -1453,11 +1455,20 @@ hppa_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
case MULT:
if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
*total = COSTS_N_INSNS (3);
else if (TARGET_PA_11 && !TARGET_DISABLE_FPREGS && !TARGET_SOFT_FLOAT)
*total = COSTS_N_INSNS (8);
{
*total = COSTS_N_INSNS (3);
return true;
}
/* A mode size N times larger than SImode needs O(N*N) more insns. */
factor = GET_MODE_SIZE (GET_MODE (x)) / 4;
if (factor == 0)
factor = 1;
if (TARGET_PA_11 && !TARGET_DISABLE_FPREGS && !TARGET_SOFT_FLOAT)
*total = factor * factor * COSTS_N_INSNS (8);
else
*total = COSTS_N_INSNS (20);
*total = factor * factor * COSTS_N_INSNS (20);
return true;
case DIV:
......@@ -1471,15 +1482,28 @@ hppa_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
case UDIV:
case MOD:
case UMOD:
*total = COSTS_N_INSNS (60);
/* A mode size N times larger than SImode needs O(N*N) more insns. */
factor = GET_MODE_SIZE (GET_MODE (x)) / 4;
if (factor == 0)
factor = 1;
*total = factor * factor * COSTS_N_INSNS (60);
return true;
case PLUS: /* this includes shNadd insns */
case MINUS:
if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
*total = COSTS_N_INSNS (3);
else
*total = COSTS_N_INSNS (1);
{
*total = COSTS_N_INSNS (3);
return true;
}
/* A size N times larger than UNITS_PER_WORD needs N times as
many insns, taking N times as long. */
factor = GET_MODE_SIZE (GET_MODE (x)) / UNITS_PER_WORD;
if (factor == 0)
factor = 1;
*total = factor * COSTS_N_INSNS (1);
return true;
case ASHIFT:
......
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