blob: 2044a2fdd083b29bf7b0b973ee839bd6fc19863b [file] [log] [blame]
Krzysztof Parzyszekaf5ff652017-02-23 15:02:09 +00001; RUN: llc -march=hexagon < %s | FileCheck %s
2
3; CHECK-LABEL: popcount_16
4; CHECK: zxth
5; CHECK: popcount
6define i16 @popcount_16(i16 %p) #0 {
7 %t = call i16 @llvm.ctpop.i16(i16 %p) #0
8 ret i16 %t
9}
10
11; CHECK-LABEL: popcount_32
12; CHECK: popcount
13define i32 @popcount_32(i32 %p) #0 {
14 %t = call i32 @llvm.ctpop.i32(i32 %p) #0
15 ret i32 %t
16}
17
18; CHECK-LABEL: popcount_64
19; CHECK: popcount
20define i64 @popcount_64(i64 %p) #0 {
21 %t = call i64 @llvm.ctpop.i64(i64 %p) #0
22 ret i64 %t
23}
24
25; CHECK-LABEL: ctlz_16
26; CHECK: [[REG0:r[0-9]+]] = zxth
27; CHECK: [[REG1:r[0-9]+]] = cl0([[REG0]])
28; CHECK: add([[REG1]],#-16)
29define i16 @ctlz_16(i16 %p) #0 {
30 %t = call i16 @llvm.ctlz.i16(i16 %p, i1 true) #0
31 ret i16 %t
32}
33
34; CHECK-LABEL: ctlz_32
35; CHECK: cl0
36define i32 @ctlz_32(i32 %p) #0 {
37 %t = call i32 @llvm.ctlz.i32(i32 %p, i1 true) #0
38 ret i32 %t
39}
40
41; CHECK-LABEL: ctlz_64
42; CHECK: cl0
43define i64 @ctlz_64(i64 %p) #0 {
44 %t = call i64 @llvm.ctlz.i64(i64 %p, i1 true) #0
45 ret i64 %t
46}
47
48; CHECK-LABEL: cttz_16
49; CHECK: ct0
50define i16 @cttz_16(i16 %p) #0 {
51 %t = call i16 @llvm.cttz.i16(i16 %p, i1 true) #0
52 ret i16 %t
53}
54
55; CHECK-LABEL: cttz_32
56; CHECK: ct0
57define i32 @cttz_32(i32 %p) #0 {
58 %t = call i32 @llvm.cttz.i32(i32 %p, i1 true) #0
59 ret i32 %t
60}
61
62; CHECK-LABEL: cttz_64
63; CHECK: ct0
64define i64 @cttz_64(i64 %p) #0 {
65 %t = call i64 @llvm.cttz.i64(i64 %p, i1 true) #0
66 ret i64 %t
67}
68
69; CHECK-LABEL: brev_16
70; CHECK: [[REG:r[0-9]+]] = brev
71; CHECK: lsr([[REG]],#16)
72define i16 @brev_16(i16 %p) #0 {
73 %t = call i16 @llvm.bitreverse.i16(i16 %p) #0
74 ret i16 %t
75}
76
77; CHECK-LABEL: brev_32
78; CHECK: brev
79define i32 @brev_32(i32 %p) #0 {
80 %t = call i32 @llvm.bitreverse.i32(i32 %p) #0
81 ret i32 %t
82}
83
84; CHECK-LABEL: brev_64
85; CHECK: brev
86define i64 @brev_64(i64 %p) #0 {
87 %t = call i64 @llvm.bitreverse.i64(i64 %p) #0
88 ret i64 %t
89}
90
91; CHECK-LABEL: bswap_16
92; CHECK: [[REG:r[0-9]+]] = swiz
93; CHECK: lsr([[REG]],#16)
94define i16 @bswap_16(i16 %p) #0 {
95 %t = call i16 @llvm.bswap.i16(i16 %p) #0
96 ret i16 %t
97}
98
99; CHECK-LABEL: bswap_32
100; CHECK: swiz
101define i32 @bswap_32(i32 %p) #0 {
102 %t = call i32 @llvm.bswap.i32(i32 %p) #0
103 ret i32 %t
104}
105
106; CHECK-LABEL: bswap_64
107; CHECK: swiz
108; CHECK: swiz
109; CHECK: combine
110define i64 @bswap_64(i64 %p) #0 {
111 %t = call i64 @llvm.bswap.i64(i64 %p) #0
112 ret i64 %t
113}
114
115declare i16 @llvm.ctpop.i16(i16) #0
116declare i32 @llvm.ctpop.i32(i32) #0
117declare i64 @llvm.ctpop.i64(i64) #0
118
119declare i16 @llvm.ctlz.i16(i16, i1) #0
120declare i32 @llvm.ctlz.i32(i32, i1) #0
121declare i64 @llvm.ctlz.i64(i64, i1) #0
122
123declare i16 @llvm.cttz.i16(i16, i1) #0
124declare i32 @llvm.cttz.i32(i32, i1) #0
125declare i64 @llvm.cttz.i64(i64, i1) #0
126
127declare i16 @llvm.bitreverse.i16(i16) #0
128declare i32 @llvm.bitreverse.i32(i32) #0
129declare i64 @llvm.bitreverse.i64(i64) #0
130
131declare i16 @llvm.bswap.i16(i16) #0
132declare i32 @llvm.bswap.i32(i32) #0
133declare i64 @llvm.bswap.i64(i64) #0
134
135attributes #0 = { nounwind readnone }