arm.c (arm_xscale_rtx_costs): Increase cost of COMPARE of MULT.

* config/arm/arm.c (arm_xscale_rtx_costs): Increase cost of
	COMPARE of MULT.
	* config/arm/arm.md (mulsi3_compare0): Don't check
	arm_arch_xscale.
	(mulsi_compare0_scratch, mulsi3_addsi_compare0): Likewise.
	(mulsi3addsi_compare0_scratch): Likewise.

From-SVN: r92199
This commit is contained in:
Ian Lance Taylor 2004-12-15 14:03:58 +00:00 committed by Ian Lance Taylor
parent 9593d79ac2
commit 06d5588c56
3 changed files with 22 additions and 4 deletions

View File

@ -1,3 +1,12 @@
2004-12-15 Ian Lance Taylor <ian@wasabisystems.com>
* config/arm/arm.c (arm_xscale_rtx_costs): Increase cost of
COMPARE of MULT.
* config/arm/arm.md (mulsi3_compare0): Don't check
arm_arch_xscale.
(mulsi_compare0_scratch, mulsi3_addsi_compare0): Likewise.
(mulsi3addsi_compare0_scratch): Likewise.
2004-12-15 Eric Botcazou <ebotcazou@libertysurf.fr>
PR other/18665

View File

@ -4398,6 +4398,15 @@ arm_xscale_rtx_costs (rtx x, int code, int outer_code, int *total)
+ (REG_OR_SUBREG_REG (XEXP (x, 1)) ? 0 : 4);
return true;
case COMPARE:
/* A COMPARE of a MULT is slow on XScale; the muls instruction
will stall until the multiplication is complete. */
if (GET_CODE (XEXP (x, 0)) == MULT)
*total = 4 + rtx_cost (XEXP (x, 0), code);
else
*total = arm_rtx_costs_1 (x, code, outer_code);
return true;
default:
*total = arm_rtx_costs_1 (x, code, outer_code);
return true;

View File

@ -1097,7 +1097,7 @@
(const_int 0)))
(set (match_operand:SI 0 "s_register_operand" "=&r,&r")
(mult:SI (match_dup 2) (match_dup 1)))]
"TARGET_ARM && !arm_arch_xscale"
"TARGET_ARM"
"mul%?s\\t%0, %2, %1"
[(set_attr "conds" "set")
(set_attr "insn" "muls")]
@ -1110,7 +1110,7 @@
(match_operand:SI 1 "s_register_operand" "%?r,0"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=&r,&r"))]
"TARGET_ARM && !arm_arch_xscale"
"TARGET_ARM"
"mul%?s\\t%0, %2, %1"
[(set_attr "conds" "set")
(set_attr "insn" "muls")]
@ -1141,7 +1141,7 @@
(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")
(plus:SI (mult:SI (match_dup 2) (match_dup 1))
(match_dup 3)))]
"TARGET_ARM && !arm_arch_xscale"
"TARGET_ARM"
"mla%?s\\t%0, %2, %1, %3"
[(set_attr "conds" "set")
(set_attr "insn" "mlas")]
@ -1156,7 +1156,7 @@
(match_operand:SI 3 "s_register_operand" "?r,r,0,0"))
(const_int 0)))
(clobber (match_scratch:SI 0 "=&r,&r,&r,&r"))]
"TARGET_ARM && !arm_arch_xscale"
"TARGET_ARM"
"mla%?s\\t%0, %2, %1, %3"
[(set_attr "conds" "set")
(set_attr "insn" "mlas")]