rs6000.c (rs6000_rtx_costs): Do not treat CONST_DOUBLE as INTVAL.

* config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not
	treat CONST_DOUBLE as INTVAL.  and64_2_operands require an extra
	insn.

From-SVN: r112752
This commit is contained in:
David Edelsohn 2006-04-07 14:24:44 +00:00 committed by David Edelsohn
parent 28e6f134a1
commit f6fe3a224f
2 changed files with 23 additions and 21 deletions

View File

@ -1,3 +1,8 @@
2006-04-07 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not
treat CONST_DOUBLE as INTVAL. and64_2_operands require an extra
insn.
2006-04-07 Jan Hubicka <jh@suse.cz>

View File

@ -18642,28 +18642,25 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int *total)
/* FALLTHRU */
case CONST_DOUBLE:
if (mode == DImode
&& ((outer_code == AND
&& (satisfies_constraint_K (x)
|| satisfies_constraint_L (x)
|| mask_operand (x, DImode)
|| mask64_operand (x, DImode)))
|| ((outer_code == IOR || outer_code == XOR)
&& CONST_DOUBLE_HIGH (x) == 0
&& (CONST_DOUBLE_LOW (x)
& ~ (unsigned HOST_WIDE_INT) 0xffff) == 0)))
if (mode == DImode && code == CONST_DOUBLE)
{
*total = 0;
return true;
}
else if (mode == DImode
&& (outer_code == SET
|| outer_code == IOR
|| outer_code == XOR)
&& CONST_DOUBLE_HIGH (x) == 0)
{
*total = COSTS_N_INSNS (1);
return true;
if ((outer_code == IOR || outer_code == XOR)
&& CONST_DOUBLE_HIGH (x) == 0
&& (CONST_DOUBLE_LOW (x)
& ~ (unsigned HOST_WIDE_INT) 0xffff) == 0)
{
*total = 0;
return true;
}
else if ((outer_code == AND && and64_2_operand (x, DImode))
|| ((outer_code == SET
|| outer_code == IOR
|| outer_code == XOR)
&& CONST_DOUBLE_HIGH (x) == 0))
{
*total = COSTS_N_INSNS (1);
return true;
}
}
/* FALLTHRU */