aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-14 09:02:47 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-14 09:02:47 +0000
commitbca5a9971f47cf5fe79e6595beb762539f200f46 (patch)
tree37297284d9c4420e434605cce6746d9d597990b1 /gcc/config
parenta229966c9c76afe0cf18c566a3c13ddde3878288 (diff)
downloadgcc-bca5a9971f47cf5fe79e6595beb762539f200f46.zip
gcc-bca5a9971f47cf5fe79e6595beb762539f200f46.tar.gz
gcc-bca5a9971f47cf5fe79e6595beb762539f200f46.tar.bz2
[AArch64] Add support for SVE CLS and CLZ
This patch adds support for unpredicated SVE CLS and CLZ. A later patch will add support for predicated unary integer arithmetic. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/iterators.md (SVE_INT_UNARY): Add clrsb and clz. (optab, sve_int_op): Handle them. * config/aarch64/aarch64-sve.md: Expand comment. gcc/testsuite/ * gcc.target/aarch64/vect-clz.c: Force SVE off. * gcc.target/aarch64/sve/clrsb_1.c: New test. * gcc.target/aarch64/sve/clrsb_1_run.c: Likewise. * gcc.target/aarch64/sve/clz_1.c: Likewise. * gcc.target/aarch64/sve/clz_1_run.c: Likewise. From-SVN: r274437
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/aarch64/aarch64-sve.md2
-rw-r--r--gcc/config/aarch64/iterators.md6
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md
index 6fed4ef..7e696d8 100644
--- a/gcc/config/aarch64/aarch64-sve.md
+++ b/gcc/config/aarch64/aarch64-sve.md
@@ -1422,6 +1422,8 @@
;; -------------------------------------------------------------------------
;; Includes:
;; - ABS
+;; - CLS (= clrsb)
+;; - CLZ
;; - CNT (= popcount)
;; - NEG
;; - NOT
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index 75e672b..bc5b96a 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -1276,7 +1276,7 @@
(define_code_iterator FAC_COMPARISONS [lt le ge gt])
;; SVE integer unary operations.
-(define_code_iterator SVE_INT_UNARY [abs neg not popcount])
+(define_code_iterator SVE_INT_UNARY [abs neg not clrsb clz popcount])
;; SVE integer binary operations.
(define_code_iterator SVE_INT_BINARY [plus minus mult smax umax smin umin
@@ -1307,6 +1307,8 @@
(unsigned_fix "fixuns")
(float "float")
(unsigned_float "floatuns")
+ (clrsb "clrsb")
+ (clz "clz")
(popcount "popcount")
(and "and")
(ior "ior")
@@ -1474,6 +1476,8 @@
(ior "orr")
(xor "eor")
(not "not")
+ (clrsb "cls")
+ (clz "clz")
(popcount "cnt")])
(define_code_attr sve_int_op_rev [(plus "add")