diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2014-07-22 13:39:16 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2014-07-22 13:39:16 +0000 |
commit | 781aeb73bccb86d892e1f565e807a2dfa647e4ee (patch) | |
tree | 3047e0ff1a8fbd682048e0bcad2e966dc1305cea | |
parent | dfc98d99b6f294fbe2cb8d8d2324560ebeb8dbed (diff) | |
download | gcc-781aeb73bccb86d892e1f565e807a2dfa647e4ee.zip gcc-781aeb73bccb86d892e1f565e807a2dfa647e4ee.tar.gz gcc-781aeb73bccb86d892e1f565e807a2dfa647e4ee.tar.bz2 |
[AArch64][2/2] Add rtx cost function handling of clz, clrsb, rbit.
* config/aarch64/aarch64.c (aarch64_rtx_costs): Handle CLRSB, CLZ.
(case UNSPEC): Handle UNSPEC_RBIT.
From-SVN: r212913
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 15 |
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5c972bb..f40cfd9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2014-07-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + * config/aarch64/aarch64.c (aarch64_rtx_costs): Handle CLRSB, CLZ. + (case UNSPEC): Handle UNSPEC_RBIT. + +2014-07-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + * config/aarch64/aarch64.md: Delete UNSPEC_CLS. (clrsb<mode>2): Use clrsb RTL code instead of UNSPEC_CLS. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 5f8db1d..56a0e44 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5151,6 +5151,13 @@ aarch64_rtx_costs (rtx x, int code, int outer ATTRIBUTE_UNUSED, return false; + case CLRSB: + case CLZ: + if (speed) + *cost += extra_cost->alu.clz; + + return false; + case COMPARE: op0 = XEXP (x, 0); op1 = XEXP (x, 1); @@ -5796,6 +5803,14 @@ cost_plus: return false; } + + if (XINT (x, 1) == UNSPEC_RBIT) + { + if (speed) + *cost += extra_cost->alu.rev; + + return false; + } break; case TRUNCATE: |