xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/bitreverse.ll (revision 913229983633cd4c19b9e5534018f9a42e274b30)
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
2
3declare i128 @llvm.bitreverse.i128(i128)
4declare i64 @llvm.bitreverse.i64(i64)
5declare i32 @llvm.bitreverse.i32(i32)
6declare i16 @llvm.bitreverse.i16(i16)
7declare i8 @llvm.bitreverse.i8(i8)
8
9define i128 @func128(i128 %p) {
10; CHECK-LABEL: func128:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    brv %s2, %s1
13; CHECK-NEXT:    brv %s1, %s0
14; CHECK-NEXT:    or %s0, 0, %s2
15; CHECK-NEXT:    b.l.t (, %s10)
16  %r = tail call i128 @llvm.bitreverse.i128(i128 %p)
17  ret i128 %r
18}
19
20define i64 @func64(i64 %p) {
21; CHECK-LABEL: func64:
22; CHECK:       # %bb.0:
23; CHECK-NEXT:    brv %s0, %s0
24; CHECK-NEXT:    b.l.t (, %s10)
25  %r = tail call i64 @llvm.bitreverse.i64(i64 %p)
26  ret i64 %r
27}
28
29define signext i32 @func32s(i32 signext %p) {
30; CHECK-LABEL: func32s:
31; CHECK:       # %bb.0:
32; CHECK-NEXT:    brv %s0, %s0
33; CHECK-NEXT:    sra.l %s0, %s0, 32
34; CHECK-NEXT:    b.l.t (, %s10)
35  %r = tail call i32 @llvm.bitreverse.i32(i32 %p)
36  ret i32 %r
37}
38
39define zeroext i32 @func32z(i32 zeroext %p) {
40; CHECK-LABEL: func32z:
41; CHECK:       # %bb.0:
42; CHECK-NEXT:    brv %s0, %s0
43; CHECK-NEXT:    srl %s0, %s0, 32
44; CHECK-NEXT:    b.l.t (, %s10)
45  %r = tail call i32 @llvm.bitreverse.i32(i32 %p)
46  ret i32 %r
47}
48
49define signext i16 @func16s(i16 signext %p) {
50; CHECK-LABEL: func16s:
51; CHECK:       # %bb.0:
52; CHECK-NEXT:    brv %s0, %s0
53; CHECK-NEXT:    sra.l %s0, %s0, 48
54; CHECK-NEXT:    b.l.t (, %s10)
55  %r = tail call i16 @llvm.bitreverse.i16(i16 %p)
56  ret i16 %r
57}
58
59define zeroext i16 @func16z(i16 zeroext %p) {
60; CHECK-LABEL: func16z:
61; CHECK:       # %bb.0:
62; CHECK-NEXT:    brv %s0, %s0
63; CHECK-NEXT:    srl %s0, %s0, 48
64; CHECK-NEXT:    b.l.t (, %s10)
65  %r = tail call i16 @llvm.bitreverse.i16(i16 %p)
66  ret i16 %r
67}
68
69define signext i8 @func8s(i8 signext %p) {
70; CHECK-LABEL: func8s:
71; CHECK:       # %bb.0:
72; CHECK-NEXT:    brv %s0, %s0
73; CHECK-NEXT:    sra.l %s0, %s0, 56
74; CHECK-NEXT:    b.l.t (, %s10)
75  %r = tail call i8 @llvm.bitreverse.i8(i8 %p)
76  ret i8 %r
77}
78
79define zeroext i8 @func8z(i8 zeroext %p) {
80; CHECK-LABEL: func8z:
81; CHECK:       # %bb.0:
82; CHECK-NEXT:    brv %s0, %s0
83; CHECK-NEXT:    srl %s0, %s0, 56
84; CHECK-NEXT:    b.l.t (, %s10)
85  %r = tail call i8 @llvm.bitreverse.i8(i8 %p)
86  ret i8 %r
87}
88
89define i128 @func128i() {
90; CHECK-LABEL: func128i:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    or %s0, 0, (0)1
93; CHECK-NEXT:    lea.sl %s1, -65536
94; CHECK-NEXT:    b.l.t (, %s10)
95  %r = tail call i128 @llvm.bitreverse.i128(i128 65535)
96  ret i128 %r
97}
98
99define i64 @func64i() {
100; CHECK-LABEL: func64i:
101; CHECK:       # %bb.0:
102; CHECK-NEXT:    lea.sl %s0, -65536
103; CHECK-NEXT:    b.l.t (, %s10)
104  %r = tail call i64 @llvm.bitreverse.i64(i64 65535)
105  ret i64 %r
106}
107
108define signext i32 @func32is() {
109; CHECK-LABEL: func32is:
110; CHECK:       # %bb.0:
111; CHECK-NEXT:    lea %s0, -65536
112; CHECK-NEXT:    b.l.t (, %s10)
113  %r = tail call i32 @llvm.bitreverse.i32(i32 65535)
114  ret i32 %r
115}
116
117define zeroext i32 @func32iz() {
118; CHECK-LABEL: func32iz:
119; CHECK:       # %bb.0:
120; CHECK-NEXT:    lea %s0, -65536
121; CHECK-NEXT:    and %s0, %s0, (32)0
122; CHECK-NEXT:    b.l.t (, %s10)
123  %r = tail call i32 @llvm.bitreverse.i32(i32 65535)
124  ret i32 %r
125}
126
127define signext i16 @func16is() {
128; CHECK-LABEL: func16is:
129; CHECK:       # %bb.0:
130; CHECK-NEXT:    lea %s0, -256
131; CHECK-NEXT:    b.l.t (, %s10)
132  %r = tail call i16 @llvm.bitreverse.i16(i16 255)
133  ret i16 %r
134}
135
136define zeroext i16 @func16iz() {
137; CHECK-LABEL: func16iz:
138; CHECK:       # %bb.0:
139; CHECK-NEXT:    lea %s0, 65280
140; CHECK-NEXT:    b.l.t (, %s10)
141  %r = tail call i16 @llvm.bitreverse.i16(i16 255)
142  ret i16 %r
143}
144
145define signext i8 @func8is() {
146; CHECK-LABEL: func8is:
147; CHECK:       # %bb.0:
148; CHECK-NEXT:    or %s0, 15, (0)1
149; CHECK-NEXT:    b.l.t (, %s10)
150  %r = tail call i8 @llvm.bitreverse.i8(i8 240)
151  ret i8 %r
152}
153
154define zeroext i8 @func8iz() {
155; CHECK-LABEL: func8iz:
156; CHECK:       # %bb.0:
157; CHECK-NEXT:    or %s0, 15, (0)1
158; CHECK-NEXT:    b.l.t (, %s10)
159  %r = tail call i8 @llvm.bitreverse.i8(i8 240)
160  ret i8 %r
161}
162