Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / Hexagon / bitmanip.ll
blob2044a2fdd083b29bf7b0b973ee839bd6fc19863b
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 ; CHECK-LABEL: popcount_16
4 ; CHECK: zxth
5 ; CHECK: popcount
6 define i16 @popcount_16(i16 %p) #0 {
7   %t = call i16 @llvm.ctpop.i16(i16 %p) #0
8   ret i16 %t
11 ; CHECK-LABEL: popcount_32
12 ; CHECK: popcount
13 define i32 @popcount_32(i32 %p) #0 {
14   %t = call i32 @llvm.ctpop.i32(i32 %p) #0
15   ret i32 %t
18 ; CHECK-LABEL: popcount_64
19 ; CHECK: popcount
20 define i64 @popcount_64(i64 %p) #0 {
21   %t = call i64 @llvm.ctpop.i64(i64 %p) #0
22   ret i64 %t
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)
29 define i16 @ctlz_16(i16 %p) #0 {
30   %t = call i16 @llvm.ctlz.i16(i16 %p, i1 true) #0
31   ret i16 %t
34 ; CHECK-LABEL: ctlz_32
35 ; CHECK: cl0
36 define i32 @ctlz_32(i32 %p) #0 {
37   %t = call i32 @llvm.ctlz.i32(i32 %p, i1 true) #0
38   ret i32 %t
41 ; CHECK-LABEL: ctlz_64
42 ; CHECK: cl0
43 define i64 @ctlz_64(i64 %p) #0 {
44   %t = call i64 @llvm.ctlz.i64(i64 %p, i1 true) #0
45   ret i64 %t
48 ; CHECK-LABEL: cttz_16
49 ; CHECK: ct0
50 define i16 @cttz_16(i16 %p) #0 {
51   %t = call i16 @llvm.cttz.i16(i16 %p, i1 true) #0
52   ret i16 %t
55 ; CHECK-LABEL: cttz_32
56 ; CHECK: ct0
57 define i32 @cttz_32(i32 %p) #0 {
58   %t = call i32 @llvm.cttz.i32(i32 %p, i1 true) #0
59   ret i32 %t
62 ; CHECK-LABEL: cttz_64
63 ; CHECK: ct0
64 define i64 @cttz_64(i64 %p) #0 {
65   %t = call i64 @llvm.cttz.i64(i64 %p, i1 true) #0
66   ret i64 %t
69 ; CHECK-LABEL: brev_16
70 ; CHECK: [[REG:r[0-9]+]] = brev
71 ; CHECK: lsr([[REG]],#16)
72 define i16 @brev_16(i16 %p) #0 {
73   %t = call i16 @llvm.bitreverse.i16(i16 %p) #0
74   ret i16 %t
77 ; CHECK-LABEL: brev_32
78 ; CHECK: brev
79 define i32 @brev_32(i32 %p) #0 {
80   %t = call i32 @llvm.bitreverse.i32(i32 %p) #0
81   ret i32 %t
84 ; CHECK-LABEL: brev_64
85 ; CHECK: brev
86 define i64 @brev_64(i64 %p) #0 {
87   %t = call i64 @llvm.bitreverse.i64(i64 %p) #0
88   ret i64 %t
91 ; CHECK-LABEL: bswap_16
92 ; CHECK: [[REG:r[0-9]+]] = swiz
93 ; CHECK: lsr([[REG]],#16)
94 define i16 @bswap_16(i16 %p) #0 {
95   %t = call i16 @llvm.bswap.i16(i16 %p) #0
96   ret i16 %t
99 ; CHECK-LABEL: bswap_32
100 ; CHECK: swiz
101 define i32 @bswap_32(i32 %p) #0 {
102   %t = call i32 @llvm.bswap.i32(i32 %p) #0
103   ret i32 %t
106 ; CHECK-LABEL: bswap_64
107 ; CHECK: swiz
108 ; CHECK: swiz
109 ; CHECK: combine
110 define i64 @bswap_64(i64 %p) #0 {
111   %t = call i64 @llvm.bswap.i64(i64 %p) #0
112   ret i64 %t
115 declare i16 @llvm.ctpop.i16(i16) #0
116 declare i32 @llvm.ctpop.i32(i32) #0
117 declare i64 @llvm.ctpop.i64(i64) #0
119 declare i16 @llvm.ctlz.i16(i16, i1) #0
120 declare i32 @llvm.ctlz.i32(i32, i1) #0
121 declare i64 @llvm.ctlz.i64(i64, i1) #0
123 declare i16 @llvm.cttz.i16(i16, i1) #0
124 declare i32 @llvm.cttz.i32(i32, i1) #0
125 declare i64 @llvm.cttz.i64(i64, i1) #0
127 declare i16 @llvm.bitreverse.i16(i16) #0
128 declare i32 @llvm.bitreverse.i32(i32) #0
129 declare i64 @llvm.bitreverse.i64(i64) #0
131 declare i16 @llvm.bswap.i16(i16) #0
132 declare i32 @llvm.bswap.i32(i32) #0
133 declare i64 @llvm.bswap.i64(i64) #0
135 attributes #0 = { nounwind readnone }