Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / RISCV / xcvalu.ll
blobb1031731d06fa0f205f51769c9ef213e3b5a2fd6
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O0 -mtriple=riscv32 -mattr=+m -mattr=+xcvalu -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s
5 declare i32 @llvm.abs.i32(i32, i1)
6 declare i32 @llvm.smin.i32(i32, i32)
7 declare i32 @llvm.smax.i32(i32, i32)
8 declare i32 @llvm.umin.i32(i32, i32)
9 declare i32 @llvm.umax.i32(i32, i32)
11 define i32 @abs(i32 %a) {
12 ; CHECK-LABEL: abs:
13 ; CHECK:       # %bb.0:
14 ; CHECK-NEXT:    cv.abs a0, a0
15 ; CHECK-NEXT:    ret
16   %1 = call i32 @llvm.abs.i32(i32 %a, i1 false)
17   ret i32 %1
20 define i1 @slet(i32 %a, i32 %b) {
21 ; CHECK-LABEL: slet:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    cv.slet a0, a0, a1
24 ; CHECK-NEXT:    ret
25   %1 = icmp sle i32 %a, %b
26   ret i1 %1
29 define i1 @sletu(i32 %a, i32 %b) {
30 ; CHECK-LABEL: sletu:
31 ; CHECK:       # %bb.0:
32 ; CHECK-NEXT:    cv.sletu a0, a0, a1
33 ; CHECK-NEXT:    ret
34   %1 = icmp ule i32 %a, %b
35   ret i1 %1
38 define i32 @smin(i32 %a, i32 %b) {
39 ; CHECK-LABEL: smin:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    cv.min a0, a0, a1
42 ; CHECK-NEXT:    ret
43   %1 = call i32 @llvm.smin.i32(i32 %a, i32 %b)
44   ret i32 %1
47 define i32 @umin(i32 %a, i32 %b) {
48 ; CHECK-LABEL: umin:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    cv.minu a0, a0, a1
51 ; CHECK-NEXT:    ret
52   %1 = call i32 @llvm.umin.i32(i32 %a, i32 %b)
53   ret i32 %1
56 define i32 @smax(i32 %a, i32 %b) {
57 ; CHECK-LABEL: smax:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    cv.max a0, a0, a1
60 ; CHECK-NEXT:    ret
61   %1 = call i32 @llvm.smax.i32(i32 %a, i32 %b)
62   ret i32 %1
65 define i32 @umax(i32 %a, i32 %b) {
66 ; CHECK-LABEL: umax:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    cv.maxu a0, a0, a1
69 ; CHECK-NEXT:    ret
70   %1 = call i32 @llvm.umax.i32(i32 %a, i32 %b)
71   ret i32 %1
74 define i32 @exths(i16 %a) {
75 ; CHECK-LABEL: exths:
76 ; CHECK:       # %bb.0:
77 ; CHECK-NEXT:    # kill: def $x11 killed $x10
78 ; CHECK-NEXT:    cv.exths a0, a0
79 ; CHECK-NEXT:    ret
80   %1 = sext i16 %a to i32
81   ret i32 %1
84 define i32 @exthz(i16 %a) {
85 ; CHECK-LABEL: exthz:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    # kill: def $x11 killed $x10
88 ; CHECK-NEXT:    cv.exthz a0, a0
89 ; CHECK-NEXT:    ret
90   %1 = zext i16 %a to i32
91   ret i32 %1
94 declare i32 @llvm.riscv.cv.alu.clip(i32, i32)
96 define i32 @test.cv.alu.clip.case.a(i32 %a) {
97 ; CHECK-LABEL: test.cv.alu.clip.case.a:
98 ; CHECK:       # %bb.0:
99 ; CHECK-NEXT:    cv.clip a0, a0, 5
100 ; CHECK-NEXT:    ret
101   %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 15)
102   ret i32 %1
105 define i32 @test.cv.alu.clip.case.b(i32 %a) {
106 ; CHECK-LABEL: test.cv.alu.clip.case.b:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    li a1, 10
109 ; CHECK-NEXT:    cv.clipr a0, a0, a1
110 ; CHECK-NEXT:    ret
111   %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 10)
112   ret i32 %1
115 declare i32 @llvm.riscv.cv.alu.clipu(i32, i32)
117 define i32 @test.cv.alu.clipu.case.a(i32 %a) {
118 ; CHECK-LABEL: test.cv.alu.clipu.case.a:
119 ; CHECK:       # %bb.0:
120 ; CHECK-NEXT:    cv.clipu a0, a0, 9
121 ; CHECK-NEXT:    ret
122   %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 255)
123   ret i32 %1
126 define i32 @test.cv.alu.clipu.case.b(i32 %a) {
127 ; CHECK-LABEL: test.cv.alu.clipu.case.b:
128 ; CHECK:       # %bb.0:
129 ; CHECK-NEXT:    li a1, 200
130 ; CHECK-NEXT:    cv.clipur a0, a0, a1
131 ; CHECK-NEXT:    ret
132   %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 200)
133   ret i32 %1
136 declare i32 @llvm.riscv.cv.alu.addn(i32, i32, i32)
138 define i32 @test.cv.alu.addn.case.a(i32 %a, i32 %b) {
139 ; CHECK-LABEL: test.cv.alu.addn.case.a:
140 ; CHECK:       # %bb.0:
141 ; CHECK-NEXT:    cv.addn a0, a0, a1, 15
142 ; CHECK-NEXT:    ret
143   %1 = call i32 @llvm.riscv.cv.alu.addn(i32 %a, i32 %b, i32 15)
144   ret i32 %1
147 define i32 @test.cv.alu.addn.case.b(i32 %a, i32 %b) {
148 ; CHECK-LABEL: test.cv.alu.addn.case.b:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    li a2, 32
151 ; CHECK-NEXT:    cv.addnr a0, a1, a2
152 ; CHECK-NEXT:    ret
153   %1 = call i32 @llvm.riscv.cv.alu.addn(i32 %a, i32 %b, i32 32)
154   ret i32 %1
157 declare i32 @llvm.riscv.cv.alu.addun(i32, i32, i32)
159 define i32 @test.cv.alu.addun.case.a(i32 %a, i32 %b) {
160 ; CHECK-LABEL: test.cv.alu.addun.case.a:
161 ; CHECK:       # %bb.0:
162 ; CHECK-NEXT:    cv.addun a0, a0, a1, 15
163 ; CHECK-NEXT:    ret
164   %1 = call i32 @llvm.riscv.cv.alu.addun(i32 %a, i32 %b, i32 15)
165   ret i32 %1
168 define i32 @test.cv.alu.addun.case.b(i32 %a, i32 %b) {
169 ; CHECK-LABEL: test.cv.alu.addun.case.b:
170 ; CHECK:       # %bb.0:
171 ; CHECK-NEXT:    li a2, 32
172 ; CHECK-NEXT:    cv.addunr a0, a1, a2
173 ; CHECK-NEXT:    ret
174   %1 = call i32 @llvm.riscv.cv.alu.addun(i32 %a, i32 %b, i32 32)
175   ret i32 %1
178 declare i32 @llvm.riscv.cv.alu.addrn(i32, i32, i32)
180 define i32 @test.cv.alu.addrn.case.a(i32 %a, i32 %b) {
181 ; CHECK-LABEL: test.cv.alu.addrn.case.a:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    cv.addrn a0, a0, a1, 15
184 ; CHECK-NEXT:    ret
185   %1 = call i32 @llvm.riscv.cv.alu.addrn(i32 %a, i32 %b, i32 15)
186   ret i32 %1
189 define i32 @test.cv.alu.addrn.case.b(i32 %a, i32 %b) {
190 ; CHECK-LABEL: test.cv.alu.addrn.case.b:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    li a2, 32
193 ; CHECK-NEXT:    cv.addrnr a0, a1, a2
194 ; CHECK-NEXT:    ret
195   %1 = call i32 @llvm.riscv.cv.alu.addrn(i32 %a, i32 %b, i32 32)
196   ret i32 %1
199 declare i32 @llvm.riscv.cv.alu.addurn(i32, i32, i32)
201 define i32 @test.cv.alu.addurn.case.a(i32 %a, i32 %b) {
202 ; CHECK-LABEL: test.cv.alu.addurn.case.a:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    cv.addurn a0, a0, a1, 15
205 ; CHECK-NEXT:    ret
206   %1 = call i32 @llvm.riscv.cv.alu.addurn(i32 %a, i32 %b, i32 15)
207   ret i32 %1
210 define i32 @test.cv.alu.addurn.case.b(i32 %a, i32 %b) {
211 ; CHECK-LABEL: test.cv.alu.addurn.case.b:
212 ; CHECK:       # %bb.0:
213 ; CHECK-NEXT:    li a2, 32
214 ; CHECK-NEXT:    cv.addurnr a0, a1, a2
215 ; CHECK-NEXT:    ret
216   %1 = call i32 @llvm.riscv.cv.alu.addurn(i32 %a, i32 %b, i32 32)
217   ret i32 %1
220 declare i32 @llvm.riscv.cv.alu.subn(i32, i32, i32)
222 define i32 @test.cv.alu.subn.case.a(i32 %a, i32 %b) {
223 ; CHECK-LABEL: test.cv.alu.subn.case.a:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    cv.subn a0, a0, a1, 15
226 ; CHECK-NEXT:    ret
227   %1 = call i32 @llvm.riscv.cv.alu.subn(i32 %a, i32 %b, i32 15)
228   ret i32 %1
231 define i32 @test.cv.alu.subn.case.b(i32 %a, i32 %b) {
232 ; CHECK-LABEL: test.cv.alu.subn.case.b:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    li a2, 32
235 ; CHECK-NEXT:    cv.subnr a0, a1, a2
236 ; CHECK-NEXT:    ret
237   %1 = call i32 @llvm.riscv.cv.alu.subn(i32 %a, i32 %b, i32 32)
238   ret i32 %1
241 declare i32 @llvm.riscv.cv.alu.subun(i32, i32, i32)
243 define i32 @test.cv.alu.subun.case.a(i32 %a, i32 %b) {
244 ; CHECK-LABEL: test.cv.alu.subun.case.a:
245 ; CHECK:       # %bb.0:
246 ; CHECK-NEXT:    cv.subun a0, a0, a1, 15
247 ; CHECK-NEXT:    ret
248   %1 = call i32 @llvm.riscv.cv.alu.subun(i32 %a, i32 %b, i32 15)
249   ret i32 %1
252 define i32 @test.cv.alu.subun.case.b(i32 %a, i32 %b) {
253 ; CHECK-LABEL: test.cv.alu.subun.case.b:
254 ; CHECK:       # %bb.0:
255 ; CHECK-NEXT:    li a2, 32
256 ; CHECK-NEXT:    cv.subunr a0, a1, a2
257 ; CHECK-NEXT:    ret
258   %1 = call i32 @llvm.riscv.cv.alu.subun(i32 %a, i32 %b, i32 32)
259   ret i32 %1
262 declare i32 @llvm.riscv.cv.alu.subrn(i32, i32, i32)
264 define i32 @test.cv.alu.subrn.case.a(i32 %a, i32 %b) {
265 ; CHECK-LABEL: test.cv.alu.subrn.case.a:
266 ; CHECK:       # %bb.0:
267 ; CHECK-NEXT:    cv.subrn a0, a0, a1, 15
268 ; CHECK-NEXT:    ret
269   %1 = call i32 @llvm.riscv.cv.alu.subrn(i32 %a, i32 %b, i32 15)
270   ret i32 %1
273 define i32 @test.cv.alu.subrn.case.b(i32 %a, i32 %b) {
274 ; CHECK-LABEL: test.cv.alu.subrn.case.b:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    li a2, 32
277 ; CHECK-NEXT:    cv.subrnr a0, a1, a2
278 ; CHECK-NEXT:    ret
279   %1 = call i32 @llvm.riscv.cv.alu.subrn(i32 %a, i32 %b, i32 32)
280   ret i32 %1
283 declare i32 @llvm.riscv.cv.alu.suburn(i32, i32, i32)
285 define i32 @test.cv.alu.suburn.case.a(i32 %a, i32 %b) {
286 ; CHECK-LABEL: test.cv.alu.suburn.case.a:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    cv.suburn a0, a0, a1, 15
289 ; CHECK-NEXT:    ret
290   %1 = call i32 @llvm.riscv.cv.alu.suburn(i32 %a, i32 %b, i32 15)
291   ret i32 %1
294 define i32 @test.cv.alu.suburn.case.b(i32 %a, i32 %b) {
295 ; CHECK-LABEL: test.cv.alu.suburn.case.b:
296 ; CHECK:       # %bb.0:
297 ; CHECK-NEXT:    li a2, 32
298 ; CHECK-NEXT:    cv.suburnr a0, a1, a2
299 ; CHECK-NEXT:    ret
300   %1 = call i32 @llvm.riscv.cv.alu.suburn(i32 %a, i32 %b, i32 32)
301   ret i32 %1