diff options
author | Kazu Hirata <kazu@codesourcery.com> | 2009-04-22 16:52:17 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2009-04-22 16:52:17 +0000 |
commit | 4c7c486a4e03b5d1e78ba3680bab4aa89c2f50c4 (patch) | |
tree | 71be1caa5bb9e86626e798622f26c78fea6a9429 /gcc | |
parent | d5df9a20dbe9eade3bae0b12d042b4958416c3d8 (diff) | |
download | gcc-4c7c486a4e03b5d1e78ba3680bab4aa89c2f50c4.zip gcc-4c7c486a4e03b5d1e78ba3680bab4aa89c2f50c4.tar.gz gcc-4c7c486a4e03b5d1e78ba3680bab4aa89c2f50c4.tar.bz2 |
arm.c (arm_rtx_costs_1): Use power_of_two_operand where appropriate.
* config/arm/arm.c (arm_rtx_costs_1): Use power_of_two_operand
where appropriate.
From-SVN: r146602
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 24 |
2 files changed, 11 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ec64ac2..14d6774 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2009-04-22 Kazu Hirata <kazu@codesourcery.com> + * config/arm/arm.c (arm_rtx_costs_1): Use power_of_two_operand + where appropriate. + +2009-04-22 Kazu Hirata <kazu@codesourcery.com> + * config/arm/arm.c (arm_size_rtx_costs): Treat a PLUS with a shift the same as a PLUS without a shift. Increase the cost of a CONST_INT in MULT. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 547e760..38ab142 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -5141,9 +5141,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed) /* A shift as a part of RSB costs no more than RSB itself. */ if (GET_CODE (XEXP (x, 0)) == MULT - && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && ((INTVAL (XEXP (XEXP (x, 0), 1)) - & (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0)) + && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode)) { *total += rtx_cost (XEXP (XEXP (x, 0), 0), code, speed); *total += rtx_cost (XEXP (x, 1), code, speed); @@ -5151,9 +5149,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed) } if (subcode == MULT - && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT - && ((INTVAL (XEXP (XEXP (x, 1), 1)) & - (INTVAL (XEXP (XEXP (x, 1), 1)) - 1)) == 0)) + && power_of_two_operand (XEXP (XEXP (x, 1), 1), SImode)) { *total += rtx_cost (XEXP (x, 0), code, speed); *total += rtx_cost (XEXP (XEXP (x, 1), 0), subcode, speed); @@ -5189,9 +5185,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed) multiplication by a power of two, so that we fall down into the code below. */ if (GET_CODE (XEXP (x, 0)) == MULT - && ! (GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && ((INTVAL (XEXP (XEXP (x, 0), 1)) & - (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0))) + && !power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode)) { /* The cost comes from the cost of the multiply. */ return false; @@ -5274,9 +5268,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed) } if (subcode == MULT - && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && ((INTVAL (XEXP (XEXP (x, 0), 1)) & - (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0)) + && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode)) { *total += rtx_cost (XEXP (x, 1), code, speed); *total += rtx_cost (XEXP (XEXP (x, 0), 0), subcode, speed); @@ -5333,9 +5325,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed) || subcode == LSHIFTRT || subcode == ROTATE || subcode == ROTATERT || (subcode == MULT - && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && ((INTVAL (XEXP (XEXP (x, 0), 1)) & - (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0))) + && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode))) { *total += rtx_cost (XEXP (XEXP (x, 0), 0), subcode, speed); /* Register shifts cost an extra cycle. */ @@ -5443,9 +5433,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code outer, int* total, bool speed) } if (subcode == MULT - && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && ((INTVAL (XEXP (XEXP (x, 0), 1)) & - (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0)) + && power_of_two_operand (XEXP (XEXP (x, 0), 1), SImode)) { *total += rtx_cost (XEXP (x, 1), code, speed); *total += rtx_cost (XEXP (XEXP (x, 0), 0), subcode, speed); |