diff options
author | Terry Guo <terry.guo@arm.com> | 2013-07-25 04:10:27 +0000 |
---|---|---|
committer | Xuepeng Guo <xguo@gcc.gnu.org> | 2013-07-25 04:10:27 +0000 |
commit | 690688b3a055de125642e79d3bff8b0291d1f8cb (patch) | |
tree | 5ae1b066d744553bfbb91a51cca6c57aa1a4f172 /gcc | |
parent | a4ad093b026e5224b4bacedcee34b434e7af7ffc (diff) | |
download | gcc-690688b3a055de125642e79d3bff8b0291d1f8cb.zip gcc-690688b3a055de125642e79d3bff8b0291d1f8cb.tar.gz gcc-690688b3a055de125642e79d3bff8b0291d1f8cb.tar.bz2 |
arm.c (thumb1_size_rtx_costs): Assign proper cost for shift_add/shift_sub0/shift_sub1 RTXs.
gcc/ChangeLog:
2013-07-24 Terry Guo <terry.guo@arm.com>
* config/arm/arm.c (thumb1_size_rtx_costs): Assign proper cost for
shift_add/shift_sub0/shift_sub1 RTXs.
gcc/testsuite/ChangeLog:
2013-07-24 Terry Guo <terry.guo@arm.com>
* gcc.target/arm/thumb1-Os-mult.c: New test case.
From-SVN: r201237
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c | 12 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0aed48d..fa582e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-07-25 Terry Guo <terry.guo@arm.com> + + * config/arm/arm.c (thumb1_size_rtx_costs): Assign proper cost for + shift_add/shift_sub0/shift_sub1 RTXs. + 2013-07-24 Bill Schmidt <wschmidt@linux.ibm.com> Anton Blanchard <anton@au1.ibm.com> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index ad54469..294de80 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -7925,6 +7925,15 @@ thumb1_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer) case PLUS: case MINUS: + /* Thumb-1 needs two instructions to fulfill shiftadd/shiftsub0/shiftsub1 + defined by RTL expansion, especially for the expansion of + multiplication. */ + if ((GET_CODE (XEXP (x, 0)) == MULT + && power_of_two_operand (XEXP (XEXP (x,0),1), SImode)) + || (GET_CODE (XEXP (x, 1)) == MULT + && power_of_two_operand (XEXP (XEXP (x, 1), 1), SImode))) + return COSTS_N_INSNS (2); + /* On purpose fall through for normal RTX. */ case COMPARE: case NEG: case NOT: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1cfb5a4..b8bd860 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-07-25 Terry Guo <terry.guo@arm.com> + + * gcc.target/arm/thumb1-Os-mult.c: New test case. + 2013-07-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57942 diff --git a/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c b/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c new file mode 100644 index 0000000..31b8bd6 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/thumb1-Os-mult.c @@ -0,0 +1,12 @@ +/* { dg-require-effective-target arm_thumb1_ok } */ +/* { dg-do compile } */ +/* { dg-options "-Os" } */ +/* { dg-skip-if "" { ! { arm_thumb1 } } } */ + +int +mymul3 (int x) +{ + return x * 0x555; +} + +/* { dg-final { scan-assembler "mul\[\\t \]*r.,\[\\t \]*r." } } */ |