aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2014-07-22 13:39:16 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2014-07-22 13:39:16 +0000
commit781aeb73bccb86d892e1f565e807a2dfa647e4ee (patch)
tree3047e0ff1a8fbd682048e0bcad2e966dc1305cea /gcc
parentdfc98d99b6f294fbe2cb8d8d2324560ebeb8dbed (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c15
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: