• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; 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 }
136