1 ; RUN: llc -march=mips -mattr=+msa,+fp64,+mips32r2 -relocation-model=pic < %s \
2 ; RUN: | FileCheck %s -check-prefixes=CHECK,MSA32
3 ; RUN: llc -march=mips64 -mattr=+msa,+fp64 -relocation-model=pic -target-abi n32 < %s \
4 ; RUN: | FileCheck %s -check-prefixes=CHECK,MSA64,MSA64N32
5 ; RUN: llc -march=mips64 -mattr=+msa,+fp64 -relocation-model=pic -target-abi n64 < %s \
6 ; RUN: | FileCheck %s -check-prefixes=CHECK,MSA64,MSA64N64
8 ; Test that the immediate intrinsics don't crash LLVM.
10 ; Some of the intrinsics lower to equivalent forms.
12 define void @addvi_b(<16 x i8> * %ptr) {
14 ; CHECK-LABEL: addvi_b:
16 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
17 %r = call <16 x i8> @llvm.mips.addvi.b(<16 x i8> %a, i32 25)
18 store <16 x i8> %r, <16 x i8> * %ptr, align 16
22 define void @andi_b(<16 x i8> * %ptr) {
24 ; CHECK-LABEL: andi_b:
26 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
27 %r = call <16 x i8> @llvm.mips.andi.b(<16 x i8> %a, i32 25)
28 store <16 x i8> %r, <16 x i8> * %ptr, align 16
32 define void @bclri_b(<16 x i8> * %ptr) {
34 ; CHECK-LABEL: bclri_b:
36 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
37 %r = call <16 x i8> @llvm.mips.bclri.b(<16 x i8> %a, i32 3)
38 store <16 x i8> %r, <16 x i8> * %ptr, align 16
42 define void @binsli_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
44 ; CHECK-LABEL: binsli_b:
46 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
47 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
48 %r = call <16 x i8> @llvm.mips.binsli.b(<16 x i8> %a, <16 x i8> %b, i32 3)
49 store <16 x i8> %r, <16 x i8> * %ptr, align 16
53 define void @binsri_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
55 ; CHECK-LABEL: binsri_b:
57 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
58 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
59 %r = call <16 x i8> @llvm.mips.binsri.b(<16 x i8> %a, <16 x i8> %b, i32 5)
60 store <16 x i8> %r, <16 x i8> * %ptr, align 16
64 define void @bmnzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
66 ; CHECK-LABEL: bmnzi_b:
68 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
69 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
70 %r = call <16 x i8> @llvm.mips.bmnzi.b(<16 x i8> %a, <16 x i8> %b, i32 25)
71 store <16 x i8> %r, <16 x i8> * %ptr, align 16
75 define void @bmzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
77 ; CHECK-LABEL: bmzi_b:
79 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
80 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
81 %r = call <16 x i8> @llvm.mips.bmzi.b(<16 x i8> %a, <16 x i8> %b, i32 25)
82 store <16 x i8> %r, <16 x i8> * %ptr, align 16
86 define void @bnegi_b(<16 x i8> * %ptr) {
88 ; CHECK-LABEL: bnegi_b:
90 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
91 %r = call <16 x i8> @llvm.mips.bnegi.b(<16 x i8> %a, i32 6)
92 store <16 x i8> %r, <16 x i8> * %ptr, align 16
96 define void @bseli_b(<16 x i8> * %ptr) {
98 ; CHECK-LABEL: bseli_b:
100 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
101 %r = call <16 x i8> @llvm.mips.bseli.b(<16 x i8> %a, <16 x i8> %a, i32 25)
102 store <16 x i8> %r, <16 x i8> * %ptr, align 16
106 define void @bseti_b(<16 x i8> * %ptr) {
108 ; CHECK-LABEL: bseti_b:
110 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
111 %r = call <16 x i8> @llvm.mips.bseti.b(<16 x i8> %a, i32 5)
112 store <16 x i8> %r, <16 x i8> * %ptr, align 16
116 define void @clei_s_b(<16 x i8> * %ptr) {
118 ; CHECK-LABEL: clei_s_b:
120 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
121 %r = call <16 x i8> @llvm.mips.clei.s.b(<16 x i8> %a, i32 12)
122 store <16 x i8> %r, <16 x i8> * %ptr, align 16
126 define void @clei_u_b(<16 x i8> * %ptr) {
128 ; CHECK-LABEL: clei_u_b:
130 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
131 %r = call <16 x i8> @llvm.mips.clei.u.b(<16 x i8> %a, i32 25)
132 store <16 x i8> %r, <16 x i8> * %ptr, align 16
136 define void @clti_s_b(<16 x i8> * %ptr) {
138 ; CHECK-LABEL: clti_s_b:
140 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
141 %r = call <16 x i8> @llvm.mips.clti.s.b(<16 x i8> %a, i32 15)
142 store <16 x i8> %r, <16 x i8> * %ptr, align 16
146 define void @clti_u_b(<16 x i8> * %ptr) {
148 ; CHECK-LABEL: clti_u_b:
150 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
151 %r = call <16 x i8> @llvm.mips.clti.u.b(<16 x i8> %a, i32 25)
152 store <16 x i8> %r, <16 x i8> * %ptr, align 16
156 define void @ldi_b(<16 x i8> * %ptr) {
158 ; CHECK-LABEL: ldi_b:
160 %r = call <16 x i8> @llvm.mips.ldi.b(i32 3)
161 store <16 x i8> %r, <16 x i8> * %ptr, align 16
165 define void @maxi_s_b(<16 x i8> * %ptr) {
167 ; CHECK-LABEL: maxi_s_b:
169 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
170 %r = call <16 x i8> @llvm.mips.maxi.s.b(<16 x i8> %a, i32 2)
171 store <16 x i8> %r, <16 x i8> * %ptr, align 16
175 define void @maxi_u_b(<16 x i8> * %ptr) {
177 ; CHECK-LABEL: maxi_u_b:
179 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
180 %r = call <16 x i8> @llvm.mips.maxi.u.b(<16 x i8> %a, i32 2)
181 store <16 x i8> %r, <16 x i8> * %ptr, align 16
185 define void @mini_s_b(<16 x i8> * %ptr) {
187 ; CHECK-LABEL: mini_s_b:
189 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
190 %r = call <16 x i8> @llvm.mips.mini.s.b(<16 x i8> %a, i32 2)
191 store <16 x i8> %r, <16 x i8> * %ptr, align 16
195 define void @mini_u_b(<16 x i8> * %ptr) {
197 ; CHECK-LABEL: mini_u_b:
199 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
200 %r = call <16 x i8> @llvm.mips.mini.u.b(<16 x i8> %a, i32 2)
201 store <16 x i8> %r, <16 x i8> * %ptr, align 16
205 define void @nori_b(<16 x i8> * %ptr) {
207 ; CHECK-LABEL: nori_b:
209 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
210 %r = call <16 x i8> @llvm.mips.nori.b(<16 x i8> %a, i32 25)
211 store <16 x i8> %r, <16 x i8> * %ptr, align 16
215 define void @ori_b(<16 x i8> * %ptr) {
217 ; CHECK-LABEL: ori_b:
219 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
220 %r = call <16 x i8> @llvm.mips.ori.b(<16 x i8> %a, i32 25)
221 store <16 x i8> %r, <16 x i8> * %ptr, align 16
225 define void @sldi_b(<16 x i8> * %ptr) {
227 ; CHECK-LABEL: sldi_b:
229 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
230 %r = call <16 x i8> @llvm.mips.sldi.b(<16 x i8> %a, <16 x i8> %a, i32 7)
231 store <16 x i8> %r, <16 x i8> * %ptr, align 16
235 define void @slli_b(<16 x i8> * %ptr) {
237 ; CHECK-LABEL: slli_b:
239 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
240 %r = call <16 x i8> @llvm.mips.slli.b(<16 x i8> %a, i32 3)
241 store <16 x i8> %r, <16 x i8> * %ptr, align 16
245 define void @splati_b(<16 x i8> * %ptr) {
247 ; CHECK-LABEL: splati_b:
249 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
250 %r = call <16 x i8> @llvm.mips.splati.b(<16 x i8> %a, i32 3)
251 store <16 x i8> %r, <16 x i8> * %ptr, align 16
255 define void @srai_b(<16 x i8> * %ptr) {
257 ; CHECK-LABEL: srai_b:
259 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
260 %r = call <16 x i8> @llvm.mips.srai.b(<16 x i8> %a, i32 3)
261 store <16 x i8> %r, <16 x i8> * %ptr, align 16
265 define void @srari_b(<16 x i8> * %ptr) {
267 ; CHECK-LABEL: srari_b:
269 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
270 %r = call <16 x i8> @llvm.mips.srari.b(<16 x i8> %a, i32 3)
271 store <16 x i8> %r, <16 x i8> * %ptr, align 16
275 define void @srli_b(<16 x i8> * %ptr) {
277 ; CHECK-LABEL: srli_b:
279 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
280 %r = call <16 x i8> @llvm.mips.srli.b(<16 x i8> %a, i32 3)
281 store <16 x i8> %r, <16 x i8> * %ptr, align 16
285 define void @srlri_b(<16 x i8> * %ptr) {
287 ; CHECK-LABEL: srlri_b:
289 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
290 %r = call <16 x i8> @llvm.mips.srlri.b(<16 x i8> %a, i32 3)
291 store <16 x i8> %r, <16 x i8> * %ptr, align 16
295 define void @addvi_w(<4 x i32> * %ptr) {
297 ; CHECK-LABEL: addvi_w:
299 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
300 %r = call <4 x i32> @llvm.mips.addvi.w(<4 x i32> %a, i32 25)
301 store <4 x i32> %r, <4 x i32> * %ptr, align 16
305 define void @bclri_w(<4 x i32> * %ptr) {
307 ; CHECK-LABEL: bclri_w:
309 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
310 %r = call <4 x i32> @llvm.mips.bclri.w(<4 x i32> %a, i32 25)
311 store <4 x i32> %r, <4 x i32> * %ptr, align 16
315 define void @binsli_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) {
317 ; CHECK-LABEL: binsli_w:
319 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
320 %b = load <4 x i32>, <4 x i32> * %ptr2, align 16
321 %r = call <4 x i32> @llvm.mips.binsli.w(<4 x i32> %a, <4 x i32> %b, i32 25)
322 store <4 x i32> %r, <4 x i32> * %ptr, align 16
326 define void @binsri_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) {
328 ; CHECK-LABEL: binsri_w:
330 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
331 %b = load <4 x i32>, <4 x i32> * %ptr2, align 16
332 %r = call <4 x i32> @llvm.mips.binsri.w(<4 x i32> %a, <4 x i32> %b, i32 25)
333 store <4 x i32> %r, <4 x i32> * %ptr, align 16
337 define void @bnegi_w(<4 x i32> * %ptr) {
339 ; CHECK-LABEL: bnegi_w:
341 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
342 %r = call <4 x i32> @llvm.mips.bnegi.w(<4 x i32> %a, i32 25)
343 store <4 x i32> %r, <4 x i32> * %ptr, align 16
347 define void @bseti_w(<4 x i32> * %ptr) {
349 ; CHECK-LABEL: bseti_w:
351 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
352 %r = call <4 x i32> @llvm.mips.bseti.w(<4 x i32> %a, i32 25)
353 store <4 x i32> %r, <4 x i32> * %ptr, align 16
357 define void @clei_s_w(<4 x i32> * %ptr) {
359 ; CHECK-LABEL: clei_s_w:
361 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
362 %r = call <4 x i32> @llvm.mips.clei.s.w(<4 x i32> %a, i32 14)
363 store <4 x i32> %r, <4 x i32> * %ptr, align 16
367 define void @clei_u_w(<4 x i32> * %ptr) {
369 ; CHECK-LABEL: clei_u_w:
371 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
372 %r = call <4 x i32> @llvm.mips.clei.u.w(<4 x i32> %a, i32 25)
373 store <4 x i32> %r, <4 x i32> * %ptr, align 16
377 define void @clti_s_w(<4 x i32> * %ptr) {
379 ; CHECK-LABEL: clti_s_w:
381 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
382 %r = call <4 x i32> @llvm.mips.clti.s.w(<4 x i32> %a, i32 15)
383 store <4 x i32> %r, <4 x i32> * %ptr, align 16
387 define void @clti_u_w(<4 x i32> * %ptr) {
389 ; CHECK-LABEL: clti_u_w:
391 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
392 %r = call <4 x i32> @llvm.mips.clti.u.w(<4 x i32> %a, i32 25)
393 store <4 x i32> %r, <4 x i32> * %ptr, align 16
397 define void @maxi_s_w(<4 x i32> * %ptr) {
399 ; CHECK-LABEL: maxi_s_w:
401 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
402 %r = call <4 x i32> @llvm.mips.maxi.s.w(<4 x i32> %a, i32 2)
403 store <4 x i32> %r, <4 x i32> * %ptr, align 16
407 define void @maxi_u_w(<4 x i32> * %ptr) {
409 ; CHECK-LABEL: maxi_u_w:
411 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
412 %r = call <4 x i32> @llvm.mips.maxi.u.w(<4 x i32> %a, i32 2)
413 store <4 x i32> %r, <4 x i32> * %ptr, align 16
417 define void @mini_s_w(<4 x i32> * %ptr) {
419 ; CHECK-LABEL: mini_s_w:
421 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
422 %r = call <4 x i32> @llvm.mips.mini.s.w(<4 x i32> %a, i32 2)
423 store <4 x i32> %r, <4 x i32> * %ptr, align 16
427 define void @mini_u_w(<4 x i32> * %ptr) {
429 ; CHECK-LABEL: mini_u_w:
431 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
432 %r = call <4 x i32> @llvm.mips.mini.u.w(<4 x i32> %a, i32 2)
433 store <4 x i32> %r, <4 x i32> * %ptr, align 16
437 define void @ldi_w(<4 x i32> * %ptr) {
439 ; CHECK-LABEL: ldi_w:
441 %r = call <4 x i32> @llvm.mips.ldi.w(i32 3)
442 store <4 x i32> %r, <4 x i32> * %ptr, align 16
446 define void @sldi_w(<4 x i32> * %ptr) {
448 ; CHECK-LABEL: sldi_w:
450 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
451 %r = call <4 x i32> @llvm.mips.sldi.w(<4 x i32> %a, <4 x i32> %a, i32 2)
452 store <4 x i32> %r, <4 x i32> * %ptr, align 16
456 define void @slli_w(<4 x i32> * %ptr) {
458 ; CHECK-LABEL: slli_w:
460 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
461 %r = call <4 x i32> @llvm.mips.slli.w(<4 x i32> %a, i32 3)
462 store <4 x i32> %r, <4 x i32> * %ptr, align 16
466 define void @splati_w(<4 x i32> * %ptr) {
468 ; CHECK-LABEL: splati_w:
470 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
471 %r = call <4 x i32> @llvm.mips.splati.w(<4 x i32> %a, i32 3)
472 store <4 x i32> %r, <4 x i32> * %ptr, align 16
476 define void @srai_w(<4 x i32> * %ptr) {
478 ; CHECK-LABEL: srai_w:
480 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
481 %r = call <4 x i32> @llvm.mips.srai.w(<4 x i32> %a, i32 3)
482 store <4 x i32> %r, <4 x i32> * %ptr, align 16
486 define void @srari_w(<4 x i32> * %ptr) {
488 ; CHECK-LABEL: srari_w:
490 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
491 %r = call <4 x i32> @llvm.mips.srari.w(<4 x i32> %a, i32 3)
492 store <4 x i32> %r, <4 x i32> * %ptr, align 16
496 define void @srli_w(<4 x i32> * %ptr) {
498 ; CHECK-LABEL: srli_w:
500 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
501 %r = call <4 x i32> @llvm.mips.srli.w(<4 x i32> %a, i32 3)
502 store <4 x i32> %r, <4 x i32> * %ptr, align 16
506 define void @srlri_w(<4 x i32> * %ptr) {
508 ; CHECK-LABEL: srlri_w:
510 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
511 %r = call <4 x i32> @llvm.mips.srlri.w(<4 x i32> %a, i32 3)
512 store <4 x i32> %r, <4 x i32> * %ptr, align 16
516 define void @addvi_h(<8 x i16> * %ptr) {
518 ; CHECK-LABEL: addvi_h:
520 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
521 %r = call <8 x i16> @llvm.mips.addvi.h(<8 x i16> %a, i32 25)
522 store <8 x i16> %r, <8 x i16> * %ptr, align 16
526 define void @bclri_h(<8 x i16> * %ptr) {
528 ; CHECK-LABEL: bclri_h:
530 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
531 %r = call <8 x i16> @llvm.mips.bclri.h(<8 x i16> %a, i32 8)
532 store <8 x i16> %r, <8 x i16> * %ptr, align 16
536 define void @binsli_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) {
538 ; CHECK-LABEL: binsli_h:
540 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
541 %b = load <8 x i16>, <8 x i16> * %ptr2, align 16
542 %r = call <8 x i16> @llvm.mips.binsli.h(<8 x i16> %a, <8 x i16> %b, i32 8)
543 store <8 x i16> %r, <8 x i16> * %ptr, align 16
547 define void @binsri_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) {
549 ; CHECK-LABEL: binsri_h:
551 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
552 %b = load <8 x i16>, <8 x i16> * %ptr2, align 16
553 %r = call <8 x i16> @llvm.mips.binsri.h(<8 x i16> %a, <8 x i16> %b, i32 14)
554 store <8 x i16> %r, <8 x i16> * %ptr, align 16
558 define void @bnegi_h(<8 x i16> * %ptr) {
560 ; CHECK-LABEL: bnegi_h:
562 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
563 %r = call <8 x i16> @llvm.mips.bnegi.h(<8 x i16> %a, i32 14)
564 store <8 x i16> %r, <8 x i16> * %ptr, align 16
568 define void @bseti_h(<8 x i16> * %ptr) {
570 ; CHECK-LABEL: bseti_h:
572 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
573 %r = call <8 x i16> @llvm.mips.bseti.h(<8 x i16> %a, i32 15)
574 store <8 x i16> %r, <8 x i16> * %ptr, align 16
578 define void @clei_s_h(<8 x i16> * %ptr) {
580 ; CHECK-LABEL: clei_s_h:
582 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
583 %r = call <8 x i16> @llvm.mips.clei.s.h(<8 x i16> %a, i32 13)
584 store <8 x i16> %r, <8 x i16> * %ptr, align 16
588 define void @clei_u_h(<8 x i16> * %ptr) {
590 ; CHECK-LABEL: clei_u_h:
592 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
593 %r = call <8 x i16> @llvm.mips.clei.u.h(<8 x i16> %a, i32 25)
594 store <8 x i16> %r, <8 x i16> * %ptr, align 16
598 define void @clti_s_h(<8 x i16> * %ptr) {
600 ; CHECK-LABEL: clti_s_h:
602 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
603 %r = call <8 x i16> @llvm.mips.clti.s.h(<8 x i16> %a, i32 15)
604 store <8 x i16> %r, <8 x i16> * %ptr, align 16
608 define void @clti_u_h(<8 x i16> * %ptr) {
610 ; CHECK-LABEL: clti_u_h:
612 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
613 %r = call <8 x i16> @llvm.mips.clti.u.h(<8 x i16> %a, i32 25)
614 store <8 x i16> %r, <8 x i16> * %ptr, align 16
618 define void @maxi_s_h(<8 x i16> * %ptr) {
620 ; CHECK-LABEL: maxi_s_h:
622 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
623 %r = call <8 x i16> @llvm.mips.maxi.s.h(<8 x i16> %a, i32 2)
624 store <8 x i16> %r, <8 x i16> * %ptr, align 16
628 define void @maxi_u_h(<8 x i16> * %ptr) {
630 ; CHECK-LABEL: maxi_u_h:
632 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
633 %r = call <8 x i16> @llvm.mips.maxi.u.h(<8 x i16> %a, i32 2)
634 store <8 x i16> %r, <8 x i16> * %ptr, align 16
638 define void @mini_s_h(<8 x i16> * %ptr) {
640 ; CHECK-LABEL: mini_s_h:
642 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
643 %r = call <8 x i16> @llvm.mips.mini.s.h(<8 x i16> %a, i32 2)
644 store <8 x i16> %r, <8 x i16> * %ptr, align 16
648 define void @mini_u_h(<8 x i16> * %ptr) {
650 ; CHECK-LABEL: mini_u_h:
652 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
653 %r = call <8 x i16> @llvm.mips.mini.u.h(<8 x i16> %a, i32 2)
654 store <8 x i16> %r, <8 x i16> * %ptr, align 16
658 define void @ldi_h(<8 x i16> * %ptr) {
660 ; CHECK-LABEL: ldi_h:
662 %r = call <8 x i16> @llvm.mips.ldi.h(i32 3)
663 store <8 x i16> %r, <8 x i16> * %ptr, align 16
667 define void @sldi_h(<8 x i16> * %ptr) {
669 ; CHECK-LABEL: sldi_h:
671 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
672 %r = call <8 x i16> @llvm.mips.sldi.h(<8 x i16> %a, <8 x i16> %a, i32 3)
673 store <8 x i16> %r, <8 x i16> * %ptr, align 16
677 define void @slli_h(<8 x i16> * %ptr) {
679 ; CHECK-LABEL: slli_h:
681 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
682 %r = call <8 x i16> @llvm.mips.slli.h(<8 x i16> %a, i32 3)
683 store <8 x i16> %r, <8 x i16> * %ptr, align 16
687 define void @splati_h(<8 x i16> * %ptr) {
689 ; CHECK-LABEL: splati_h:
691 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
692 %r = call <8 x i16> @llvm.mips.splati.h(<8 x i16> %a, i32 3)
693 store <8 x i16> %r, <8 x i16> * %ptr, align 16
697 define void @srai_h(<8 x i16> * %ptr) {
699 ; CHECK-LABEL: srai_h:
701 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
702 %r = call <8 x i16> @llvm.mips.srai.h(<8 x i16> %a, i32 3)
703 store <8 x i16> %r, <8 x i16> * %ptr, align 16
707 define void @srari_h(<8 x i16> * %ptr) {
709 ; CHECK-LABEL: srari_h:
711 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
712 %r = call <8 x i16> @llvm.mips.srari.h(<8 x i16> %a, i32 3)
713 store <8 x i16> %r, <8 x i16> * %ptr, align 16
717 define void @srli_h(<8 x i16> * %ptr) {
719 ; CHECK-LABEL: srli_h:
721 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
722 %r = call <8 x i16> @llvm.mips.srli.h(<8 x i16> %a, i32 3)
723 store <8 x i16> %r, <8 x i16> * %ptr, align 16
727 define void @srlri_h(<8 x i16> * %ptr) {
729 ; CHECK-LABEL: srlri_h:
731 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
732 %r = call <8 x i16> @llvm.mips.srlri.h(<8 x i16> %a, i32 3)
733 store <8 x i16> %r, <8 x i16> * %ptr, align 16
737 define i32 @copy_s_b(<16 x i8> * %ptr) {
739 ; CHECK-LABEL: copy_s_b:
741 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
742 %r = call i32 @llvm.mips.copy.s.b(<16 x i8> %a, i32 1)
745 define i32 @copy_s_h(<8 x i16> * %ptr) {
747 ; CHECK-LABEL: copy_s_h:
749 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
750 %r = call i32 @llvm.mips.copy.s.h(<8 x i16> %a, i32 1)
753 define i32 @copy_s_w(<4 x i32> * %ptr) {
755 ; CHECK-LABEL: copy_s_w:
757 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
758 %r = call i32 @llvm.mips.copy.s.w(<4 x i32> %a, i32 1)
761 define i32 @copy_u_b(<16 x i8> * %ptr) {
763 ; CHECK-LABEL: copy_u_b:
765 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
766 %r = call i32 @llvm.mips.copy.u.b(<16 x i8> %a, i32 1)
769 define i32 @copy_u_h(<8 x i16> * %ptr) {
771 ; CHECK-LABEL: copy_u_h:
773 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
774 %r = call i32 @llvm.mips.copy.u.h(<8 x i16> %a, i32 1)
777 define i32 @copy_u_w(<4 x i32> * %ptr) {
779 ; CHECK-LABEL: copy_u_w:
782 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
783 %r = call i32 @llvm.mips.copy.u.w(<4 x i32> %a, i32 1)
787 define i64 @copy_s_d(<2 x i64> * %ptr) {
789 ; CHECK-LABEL: copy_s_d:
793 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
794 %r = call i64 @llvm.mips.copy.s.d(<2 x i64> %a, i32 1)
798 define i64 @copy_u_d(<2 x i64> * %ptr) {
800 ; CHECK-LABEL: copy_u_d:
804 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
805 %r = call i64 @llvm.mips.copy.u.d(<2 x i64> %a, i32 1)
809 define void @addvi_d(<2 x i64> * %ptr) {
811 ; CHECK-LABEL: addvi_d:
813 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
814 %r = call <2 x i64> @llvm.mips.addvi.d(<2 x i64> %a, i32 25)
815 store <2 x i64> %r, <2 x i64> * %ptr, align 16
819 define void @bclri_d(<2 x i64> * %ptr) {
821 ; CHECK-LABEL: bclri_d:
823 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
824 %r = call <2 x i64> @llvm.mips.bclri.d(<2 x i64> %a, i32 16)
825 store <2 x i64> %r, <2 x i64> * %ptr, align 16
829 define void @binsli_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) {
831 ; CHECK-LABEL: binsli_d:
833 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
834 %b = load <2 x i64>, <2 x i64> * %ptr2, align 16
835 %r = call <2 x i64> @llvm.mips.binsli.d(<2 x i64> %a, <2 x i64> %b, i32 4)
836 store <2 x i64> %r, <2 x i64> * %ptr, align 16
840 define void @binsri_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) {
842 ; CHECK-LABEL: binsri_d:
844 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
845 %b = load <2 x i64>, <2 x i64> * %ptr2, align 16
846 %r = call <2 x i64> @llvm.mips.binsri.d(<2 x i64> %a, <2 x i64> %b, i32 5)
847 store <2 x i64> %r, <2 x i64> * %ptr, align 16
851 define void @bnegi_d(<2 x i64> * %ptr) {
853 ; CHECK-LABEL: bnegi_d:
855 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
856 %r = call <2 x i64> @llvm.mips.bnegi.d(<2 x i64> %a, i32 9)
857 store <2 x i64> %r, <2 x i64> * %ptr, align 16
861 define void @bseti_d(<2 x i64> * %ptr) {
863 ; CHECK-LABEL: bseti_d:
865 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
866 %r = call <2 x i64> @llvm.mips.bseti.d(<2 x i64> %a, i32 25)
867 store <2 x i64> %r, <2 x i64> * %ptr, align 16
871 define void @clei_s_d(<2 x i64> * %ptr) {
873 ; CHECK-LABEL: clei_s_d:
875 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
876 %r = call <2 x i64> @llvm.mips.clei.s.d(<2 x i64> %a, i32 15)
877 store <2 x i64> %r, <2 x i64> * %ptr, align 16
881 define void @clei_u_d(<2 x i64> * %ptr) {
883 ; CHECK-LABEL: clei_u_d:
885 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
886 %r = call <2 x i64> @llvm.mips.clei.u.d(<2 x i64> %a, i32 25)
887 store <2 x i64> %r, <2 x i64> * %ptr, align 16
891 define void @clti_s_d(<2 x i64> * %ptr) {
893 ; CHECK-LABEL: clti_s_d:
895 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
896 %r = call <2 x i64> @llvm.mips.clti.s.d(<2 x i64> %a, i32 15)
897 store <2 x i64> %r, <2 x i64> * %ptr, align 16
901 define void @clti_u_d(<2 x i64> * %ptr) {
903 ; CHECK-LABEL: clti_u_d:
905 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
906 %r = call <2 x i64> @llvm.mips.clti.u.d(<2 x i64> %a, i32 25)
907 store <2 x i64> %r, <2 x i64> * %ptr, align 16
911 define void @ldi_d(<2 x i64> * %ptr) {
913 ; CHECK-LABEL: ldi_d:
915 %r = call <2 x i64> @llvm.mips.ldi.d(i32 3)
916 store <2 x i64> %r, <2 x i64> * %ptr, align 16
920 define void @maxi_s_d(<2 x i64> * %ptr) {
922 ; CHECK-LABEL: maxi_s_d:
924 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
925 %r = call <2 x i64> @llvm.mips.maxi.s.d(<2 x i64> %a, i32 2)
926 store <2 x i64> %r, <2 x i64> * %ptr, align 16
930 define void @maxi_u_d(<2 x i64> * %ptr) {
932 ; CHECK-LABEL: maxi_u_d:
934 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
935 %r = call <2 x i64> @llvm.mips.maxi.u.d(<2 x i64> %a, i32 2)
936 store <2 x i64> %r, <2 x i64> * %ptr, align 16
940 define void @mini_s_d(<2 x i64> * %ptr) {
942 ; CHECK-LABEL: mini_s_d:
944 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
945 %r = call <2 x i64> @llvm.mips.mini.s.d(<2 x i64> %a, i32 2)
946 store <2 x i64> %r, <2 x i64> * %ptr, align 16
950 define void @mini_u_d(<2 x i64> * %ptr) {
952 ; CHECK-LABEL: mini_u_d:
954 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
955 %r = call <2 x i64> @llvm.mips.mini.u.d(<2 x i64> %a, i32 2)
956 store <2 x i64> %r, <2 x i64> * %ptr, align 16
960 define void @sldi_d(<2 x i64> * %ptr) {
962 ; CHECK-LABEL: sldi_d:
964 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
965 %r = call <2 x i64> @llvm.mips.sldi.d(<2 x i64> %a, <2 x i64> %a, i32 1)
966 store <2 x i64> %r, <2 x i64> * %ptr, align 16
970 define void @slli_d(<2 x i64> * %ptr) {
972 ; CHECK-LABEL: slli_d:
974 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
975 %r = call <2 x i64> @llvm.mips.slli.d(<2 x i64> %a, i32 3)
976 store <2 x i64> %r, <2 x i64> * %ptr, align 16
980 define void @srai_d(<2 x i64> * %ptr) {
982 ; CHECK-LABEL: srai_d:
984 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
985 %r = call <2 x i64> @llvm.mips.srai.d(<2 x i64> %a, i32 3)
986 store <2 x i64> %r, <2 x i64> * %ptr, align 16
990 define void @srari_d(<2 x i64> * %ptr) {
992 ; CHECK-LABEL: srari_d:
994 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
995 %r = call <2 x i64> @llvm.mips.srari.d(<2 x i64> %a, i32 3)
996 store <2 x i64> %r, <2 x i64> * %ptr, align 16
1000 define void @srli_d(<2 x i64> * %ptr) {
1002 ; CHECK-LABEL: srli_d:
1004 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
1005 %r = call <2 x i64> @llvm.mips.srli.d(<2 x i64> %a, i32 3)
1006 store <2 x i64> %r, <2 x i64> * %ptr, align 16
1010 define void @srlri_d(<2 x i64> * %ptr) {
1012 ; CHECK-LABEL: srlri_d:
1014 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
1015 %r = call <2 x i64> @llvm.mips.srlri.d(<2 x i64> %a, i32 3)
1016 store <2 x i64> %r, <2 x i64> * %ptr, align 16
1020 define void @ld_d2(<2 x i64> * %ptr, i8 * %ldptr) {
1022 ; CHECK-LABEL: ld_d2
1023 ; MSA32: addiu $[[R0:[0-9]]], $5, 4096
1024 ; MSA64N32: sll $[[R1:[0-9]]], $5, 0
1025 ; MSA64N32: addiu $[[R0:[0-9]]], $[[R1]], 4096
1026 ; MSA64N64: daddiu $[[R0:[0-9]]], $5, 4096
1027 ; CHECK: ld.d $w{{[0-9]+}}, 0($[[R0]])
1028 %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 4096)
1029 store <2 x i64> %a, <2 x i64> * %ptr, align 16
1033 declare <8 x i16> @llvm.mips.ldi.h(i32)
1034 declare <8 x i16> @llvm.mips.addvi.h(<8 x i16>, i32)
1035 declare <8 x i16> @llvm.mips.bclri.h(<8 x i16>, i32)
1036 declare <8 x i16> @llvm.mips.binsli.h(<8 x i16>, <8 x i16>, i32)
1037 declare <8 x i16> @llvm.mips.binsri.h(<8 x i16>, <8 x i16>, i32)
1038 declare <8 x i16> @llvm.mips.bnegi.h(<8 x i16>, i32)
1039 declare <8 x i16> @llvm.mips.bseti.h(<8 x i16>, i32)
1040 declare <8 x i16> @llvm.mips.clei.s.h(<8 x i16>, i32)
1041 declare <8 x i16> @llvm.mips.clei.u.h(<8 x i16>, i32)
1042 declare <8 x i16> @llvm.mips.clti.s.h(<8 x i16>, i32)
1043 declare <8 x i16> @llvm.mips.clti.u.h(<8 x i16>, i32)
1044 declare <8 x i16> @llvm.mips.maxi.s.h(<8 x i16>, i32)
1045 declare <8 x i16> @llvm.mips.maxi.u.h(<8 x i16>, i32)
1046 declare <8 x i16> @llvm.mips.mini.s.h(<8 x i16>, i32)
1047 declare <8 x i16> @llvm.mips.mini.u.h(<8 x i16>, i32)
1048 declare <8 x i16> @llvm.mips.sldi.h(<8 x i16>, <8 x i16>, i32)
1049 declare <8 x i16> @llvm.mips.slli.h(<8 x i16>, i32)
1050 declare <8 x i16> @llvm.mips.splati.h(<8 x i16>, i32)
1051 declare <8 x i16> @llvm.mips.srai.h(<8 x i16>, i32)
1052 declare <8 x i16> @llvm.mips.srari.h(<8 x i16>, i32)
1053 declare <8 x i16> @llvm.mips.srli.h(<8 x i16>, i32)
1054 declare <8 x i16> @llvm.mips.srlri.h(<8 x i16>, i32)
1055 declare <4 x i32> @llvm.mips.addvi.w(<4 x i32>, i32)
1056 declare <4 x i32> @llvm.mips.bclri.w(<4 x i32>, i32)
1057 declare <4 x i32> @llvm.mips.binsli.w(<4 x i32>, <4 x i32>, i32)
1058 declare <4 x i32> @llvm.mips.binsri.w(<4 x i32>, <4 x i32>, i32)
1059 declare <4 x i32> @llvm.mips.bnegi.w(<4 x i32>, i32)
1060 declare <4 x i32> @llvm.mips.bseti.w(<4 x i32>, i32)
1061 declare <4 x i32> @llvm.mips.ldi.w(i32)
1062 declare <4 x i32> @llvm.mips.clei.s.w(<4 x i32>, i32)
1063 declare <4 x i32> @llvm.mips.clei.u.w(<4 x i32>, i32)
1064 declare <4 x i32> @llvm.mips.clti.s.w(<4 x i32>, i32)
1065 declare <4 x i32> @llvm.mips.clti.u.w(<4 x i32>, i32)
1066 declare <4 x i32> @llvm.mips.maxi.s.w(<4 x i32>, i32)
1067 declare <4 x i32> @llvm.mips.maxi.u.w(<4 x i32>, i32)
1068 declare <4 x i32> @llvm.mips.mini.s.w(<4 x i32>, i32)
1069 declare <4 x i32> @llvm.mips.mini.u.w(<4 x i32>, i32)
1070 declare <4 x i32> @llvm.mips.sldi.w(<4 x i32>, <4 x i32>, i32)
1071 declare <4 x i32> @llvm.mips.slli.w(<4 x i32>, i32)
1072 declare <4 x i32> @llvm.mips.splati.w(<4 x i32>, i32)
1073 declare <4 x i32> @llvm.mips.srai.w(<4 x i32>, i32)
1074 declare <4 x i32> @llvm.mips.srari.w(<4 x i32>, i32)
1075 declare <4 x i32> @llvm.mips.srli.w(<4 x i32>, i32)
1076 declare <4 x i32> @llvm.mips.srlri.w(<4 x i32>, i32)
1077 declare <2 x i64> @llvm.mips.ldi.d(i32)
1078 declare <2 x i64> @llvm.mips.addvi.d(<2 x i64>, i32)
1079 declare <2 x i64> @llvm.mips.bclri.d(<2 x i64>, i32)
1080 declare <2 x i64> @llvm.mips.binsli.d(<2 x i64>, <2 x i64>, i32)
1081 declare <2 x i64> @llvm.mips.binsri.d(<2 x i64>, <2 x i64>, i32)
1082 declare <2 x i64> @llvm.mips.bnegi.d(<2 x i64>, i32)
1083 declare <2 x i64> @llvm.mips.bseti.d(<2 x i64>, i32)
1084 declare <2 x i64> @llvm.mips.clei.s.d(<2 x i64>, i32)
1085 declare <2 x i64> @llvm.mips.clei.u.d(<2 x i64>, i32)
1086 declare <2 x i64> @llvm.mips.clti.s.d(<2 x i64>, i32)
1087 declare <2 x i64> @llvm.mips.clti.u.d(<2 x i64>, i32)
1088 declare <2 x i64> @llvm.mips.maxi.s.d(<2 x i64>, i32)
1089 declare <2 x i64> @llvm.mips.maxi.u.d(<2 x i64>, i32)
1090 declare <2 x i64> @llvm.mips.mini.s.d(<2 x i64>, i32)
1091 declare <2 x i64> @llvm.mips.mini.u.d(<2 x i64>, i32)
1092 declare <2 x i64> @llvm.mips.sldi.d(<2 x i64>, <2 x i64>, i32)
1093 declare <2 x i64> @llvm.mips.slli.d(<2 x i64>, i32)
1094 declare <2 x i64> @llvm.mips.splati.d(<2 x i64>, i32)
1095 declare <2 x i64> @llvm.mips.srai.d(<2 x i64>, i32)
1096 declare <2 x i64> @llvm.mips.srari.d(<2 x i64>, i32)
1097 declare <2 x i64> @llvm.mips.srli.d(<2 x i64>, i32)
1098 declare <2 x i64> @llvm.mips.srlri.d(<2 x i64>, i32)
1099 declare <16 x i8> @llvm.mips.ldi.b(i32)
1100 declare <16 x i8> @llvm.mips.addvi.b(<16 x i8>, i32)
1101 declare <16 x i8> @llvm.mips.andi.b(<16 x i8>, i32)
1102 declare <16 x i8> @llvm.mips.bclri.b(<16 x i8>, i32)
1103 declare <16 x i8> @llvm.mips.binsli.b(<16 x i8>, <16 x i8>, i32)
1104 declare <16 x i8> @llvm.mips.binsri.b(<16 x i8>, <16 x i8>, i32)
1105 declare <16 x i8> @llvm.mips.bmnzi.b(<16 x i8>, <16 x i8>, i32)
1106 declare <16 x i8> @llvm.mips.bnegi.b(<16 x i8>, i32)
1107 declare <16 x i8> @llvm.mips.bseli.b(<16 x i8>, <16 x i8>, i32)
1108 declare <16 x i8> @llvm.mips.bseti.b(<16 x i8>, i32)
1109 declare <16 x i8> @llvm.mips.clei.s.b(<16 x i8>, i32)
1110 declare <16 x i8> @llvm.mips.clei.u.b(<16 x i8>, i32)
1111 declare <16 x i8> @llvm.mips.clti.s.b(<16 x i8>, i32)
1112 declare <16 x i8> @llvm.mips.clti.u.b(<16 x i8>, i32)
1113 declare <16 x i8> @llvm.mips.maxi.s.b(<16 x i8>, i32)
1114 declare <16 x i8> @llvm.mips.maxi.u.b(<16 x i8>, i32)
1115 declare <16 x i8> @llvm.mips.mini.s.b(<16 x i8>, i32)
1116 declare <16 x i8> @llvm.mips.mini.u.b(<16 x i8>, i32)
1117 declare <16 x i8> @llvm.mips.nori.b(<16 x i8>, i32)
1118 declare <16 x i8> @llvm.mips.ori.b(<16 x i8>, i32)
1119 declare <16 x i8> @llvm.mips.sldi.b(<16 x i8>, <16 x i8>, i32)
1120 declare <16 x i8> @llvm.mips.slli.b(<16 x i8>, i32)
1121 declare <16 x i8> @llvm.mips.splati.b(<16 x i8>, i32)
1122 declare <16 x i8> @llvm.mips.srai.b(<16 x i8>, i32)
1123 declare <16 x i8> @llvm.mips.srari.b(<16 x i8>, i32)
1124 declare <16 x i8> @llvm.mips.srli.b(<16 x i8>, i32)
1125 declare <16 x i8> @llvm.mips.srlri.b(<16 x i8>, i32)
1126 declare i32 @llvm.mips.copy.s.h(<8 x i16>, i32)
1127 declare i32 @llvm.mips.copy.u.h(<8 x i16>, i32)
1128 declare i32 @llvm.mips.copy.s.w(<4 x i32>, i32)
1129 declare i32 @llvm.mips.copy.u.w(<4 x i32>, i32)
1130 declare i64 @llvm.mips.copy.s.d(<2 x i64>, i32)
1131 declare i64 @llvm.mips.copy.u.d(<2 x i64>, i32)
1132 declare i32 @llvm.mips.copy.s.b(<16 x i8>, i32)
1133 declare i32 @llvm.mips.copy.u.b(<16 x i8>, i32)
1134 declare <16 x i8> @llvm.mips.bmzi.b(<16 x i8>, <16 x i8>, i32)
1135 declare <16 x i8> @llvm.mips.ld.b(i8*, i32)
1136 declare <8 x i16> @llvm.mips.ld.h(i8*, i32)
1137 declare <4 x i32> @llvm.mips.ld.w(i8*, i32)
1138 declare <2 x i64> @llvm.mips.ld.d(i8*, i32)
1139 declare void @llvm.mips.st.b(<16 x i8>, i8*, i32)
1140 declare void @llvm.mips.st.h(<8 x i16>, i8*, i32)
1141 declare void @llvm.mips.st.w(<4 x i32>, i8*, i32)
1142 declare void @llvm.mips.st.d(<2 x i64>, i8*, i32)