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 \
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) {
14 ; CHECK-NEXT: cv.abs a0, a0
16 %1 = call i32 @llvm.abs.i32(i32 %a, i1 false)
20 define i1 @slet(i32 %a, i32 %b) {
23 ; CHECK-NEXT: cv.sle a0, a0, a1
25 %1 = icmp sle i32 %a, %b
29 define i1 @sletu(i32 %a, i32 %b) {
32 ; CHECK-NEXT: cv.sleu a0, a0, a1
34 %1 = icmp ule i32 %a, %b
38 define i32 @smin(i32 %a, i32 %b) {
41 ; CHECK-NEXT: cv.min a0, a0, a1
43 %1 = call i32 @llvm.smin.i32(i32 %a, i32 %b)
47 define i32 @umin(i32 %a, i32 %b) {
50 ; CHECK-NEXT: cv.minu a0, a0, a1
52 %1 = call i32 @llvm.umin.i32(i32 %a, i32 %b)
56 define i32 @smax(i32 %a, i32 %b) {
59 ; CHECK-NEXT: cv.max a0, a0, a1
61 %1 = call i32 @llvm.smax.i32(i32 %a, i32 %b)
65 define i32 @umax(i32 %a, i32 %b) {
68 ; CHECK-NEXT: cv.maxu a0, a0, a1
70 %1 = call i32 @llvm.umax.i32(i32 %a, i32 %b)
74 define i32 @exths(i16 %a) {
77 ; CHECK-NEXT: # kill: def $x11 killed $x10
78 ; CHECK-NEXT: cv.exths a0, a0
80 %1 = sext i16 %a to i32
84 define i32 @exthz(i16 %a) {
87 ; CHECK-NEXT: # kill: def $x11 killed $x10
88 ; CHECK-NEXT: cv.exthz a0, a0
90 %1 = zext i16 %a to i32
94 define i32 @extbs(i8 %a) {
97 ; CHECK-NEXT: # kill: def $x11 killed $x10
98 ; CHECK-NEXT: cv.extbs a0, a0
100 %1 = sext i8 %a to i32
104 define i32 @extbz(i8 %a) {
105 ; CHECK-LABEL: extbz:
107 ; CHECK-NEXT: # kill: def $x11 killed $x10
108 ; CHECK-NEXT: cv.extbz a0, a0
110 %1 = zext i8 %a to i32
114 declare i32 @llvm.riscv.cv.alu.clip(i32, i32)
116 define i32 @test.cv.alu.clip.case.a(i32 %a) {
117 ; CHECK-LABEL: test.cv.alu.clip.case.a:
119 ; CHECK-NEXT: cv.clip a0, a0, 5
121 %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 15)
125 define i32 @test.cv.alu.clip.case.b(i32 %a) {
126 ; CHECK-LABEL: test.cv.alu.clip.case.b:
128 ; CHECK-NEXT: li a1, 10
129 ; CHECK-NEXT: cv.clipr a0, a0, a1
131 %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 10)
135 declare i32 @llvm.riscv.cv.alu.clipu(i32, i32)
137 define i32 @test.cv.alu.clipu.case.a(i32 %a) {
138 ; CHECK-LABEL: test.cv.alu.clipu.case.a:
140 ; CHECK-NEXT: cv.clipu a0, a0, 9
142 %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 255)
146 define i32 @test.cv.alu.clipu.case.b(i32 %a) {
147 ; CHECK-LABEL: test.cv.alu.clipu.case.b:
149 ; CHECK-NEXT: li a1, 200
150 ; CHECK-NEXT: cv.clipur a0, a0, a1
152 %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 200)
156 declare i32 @llvm.riscv.cv.alu.addN(i32, i32, i32)
158 define i32 @test.cv.alu.addN.case.a(i32 %a, i32 %b) {
159 ; CHECK-LABEL: test.cv.alu.addN.case.a:
161 ; CHECK-NEXT: cv.addn a0, a0, a1, 15
163 %1 = call i32 @llvm.riscv.cv.alu.addN(i32 %a, i32 %b, i32 15)
167 define i32 @test.cv.alu.addN.case.b(i32 %a, i32 %b) {
168 ; CHECK-LABEL: test.cv.alu.addN.case.b:
170 ; CHECK-NEXT: li a2, 32
171 ; CHECK-NEXT: cv.addnr a0, a1, a2
173 %1 = call i32 @llvm.riscv.cv.alu.addN(i32 %a, i32 %b, i32 32)
177 declare i32 @llvm.riscv.cv.alu.adduN(i32, i32, i32)
179 define i32 @test.cv.alu.adduN.case.a(i32 %a, i32 %b) {
180 ; CHECK-LABEL: test.cv.alu.adduN.case.a:
182 ; CHECK-NEXT: cv.addun a0, a0, a1, 15
184 %1 = call i32 @llvm.riscv.cv.alu.adduN(i32 %a, i32 %b, i32 15)
188 define i32 @test.cv.alu.adduN.case.b(i32 %a, i32 %b) {
189 ; CHECK-LABEL: test.cv.alu.adduN.case.b:
191 ; CHECK-NEXT: li a2, 32
192 ; CHECK-NEXT: cv.addunr a0, a1, a2
194 %1 = call i32 @llvm.riscv.cv.alu.adduN(i32 %a, i32 %b, i32 32)
198 declare i32 @llvm.riscv.cv.alu.addRN(i32, i32, i32)
200 define i32 @test.cv.alu.addRN.case.a(i32 %a, i32 %b) {
201 ; CHECK-LABEL: test.cv.alu.addRN.case.a:
203 ; CHECK-NEXT: cv.addrn a0, a0, a1, 15
205 %1 = call i32 @llvm.riscv.cv.alu.addRN(i32 %a, i32 %b, i32 15)
209 define i32 @test.cv.alu.addRN.case.b(i32 %a, i32 %b) {
210 ; CHECK-LABEL: test.cv.alu.addRN.case.b:
212 ; CHECK-NEXT: li a2, 32
213 ; CHECK-NEXT: cv.addrnr a0, a1, a2
215 %1 = call i32 @llvm.riscv.cv.alu.addRN(i32 %a, i32 %b, i32 32)
219 declare i32 @llvm.riscv.cv.alu.adduRN(i32, i32, i32)
221 define i32 @test.cv.alu.adduRN.case.a(i32 %a, i32 %b) {
222 ; CHECK-LABEL: test.cv.alu.adduRN.case.a:
224 ; CHECK-NEXT: cv.addurn a0, a0, a1, 15
226 %1 = call i32 @llvm.riscv.cv.alu.adduRN(i32 %a, i32 %b, i32 15)
230 define i32 @test.cv.alu.adduRN.case.b(i32 %a, i32 %b) {
231 ; CHECK-LABEL: test.cv.alu.adduRN.case.b:
233 ; CHECK-NEXT: li a2, 32
234 ; CHECK-NEXT: cv.addurnr a0, a1, a2
236 %1 = call i32 @llvm.riscv.cv.alu.adduRN(i32 %a, i32 %b, i32 32)
240 declare i32 @llvm.riscv.cv.alu.subN(i32, i32, i32)
242 define i32 @test.cv.alu.subN.case.a(i32 %a, i32 %b) {
243 ; CHECK-LABEL: test.cv.alu.subN.case.a:
245 ; CHECK-NEXT: cv.subn a0, a0, a1, 15
247 %1 = call i32 @llvm.riscv.cv.alu.subN(i32 %a, i32 %b, i32 15)
251 define i32 @test.cv.alu.subN.case.b(i32 %a, i32 %b) {
252 ; CHECK-LABEL: test.cv.alu.subN.case.b:
254 ; CHECK-NEXT: li a2, 32
255 ; CHECK-NEXT: cv.subnr a0, a1, a2
257 %1 = call i32 @llvm.riscv.cv.alu.subN(i32 %a, i32 %b, i32 32)
261 declare i32 @llvm.riscv.cv.alu.subuN(i32, i32, i32)
263 define i32 @test.cv.alu.subuN.case.a(i32 %a, i32 %b) {
264 ; CHECK-LABEL: test.cv.alu.subuN.case.a:
266 ; CHECK-NEXT: cv.subun a0, a0, a1, 15
268 %1 = call i32 @llvm.riscv.cv.alu.subuN(i32 %a, i32 %b, i32 15)
272 define i32 @test.cv.alu.subuN.case.b(i32 %a, i32 %b) {
273 ; CHECK-LABEL: test.cv.alu.subuN.case.b:
275 ; CHECK-NEXT: li a2, 32
276 ; CHECK-NEXT: cv.subunr a0, a1, a2
278 %1 = call i32 @llvm.riscv.cv.alu.subuN(i32 %a, i32 %b, i32 32)
282 declare i32 @llvm.riscv.cv.alu.subRN(i32, i32, i32)
284 define i32 @test.cv.alu.subRN.case.a(i32 %a, i32 %b) {
285 ; CHECK-LABEL: test.cv.alu.subRN.case.a:
287 ; CHECK-NEXT: cv.subrn a0, a0, a1, 15
289 %1 = call i32 @llvm.riscv.cv.alu.subRN(i32 %a, i32 %b, i32 15)
293 define i32 @test.cv.alu.subRN.case.b(i32 %a, i32 %b) {
294 ; CHECK-LABEL: test.cv.alu.subRN.case.b:
296 ; CHECK-NEXT: li a2, 32
297 ; CHECK-NEXT: cv.subrnr a0, a1, a2
299 %1 = call i32 @llvm.riscv.cv.alu.subRN(i32 %a, i32 %b, i32 32)
303 declare i32 @llvm.riscv.cv.alu.subuRN(i32, i32, i32)
305 define i32 @test.cv.alu.subuRN.case.a(i32 %a, i32 %b) {
306 ; CHECK-LABEL: test.cv.alu.subuRN.case.a:
308 ; CHECK-NEXT: cv.suburn a0, a0, a1, 15
310 %1 = call i32 @llvm.riscv.cv.alu.subuRN(i32 %a, i32 %b, i32 15)
314 define i32 @test.cv.alu.subuRN.case.b(i32 %a, i32 %b) {
315 ; CHECK-LABEL: test.cv.alu.subuRN.case.b:
317 ; CHECK-NEXT: li a2, 32
318 ; CHECK-NEXT: cv.suburnr a0, a1, a2
320 %1 = call i32 @llvm.riscv.cv.alu.subuRN(i32 %a, i32 %b, i32 32)