1 ; RUN: llc -march=mips -mattr=+msa,+fp64 -relocation-model=pic < %s | FileCheck %s -check-prefixes=CHECK,MSA32
2 ; RUN: llc -march=mips64 -mattr=+msa,+fp64 -relocation-model=pic -target-abi n32 < %s \
3 ; RUN: | FileCheck %s -check-prefixes=CHECK,MSA64,MSA64N32
4 ; RUN: llc -march=mips64 -mattr=+msa,+fp64 -relocation-model=pic -target-abi n64 < %s \
5 ; RUN: | FileCheck %s -check-prefixes=CHECK,MSA64,MSA64N64
7 ; Test that the immediate intrinsics don't crash LLVM.
9 ; Some of the intrinsics lower to equivalent forms.
11 define void @addvi_b(<16 x i8> * %ptr) {
13 ; CHECK-LABEL: addvi_b:
15 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
16 %r = call <16 x i8> @llvm.mips.addvi.b(<16 x i8> %a, i32 25)
17 store <16 x i8> %r, <16 x i8> * %ptr, align 16
21 define void @andi_b(<16 x i8> * %ptr) {
23 ; CHECK-LABEL: andi_b:
25 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
26 %r = call <16 x i8> @llvm.mips.andi.b(<16 x i8> %a, i32 25)
27 store <16 x i8> %r, <16 x i8> * %ptr, align 16
31 define void @bclri_b(<16 x i8> * %ptr) {
33 ; CHECK-LABEL: bclri_b:
35 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
36 %r = call <16 x i8> @llvm.mips.bclri.b(<16 x i8> %a, i32 3)
37 store <16 x i8> %r, <16 x i8> * %ptr, align 16
41 define void @binsli_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
43 ; CHECK-LABEL: binsli_b:
45 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
46 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
47 %r = call <16 x i8> @llvm.mips.binsli.b(<16 x i8> %a, <16 x i8> %b, i32 3)
48 store <16 x i8> %r, <16 x i8> * %ptr, align 16
52 define void @binsri_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
54 ; CHECK-LABEL: binsri_b:
56 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
57 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
58 %r = call <16 x i8> @llvm.mips.binsri.b(<16 x i8> %a, <16 x i8> %b, i32 5)
59 store <16 x i8> %r, <16 x i8> * %ptr, align 16
63 define void @bmnzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
65 ; CHECK-LABEL: bmnzi_b:
67 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
68 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
69 %r = call <16 x i8> @llvm.mips.bmnzi.b(<16 x i8> %a, <16 x i8> %b, i32 25)
70 store <16 x i8> %r, <16 x i8> * %ptr, align 16
74 define void @bmzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) {
76 ; CHECK-LABEL: bmzi_b:
78 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
79 %b = load <16 x i8>, <16 x i8> * %ptr2, align 16
80 %r = call <16 x i8> @llvm.mips.bmzi.b(<16 x i8> %a, <16 x i8> %b, i32 25)
81 store <16 x i8> %r, <16 x i8> * %ptr, align 16
85 define void @bnegi_b(<16 x i8> * %ptr) {
87 ; CHECK-LABEL: bnegi_b:
89 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
90 %r = call <16 x i8> @llvm.mips.bnegi.b(<16 x i8> %a, i32 6)
91 store <16 x i8> %r, <16 x i8> * %ptr, align 16
95 define void @bseli_b(<16 x i8> * %ptr) {
97 ; CHECK-LABEL: bseli_b:
99 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
100 %r = call <16 x i8> @llvm.mips.bseli.b(<16 x i8> %a, <16 x i8> %a, i32 25)
101 store <16 x i8> %r, <16 x i8> * %ptr, align 16
105 define void @bseti_b(<16 x i8> * %ptr) {
107 ; CHECK-LABEL: bseti_b:
109 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
110 %r = call <16 x i8> @llvm.mips.bseti.b(<16 x i8> %a, i32 5)
111 store <16 x i8> %r, <16 x i8> * %ptr, align 16
115 define void @clei_s_b(<16 x i8> * %ptr) {
117 ; CHECK-LABEL: clei_s_b:
119 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
120 %r = call <16 x i8> @llvm.mips.clei.s.b(<16 x i8> %a, i32 12)
121 store <16 x i8> %r, <16 x i8> * %ptr, align 16
125 define void @clei_u_b(<16 x i8> * %ptr) {
127 ; CHECK-LABEL: clei_u_b:
129 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
130 %r = call <16 x i8> @llvm.mips.clei.u.b(<16 x i8> %a, i32 25)
131 store <16 x i8> %r, <16 x i8> * %ptr, align 16
135 define void @clti_s_b(<16 x i8> * %ptr) {
137 ; CHECK-LABEL: clti_s_b:
139 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
140 %r = call <16 x i8> @llvm.mips.clti.s.b(<16 x i8> %a, i32 15)
141 store <16 x i8> %r, <16 x i8> * %ptr, align 16
145 define void @clti_u_b(<16 x i8> * %ptr) {
147 ; CHECK-LABEL: clti_u_b:
149 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
150 %r = call <16 x i8> @llvm.mips.clti.u.b(<16 x i8> %a, i32 25)
151 store <16 x i8> %r, <16 x i8> * %ptr, align 16
155 define void @ldi_b(<16 x i8> * %ptr) {
157 ; CHECK-LABEL: ldi_b:
159 %r = call <16 x i8> @llvm.mips.ldi.b(i32 3)
160 store <16 x i8> %r, <16 x i8> * %ptr, align 16
164 define void @maxi_s_b(<16 x i8> * %ptr) {
166 ; CHECK-LABEL: maxi_s_b:
168 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
169 %r = call <16 x i8> @llvm.mips.maxi.s.b(<16 x i8> %a, i32 2)
170 store <16 x i8> %r, <16 x i8> * %ptr, align 16
174 define void @maxi_u_b(<16 x i8> * %ptr) {
176 ; CHECK-LABEL: maxi_u_b:
178 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
179 %r = call <16 x i8> @llvm.mips.maxi.u.b(<16 x i8> %a, i32 2)
180 store <16 x i8> %r, <16 x i8> * %ptr, align 16
184 define void @mini_s_b(<16 x i8> * %ptr) {
186 ; CHECK-LABEL: mini_s_b:
188 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
189 %r = call <16 x i8> @llvm.mips.mini.s.b(<16 x i8> %a, i32 2)
190 store <16 x i8> %r, <16 x i8> * %ptr, align 16
194 define void @mini_u_b(<16 x i8> * %ptr) {
196 ; CHECK-LABEL: mini_u_b:
198 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
199 %r = call <16 x i8> @llvm.mips.mini.u.b(<16 x i8> %a, i32 2)
200 store <16 x i8> %r, <16 x i8> * %ptr, align 16
204 define void @nori_b(<16 x i8> * %ptr) {
206 ; CHECK-LABEL: nori_b:
208 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
209 %r = call <16 x i8> @llvm.mips.nori.b(<16 x i8> %a, i32 25)
210 store <16 x i8> %r, <16 x i8> * %ptr, align 16
214 define void @ori_b(<16 x i8> * %ptr) {
216 ; CHECK-LABEL: ori_b:
218 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
219 %r = call <16 x i8> @llvm.mips.ori.b(<16 x i8> %a, i32 25)
220 store <16 x i8> %r, <16 x i8> * %ptr, align 16
224 define void @sldi_b(<16 x i8> * %ptr) {
226 ; CHECK-LABEL: sldi_b:
228 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
229 %r = call <16 x i8> @llvm.mips.sldi.b(<16 x i8> %a, <16 x i8> %a, i32 7)
230 store <16 x i8> %r, <16 x i8> * %ptr, align 16
234 define void @slli_b(<16 x i8> * %ptr) {
236 ; CHECK-LABEL: slli_b:
238 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
239 %r = call <16 x i8> @llvm.mips.slli.b(<16 x i8> %a, i32 3)
240 store <16 x i8> %r, <16 x i8> * %ptr, align 16
244 define void @splati_b(<16 x i8> * %ptr) {
246 ; CHECK-LABEL: splati_b:
248 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
249 %r = call <16 x i8> @llvm.mips.splati.b(<16 x i8> %a, i32 3)
250 store <16 x i8> %r, <16 x i8> * %ptr, align 16
254 define void @srai_b(<16 x i8> * %ptr) {
256 ; CHECK-LABEL: srai_b:
258 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
259 %r = call <16 x i8> @llvm.mips.srai.b(<16 x i8> %a, i32 3)
260 store <16 x i8> %r, <16 x i8> * %ptr, align 16
264 define void @srari_b(<16 x i8> * %ptr) {
266 ; CHECK-LABEL: srari_b:
268 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
269 %r = call <16 x i8> @llvm.mips.srari.b(<16 x i8> %a, i32 3)
270 store <16 x i8> %r, <16 x i8> * %ptr, align 16
274 define void @srli_b(<16 x i8> * %ptr) {
276 ; CHECK-LABEL: srli_b:
278 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
279 %r = call <16 x i8> @llvm.mips.srli.b(<16 x i8> %a, i32 3)
280 store <16 x i8> %r, <16 x i8> * %ptr, align 16
284 define void @srlri_b(<16 x i8> * %ptr) {
286 ; CHECK-LABEL: srlri_b:
288 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
289 %r = call <16 x i8> @llvm.mips.srlri.b(<16 x i8> %a, i32 3)
290 store <16 x i8> %r, <16 x i8> * %ptr, align 16
294 define void @addvi_w(<4 x i32> * %ptr) {
296 ; CHECK-LABEL: addvi_w:
298 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
299 %r = call <4 x i32> @llvm.mips.addvi.w(<4 x i32> %a, i32 25)
300 store <4 x i32> %r, <4 x i32> * %ptr, align 16
304 define void @bclri_w(<4 x i32> * %ptr) {
306 ; CHECK-LABEL: bclri_w:
308 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
309 %r = call <4 x i32> @llvm.mips.bclri.w(<4 x i32> %a, i32 25)
310 store <4 x i32> %r, <4 x i32> * %ptr, align 16
314 define void @binsli_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) {
316 ; CHECK-LABEL: binsli_w:
318 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
319 %b = load <4 x i32>, <4 x i32> * %ptr2, align 16
320 %r = call <4 x i32> @llvm.mips.binsli.w(<4 x i32> %a, <4 x i32> %b, i32 25)
321 store <4 x i32> %r, <4 x i32> * %ptr, align 16
325 define void @binsri_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) {
327 ; CHECK-LABEL: binsri_w:
329 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
330 %b = load <4 x i32>, <4 x i32> * %ptr2, align 16
331 %r = call <4 x i32> @llvm.mips.binsri.w(<4 x i32> %a, <4 x i32> %b, i32 25)
332 store <4 x i32> %r, <4 x i32> * %ptr, align 16
336 define void @bnegi_w(<4 x i32> * %ptr) {
338 ; CHECK-LABEL: bnegi_w:
340 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
341 %r = call <4 x i32> @llvm.mips.bnegi.w(<4 x i32> %a, i32 25)
342 store <4 x i32> %r, <4 x i32> * %ptr, align 16
346 define void @bseti_w(<4 x i32> * %ptr) {
348 ; CHECK-LABEL: bseti_w:
350 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
351 %r = call <4 x i32> @llvm.mips.bseti.w(<4 x i32> %a, i32 25)
352 store <4 x i32> %r, <4 x i32> * %ptr, align 16
356 define void @clei_s_w(<4 x i32> * %ptr) {
358 ; CHECK-LABEL: clei_s_w:
360 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
361 %r = call <4 x i32> @llvm.mips.clei.s.w(<4 x i32> %a, i32 14)
362 store <4 x i32> %r, <4 x i32> * %ptr, align 16
366 define void @clei_u_w(<4 x i32> * %ptr) {
368 ; CHECK-LABEL: clei_u_w:
370 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
371 %r = call <4 x i32> @llvm.mips.clei.u.w(<4 x i32> %a, i32 25)
372 store <4 x i32> %r, <4 x i32> * %ptr, align 16
376 define void @clti_s_w(<4 x i32> * %ptr) {
378 ; CHECK-LABEL: clti_s_w:
380 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
381 %r = call <4 x i32> @llvm.mips.clti.s.w(<4 x i32> %a, i32 15)
382 store <4 x i32> %r, <4 x i32> * %ptr, align 16
386 define void @clti_u_w(<4 x i32> * %ptr) {
388 ; CHECK-LABEL: clti_u_w:
390 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
391 %r = call <4 x i32> @llvm.mips.clti.u.w(<4 x i32> %a, i32 25)
392 store <4 x i32> %r, <4 x i32> * %ptr, align 16
396 define void @maxi_s_w(<4 x i32> * %ptr) {
398 ; CHECK-LABEL: maxi_s_w:
400 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
401 %r = call <4 x i32> @llvm.mips.maxi.s.w(<4 x i32> %a, i32 2)
402 store <4 x i32> %r, <4 x i32> * %ptr, align 16
406 define void @maxi_u_w(<4 x i32> * %ptr) {
408 ; CHECK-LABEL: maxi_u_w:
410 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
411 %r = call <4 x i32> @llvm.mips.maxi.u.w(<4 x i32> %a, i32 2)
412 store <4 x i32> %r, <4 x i32> * %ptr, align 16
416 define void @mini_s_w(<4 x i32> * %ptr) {
418 ; CHECK-LABEL: mini_s_w:
420 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
421 %r = call <4 x i32> @llvm.mips.mini.s.w(<4 x i32> %a, i32 2)
422 store <4 x i32> %r, <4 x i32> * %ptr, align 16
426 define void @mini_u_w(<4 x i32> * %ptr) {
428 ; CHECK-LABEL: mini_u_w:
430 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
431 %r = call <4 x i32> @llvm.mips.mini.u.w(<4 x i32> %a, i32 2)
432 store <4 x i32> %r, <4 x i32> * %ptr, align 16
436 define void @ldi_w(<4 x i32> * %ptr) {
438 ; CHECK-LABEL: ldi_w:
440 %r = call <4 x i32> @llvm.mips.ldi.w(i32 3)
441 store <4 x i32> %r, <4 x i32> * %ptr, align 16
445 define void @sldi_w(<4 x i32> * %ptr) {
447 ; CHECK-LABEL: sldi_w:
449 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
450 %r = call <4 x i32> @llvm.mips.sldi.w(<4 x i32> %a, <4 x i32> %a, i32 2)
451 store <4 x i32> %r, <4 x i32> * %ptr, align 16
455 define void @slli_w(<4 x i32> * %ptr) {
457 ; CHECK-LABEL: slli_w:
459 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
460 %r = call <4 x i32> @llvm.mips.slli.w(<4 x i32> %a, i32 3)
461 store <4 x i32> %r, <4 x i32> * %ptr, align 16
465 define void @splati_w(<4 x i32> * %ptr) {
467 ; CHECK-LABEL: splati_w:
469 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
470 %r = call <4 x i32> @llvm.mips.splati.w(<4 x i32> %a, i32 3)
471 store <4 x i32> %r, <4 x i32> * %ptr, align 16
475 define void @srai_w(<4 x i32> * %ptr) {
477 ; CHECK-LABEL: srai_w:
479 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
480 %r = call <4 x i32> @llvm.mips.srai.w(<4 x i32> %a, i32 3)
481 store <4 x i32> %r, <4 x i32> * %ptr, align 16
485 define void @srari_w(<4 x i32> * %ptr) {
487 ; CHECK-LABEL: srari_w:
489 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
490 %r = call <4 x i32> @llvm.mips.srari.w(<4 x i32> %a, i32 3)
491 store <4 x i32> %r, <4 x i32> * %ptr, align 16
495 define void @srli_w(<4 x i32> * %ptr) {
497 ; CHECK-LABEL: srli_w:
499 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
500 %r = call <4 x i32> @llvm.mips.srli.w(<4 x i32> %a, i32 3)
501 store <4 x i32> %r, <4 x i32> * %ptr, align 16
505 define void @srlri_w(<4 x i32> * %ptr) {
507 ; CHECK-LABEL: srlri_w:
509 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
510 %r = call <4 x i32> @llvm.mips.srlri.w(<4 x i32> %a, i32 3)
511 store <4 x i32> %r, <4 x i32> * %ptr, align 16
515 define void @addvi_h(<8 x i16> * %ptr) {
517 ; CHECK-LABEL: addvi_h:
519 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
520 %r = call <8 x i16> @llvm.mips.addvi.h(<8 x i16> %a, i32 25)
521 store <8 x i16> %r, <8 x i16> * %ptr, align 16
525 define void @bclri_h(<8 x i16> * %ptr) {
527 ; CHECK-LABEL: bclri_h:
529 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
530 %r = call <8 x i16> @llvm.mips.bclri.h(<8 x i16> %a, i32 8)
531 store <8 x i16> %r, <8 x i16> * %ptr, align 16
535 define void @binsli_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) {
537 ; CHECK-LABEL: binsli_h:
539 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
540 %b = load <8 x i16>, <8 x i16> * %ptr2, align 16
541 %r = call <8 x i16> @llvm.mips.binsli.h(<8 x i16> %a, <8 x i16> %b, i32 8)
542 store <8 x i16> %r, <8 x i16> * %ptr, align 16
546 define void @binsri_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) {
548 ; CHECK-LABEL: binsri_h:
550 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
551 %b = load <8 x i16>, <8 x i16> * %ptr2, align 16
552 %r = call <8 x i16> @llvm.mips.binsri.h(<8 x i16> %a, <8 x i16> %b, i32 14)
553 store <8 x i16> %r, <8 x i16> * %ptr, align 16
557 define void @bnegi_h(<8 x i16> * %ptr) {
559 ; CHECK-LABEL: bnegi_h:
561 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
562 %r = call <8 x i16> @llvm.mips.bnegi.h(<8 x i16> %a, i32 14)
563 store <8 x i16> %r, <8 x i16> * %ptr, align 16
567 define void @bseti_h(<8 x i16> * %ptr) {
569 ; CHECK-LABEL: bseti_h:
571 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
572 %r = call <8 x i16> @llvm.mips.bseti.h(<8 x i16> %a, i32 15)
573 store <8 x i16> %r, <8 x i16> * %ptr, align 16
577 define void @clei_s_h(<8 x i16> * %ptr) {
579 ; CHECK-LABEL: clei_s_h:
581 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
582 %r = call <8 x i16> @llvm.mips.clei.s.h(<8 x i16> %a, i32 13)
583 store <8 x i16> %r, <8 x i16> * %ptr, align 16
587 define void @clei_u_h(<8 x i16> * %ptr) {
589 ; CHECK-LABEL: clei_u_h:
591 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
592 %r = call <8 x i16> @llvm.mips.clei.u.h(<8 x i16> %a, i32 25)
593 store <8 x i16> %r, <8 x i16> * %ptr, align 16
597 define void @clti_s_h(<8 x i16> * %ptr) {
599 ; CHECK-LABEL: clti_s_h:
601 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
602 %r = call <8 x i16> @llvm.mips.clti.s.h(<8 x i16> %a, i32 15)
603 store <8 x i16> %r, <8 x i16> * %ptr, align 16
607 define void @clti_u_h(<8 x i16> * %ptr) {
609 ; CHECK-LABEL: clti_u_h:
611 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
612 %r = call <8 x i16> @llvm.mips.clti.u.h(<8 x i16> %a, i32 25)
613 store <8 x i16> %r, <8 x i16> * %ptr, align 16
617 define void @maxi_s_h(<8 x i16> * %ptr) {
619 ; CHECK-LABEL: maxi_s_h:
621 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
622 %r = call <8 x i16> @llvm.mips.maxi.s.h(<8 x i16> %a, i32 2)
623 store <8 x i16> %r, <8 x i16> * %ptr, align 16
627 define void @maxi_u_h(<8 x i16> * %ptr) {
629 ; CHECK-LABEL: maxi_u_h:
631 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
632 %r = call <8 x i16> @llvm.mips.maxi.u.h(<8 x i16> %a, i32 2)
633 store <8 x i16> %r, <8 x i16> * %ptr, align 16
637 define void @mini_s_h(<8 x i16> * %ptr) {
639 ; CHECK-LABEL: mini_s_h:
641 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
642 %r = call <8 x i16> @llvm.mips.mini.s.h(<8 x i16> %a, i32 2)
643 store <8 x i16> %r, <8 x i16> * %ptr, align 16
647 define void @mini_u_h(<8 x i16> * %ptr) {
649 ; CHECK-LABEL: mini_u_h:
651 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
652 %r = call <8 x i16> @llvm.mips.mini.u.h(<8 x i16> %a, i32 2)
653 store <8 x i16> %r, <8 x i16> * %ptr, align 16
657 define void @ldi_h(<8 x i16> * %ptr) {
659 ; CHECK-LABEL: ldi_h:
661 %r = call <8 x i16> @llvm.mips.ldi.h(i32 3)
662 store <8 x i16> %r, <8 x i16> * %ptr, align 16
666 define void @sldi_h(<8 x i16> * %ptr) {
668 ; CHECK-LABEL: sldi_h:
670 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
671 %r = call <8 x i16> @llvm.mips.sldi.h(<8 x i16> %a, <8 x i16> %a, i32 3)
672 store <8 x i16> %r, <8 x i16> * %ptr, align 16
676 define void @slli_h(<8 x i16> * %ptr) {
678 ; CHECK-LABEL: slli_h:
680 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
681 %r = call <8 x i16> @llvm.mips.slli.h(<8 x i16> %a, i32 3)
682 store <8 x i16> %r, <8 x i16> * %ptr, align 16
686 define void @splati_h(<8 x i16> * %ptr) {
688 ; CHECK-LABEL: splati_h:
690 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
691 %r = call <8 x i16> @llvm.mips.splati.h(<8 x i16> %a, i32 3)
692 store <8 x i16> %r, <8 x i16> * %ptr, align 16
696 define void @srai_h(<8 x i16> * %ptr) {
698 ; CHECK-LABEL: srai_h:
700 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
701 %r = call <8 x i16> @llvm.mips.srai.h(<8 x i16> %a, i32 3)
702 store <8 x i16> %r, <8 x i16> * %ptr, align 16
706 define void @srari_h(<8 x i16> * %ptr) {
708 ; CHECK-LABEL: srari_h:
710 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
711 %r = call <8 x i16> @llvm.mips.srari.h(<8 x i16> %a, i32 3)
712 store <8 x i16> %r, <8 x i16> * %ptr, align 16
716 define void @srli_h(<8 x i16> * %ptr) {
718 ; CHECK-LABEL: srli_h:
720 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
721 %r = call <8 x i16> @llvm.mips.srli.h(<8 x i16> %a, i32 3)
722 store <8 x i16> %r, <8 x i16> * %ptr, align 16
726 define void @srlri_h(<8 x i16> * %ptr) {
728 ; CHECK-LABEL: srlri_h:
730 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
731 %r = call <8 x i16> @llvm.mips.srlri.h(<8 x i16> %a, i32 3)
732 store <8 x i16> %r, <8 x i16> * %ptr, align 16
736 define i32 @copy_s_b(<16 x i8> * %ptr) {
738 ; CHECK-LABEL: copy_s_b:
740 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
741 %r = call i32 @llvm.mips.copy.s.b(<16 x i8> %a, i32 1)
744 define i32 @copy_s_h(<8 x i16> * %ptr) {
746 ; CHECK-LABEL: copy_s_h:
748 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
749 %r = call i32 @llvm.mips.copy.s.h(<8 x i16> %a, i32 1)
752 define i32 @copy_s_w(<4 x i32> * %ptr) {
754 ; CHECK-LABEL: copy_s_w:
756 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
757 %r = call i32 @llvm.mips.copy.s.w(<4 x i32> %a, i32 1)
760 define i32 @copy_u_b(<16 x i8> * %ptr) {
762 ; CHECK-LABEL: copy_u_b:
764 %a = load <16 x i8>, <16 x i8> * %ptr, align 16
765 %r = call i32 @llvm.mips.copy.u.b(<16 x i8> %a, i32 1)
768 define i32 @copy_u_h(<8 x i16> * %ptr) {
770 ; CHECK-LABEL: copy_u_h:
772 %a = load <8 x i16>, <8 x i16> * %ptr, align 16
773 %r = call i32 @llvm.mips.copy.u.h(<8 x i16> %a, i32 1)
776 define i32 @copy_u_w(<4 x i32> * %ptr) {
778 ; CHECK-LABEL: copy_u_w:
781 %a = load <4 x i32>, <4 x i32> * %ptr, align 16
782 %r = call i32 @llvm.mips.copy.u.w(<4 x i32> %a, i32 1)
786 define i64 @copy_s_d(<2 x i64> * %ptr) {
788 ; CHECK-LABEL: copy_s_d:
792 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
793 %r = call i64 @llvm.mips.copy.s.d(<2 x i64> %a, i32 1)
797 define i64 @copy_u_d(<2 x i64> * %ptr) {
799 ; CHECK-LABEL: copy_u_d:
803 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
804 %r = call i64 @llvm.mips.copy.u.d(<2 x i64> %a, i32 1)
808 define void @addvi_d(<2 x i64> * %ptr) {
810 ; CHECK-LABEL: addvi_d:
812 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
813 %r = call <2 x i64> @llvm.mips.addvi.d(<2 x i64> %a, i32 25)
814 store <2 x i64> %r, <2 x i64> * %ptr, align 16
818 define void @bclri_d(<2 x i64> * %ptr) {
820 ; CHECK-LABEL: bclri_d:
822 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
823 %r = call <2 x i64> @llvm.mips.bclri.d(<2 x i64> %a, i32 16)
824 store <2 x i64> %r, <2 x i64> * %ptr, align 16
828 define void @binsli_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) {
830 ; CHECK-LABEL: binsli_d:
832 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
833 %b = load <2 x i64>, <2 x i64> * %ptr2, align 16
834 %r = call <2 x i64> @llvm.mips.binsli.d(<2 x i64> %a, <2 x i64> %b, i32 4)
835 store <2 x i64> %r, <2 x i64> * %ptr, align 16
839 define void @binsri_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) {
841 ; CHECK-LABEL: binsri_d:
843 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
844 %b = load <2 x i64>, <2 x i64> * %ptr2, align 16
845 %r = call <2 x i64> @llvm.mips.binsri.d(<2 x i64> %a, <2 x i64> %b, i32 5)
846 store <2 x i64> %r, <2 x i64> * %ptr, align 16
850 define void @bnegi_d(<2 x i64> * %ptr) {
852 ; CHECK-LABEL: bnegi_d:
854 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
855 %r = call <2 x i64> @llvm.mips.bnegi.d(<2 x i64> %a, i32 9)
856 store <2 x i64> %r, <2 x i64> * %ptr, align 16
860 define void @bseti_d(<2 x i64> * %ptr) {
862 ; CHECK-LABEL: bseti_d:
864 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
865 %r = call <2 x i64> @llvm.mips.bseti.d(<2 x i64> %a, i32 25)
866 store <2 x i64> %r, <2 x i64> * %ptr, align 16
870 define void @clei_s_d(<2 x i64> * %ptr) {
872 ; CHECK-LABEL: clei_s_d:
874 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
875 %r = call <2 x i64> @llvm.mips.clei.s.d(<2 x i64> %a, i32 15)
876 store <2 x i64> %r, <2 x i64> * %ptr, align 16
880 define void @clei_u_d(<2 x i64> * %ptr) {
882 ; CHECK-LABEL: clei_u_d:
884 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
885 %r = call <2 x i64> @llvm.mips.clei.u.d(<2 x i64> %a, i32 25)
886 store <2 x i64> %r, <2 x i64> * %ptr, align 16
890 define void @clti_s_d(<2 x i64> * %ptr) {
892 ; CHECK-LABEL: clti_s_d:
894 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
895 %r = call <2 x i64> @llvm.mips.clti.s.d(<2 x i64> %a, i32 15)
896 store <2 x i64> %r, <2 x i64> * %ptr, align 16
900 define void @clti_u_d(<2 x i64> * %ptr) {
902 ; CHECK-LABEL: clti_u_d:
904 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
905 %r = call <2 x i64> @llvm.mips.clti.u.d(<2 x i64> %a, i32 25)
906 store <2 x i64> %r, <2 x i64> * %ptr, align 16
910 define void @ldi_d(<2 x i64> * %ptr) {
912 ; CHECK-LABEL: ldi_d:
914 %r = call <2 x i64> @llvm.mips.ldi.d(i32 3)
915 store <2 x i64> %r, <2 x i64> * %ptr, align 16
919 define void @maxi_s_d(<2 x i64> * %ptr) {
921 ; CHECK-LABEL: maxi_s_d:
923 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
924 %r = call <2 x i64> @llvm.mips.maxi.s.d(<2 x i64> %a, i32 2)
925 store <2 x i64> %r, <2 x i64> * %ptr, align 16
929 define void @maxi_u_d(<2 x i64> * %ptr) {
931 ; CHECK-LABEL: maxi_u_d:
933 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
934 %r = call <2 x i64> @llvm.mips.maxi.u.d(<2 x i64> %a, i32 2)
935 store <2 x i64> %r, <2 x i64> * %ptr, align 16
939 define void @mini_s_d(<2 x i64> * %ptr) {
941 ; CHECK-LABEL: mini_s_d:
943 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
944 %r = call <2 x i64> @llvm.mips.mini.s.d(<2 x i64> %a, i32 2)
945 store <2 x i64> %r, <2 x i64> * %ptr, align 16
949 define void @mini_u_d(<2 x i64> * %ptr) {
951 ; CHECK-LABEL: mini_u_d:
953 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
954 %r = call <2 x i64> @llvm.mips.mini.u.d(<2 x i64> %a, i32 2)
955 store <2 x i64> %r, <2 x i64> * %ptr, align 16
959 define void @sldi_d(<2 x i64> * %ptr) {
961 ; CHECK-LABEL: sldi_d:
963 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
964 %r = call <2 x i64> @llvm.mips.sldi.d(<2 x i64> %a, <2 x i64> %a, i32 1)
965 store <2 x i64> %r, <2 x i64> * %ptr, align 16
969 define void @slli_d(<2 x i64> * %ptr) {
971 ; CHECK-LABEL: slli_d:
973 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
974 %r = call <2 x i64> @llvm.mips.slli.d(<2 x i64> %a, i32 3)
975 store <2 x i64> %r, <2 x i64> * %ptr, align 16
979 define void @srai_d(<2 x i64> * %ptr) {
981 ; CHECK-LABEL: srai_d:
983 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
984 %r = call <2 x i64> @llvm.mips.srai.d(<2 x i64> %a, i32 3)
985 store <2 x i64> %r, <2 x i64> * %ptr, align 16
989 define void @srari_d(<2 x i64> * %ptr) {
991 ; CHECK-LABEL: srari_d:
993 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
994 %r = call <2 x i64> @llvm.mips.srari.d(<2 x i64> %a, i32 3)
995 store <2 x i64> %r, <2 x i64> * %ptr, align 16
999 define void @srli_d(<2 x i64> * %ptr) {
1001 ; CHECK-LABEL: srli_d:
1003 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
1004 %r = call <2 x i64> @llvm.mips.srli.d(<2 x i64> %a, i32 3)
1005 store <2 x i64> %r, <2 x i64> * %ptr, align 16
1009 define void @srlri_d(<2 x i64> * %ptr) {
1011 ; CHECK-LABEL: srlri_d:
1013 %a = load <2 x i64>, <2 x i64> * %ptr, align 16
1014 %r = call <2 x i64> @llvm.mips.srlri.d(<2 x i64> %a, i32 3)
1015 store <2 x i64> %r, <2 x i64> * %ptr, align 16
1019 define void @ld_d2(<2 x i64> * %ptr, i8 * %ldptr) {
1021 ; CHECK-LABEL: ld_d2
1022 ; MSA32: addiu $[[R0:[0-9]]], $5, 4096
1023 ; MSA64N32: sll $[[R1:[0-9]]], $5, 0
1024 ; MSA64N32: addiu $[[R0:[0-9]]], $[[R1]], 4096
1025 ; MSA64N64: daddiu $[[R0:[0-9]]], $5, 4096
1026 ; CHECK: ld.d $w{{[0-9]+}}, 0($[[R0]])
1027 %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 4096)
1028 store <2 x i64> %a, <2 x i64> * %ptr, align 16
1032 declare <8 x i16> @llvm.mips.ldi.h(i32)
1033 declare <8 x i16> @llvm.mips.addvi.h(<8 x i16>, i32)
1034 declare <8 x i16> @llvm.mips.bclri.h(<8 x i16>, i32)
1035 declare <8 x i16> @llvm.mips.binsli.h(<8 x i16>, <8 x i16>, i32)
1036 declare <8 x i16> @llvm.mips.binsri.h(<8 x i16>, <8 x i16>, i32)
1037 declare <8 x i16> @llvm.mips.bnegi.h(<8 x i16>, i32)
1038 declare <8 x i16> @llvm.mips.bseti.h(<8 x i16>, i32)
1039 declare <8 x i16> @llvm.mips.clei.s.h(<8 x i16>, i32)
1040 declare <8 x i16> @llvm.mips.clei.u.h(<8 x i16>, i32)
1041 declare <8 x i16> @llvm.mips.clti.s.h(<8 x i16>, i32)
1042 declare <8 x i16> @llvm.mips.clti.u.h(<8 x i16>, i32)
1043 declare <8 x i16> @llvm.mips.maxi.s.h(<8 x i16>, i32)
1044 declare <8 x i16> @llvm.mips.maxi.u.h(<8 x i16>, i32)
1045 declare <8 x i16> @llvm.mips.mini.s.h(<8 x i16>, i32)
1046 declare <8 x i16> @llvm.mips.mini.u.h(<8 x i16>, i32)
1047 declare <8 x i16> @llvm.mips.sldi.h(<8 x i16>, <8 x i16>, i32)
1048 declare <8 x i16> @llvm.mips.slli.h(<8 x i16>, i32)
1049 declare <8 x i16> @llvm.mips.splati.h(<8 x i16>, i32)
1050 declare <8 x i16> @llvm.mips.srai.h(<8 x i16>, i32)
1051 declare <8 x i16> @llvm.mips.srari.h(<8 x i16>, i32)
1052 declare <8 x i16> @llvm.mips.srli.h(<8 x i16>, i32)
1053 declare <8 x i16> @llvm.mips.srlri.h(<8 x i16>, i32)
1054 declare <4 x i32> @llvm.mips.addvi.w(<4 x i32>, i32)
1055 declare <4 x i32> @llvm.mips.bclri.w(<4 x i32>, i32)
1056 declare <4 x i32> @llvm.mips.binsli.w(<4 x i32>, <4 x i32>, i32)
1057 declare <4 x i32> @llvm.mips.binsri.w(<4 x i32>, <4 x i32>, i32)
1058 declare <4 x i32> @llvm.mips.bnegi.w(<4 x i32>, i32)
1059 declare <4 x i32> @llvm.mips.bseti.w(<4 x i32>, i32)
1060 declare <4 x i32> @llvm.mips.ldi.w(i32)
1061 declare <4 x i32> @llvm.mips.clei.s.w(<4 x i32>, i32)
1062 declare <4 x i32> @llvm.mips.clei.u.w(<4 x i32>, i32)
1063 declare <4 x i32> @llvm.mips.clti.s.w(<4 x i32>, i32)
1064 declare <4 x i32> @llvm.mips.clti.u.w(<4 x i32>, i32)
1065 declare <4 x i32> @llvm.mips.maxi.s.w(<4 x i32>, i32)
1066 declare <4 x i32> @llvm.mips.maxi.u.w(<4 x i32>, i32)
1067 declare <4 x i32> @llvm.mips.mini.s.w(<4 x i32>, i32)
1068 declare <4 x i32> @llvm.mips.mini.u.w(<4 x i32>, i32)
1069 declare <4 x i32> @llvm.mips.sldi.w(<4 x i32>, <4 x i32>, i32)
1070 declare <4 x i32> @llvm.mips.slli.w(<4 x i32>, i32)
1071 declare <4 x i32> @llvm.mips.splati.w(<4 x i32>, i32)
1072 declare <4 x i32> @llvm.mips.srai.w(<4 x i32>, i32)
1073 declare <4 x i32> @llvm.mips.srari.w(<4 x i32>, i32)
1074 declare <4 x i32> @llvm.mips.srli.w(<4 x i32>, i32)
1075 declare <4 x i32> @llvm.mips.srlri.w(<4 x i32>, i32)
1076 declare <2 x i64> @llvm.mips.ldi.d(i32)
1077 declare <2 x i64> @llvm.mips.addvi.d(<2 x i64>, i32)
1078 declare <2 x i64> @llvm.mips.bclri.d(<2 x i64>, i32)
1079 declare <2 x i64> @llvm.mips.binsli.d(<2 x i64>, <2 x i64>, i32)
1080 declare <2 x i64> @llvm.mips.binsri.d(<2 x i64>, <2 x i64>, i32)
1081 declare <2 x i64> @llvm.mips.bnegi.d(<2 x i64>, i32)
1082 declare <2 x i64> @llvm.mips.bseti.d(<2 x i64>, i32)
1083 declare <2 x i64> @llvm.mips.clei.s.d(<2 x i64>, i32)
1084 declare <2 x i64> @llvm.mips.clei.u.d(<2 x i64>, i32)
1085 declare <2 x i64> @llvm.mips.clti.s.d(<2 x i64>, i32)
1086 declare <2 x i64> @llvm.mips.clti.u.d(<2 x i64>, i32)
1087 declare <2 x i64> @llvm.mips.maxi.s.d(<2 x i64>, i32)
1088 declare <2 x i64> @llvm.mips.maxi.u.d(<2 x i64>, i32)
1089 declare <2 x i64> @llvm.mips.mini.s.d(<2 x i64>, i32)
1090 declare <2 x i64> @llvm.mips.mini.u.d(<2 x i64>, i32)
1091 declare <2 x i64> @llvm.mips.sldi.d(<2 x i64>, <2 x i64>, i32)
1092 declare <2 x i64> @llvm.mips.slli.d(<2 x i64>, i32)
1093 declare <2 x i64> @llvm.mips.splati.d(<2 x i64>, i32)
1094 declare <2 x i64> @llvm.mips.srai.d(<2 x i64>, i32)
1095 declare <2 x i64> @llvm.mips.srari.d(<2 x i64>, i32)
1096 declare <2 x i64> @llvm.mips.srli.d(<2 x i64>, i32)
1097 declare <2 x i64> @llvm.mips.srlri.d(<2 x i64>, i32)
1098 declare <16 x i8> @llvm.mips.ldi.b(i32)
1099 declare <16 x i8> @llvm.mips.addvi.b(<16 x i8>, i32)
1100 declare <16 x i8> @llvm.mips.andi.b(<16 x i8>, i32)
1101 declare <16 x i8> @llvm.mips.bclri.b(<16 x i8>, i32)
1102 declare <16 x i8> @llvm.mips.binsli.b(<16 x i8>, <16 x i8>, i32)
1103 declare <16 x i8> @llvm.mips.binsri.b(<16 x i8>, <16 x i8>, i32)
1104 declare <16 x i8> @llvm.mips.bmnzi.b(<16 x i8>, <16 x i8>, i32)
1105 declare <16 x i8> @llvm.mips.bnegi.b(<16 x i8>, i32)
1106 declare <16 x i8> @llvm.mips.bseli.b(<16 x i8>, <16 x i8>, i32)
1107 declare <16 x i8> @llvm.mips.bseti.b(<16 x i8>, i32)
1108 declare <16 x i8> @llvm.mips.clei.s.b(<16 x i8>, i32)
1109 declare <16 x i8> @llvm.mips.clei.u.b(<16 x i8>, i32)
1110 declare <16 x i8> @llvm.mips.clti.s.b(<16 x i8>, i32)
1111 declare <16 x i8> @llvm.mips.clti.u.b(<16 x i8>, i32)
1112 declare <16 x i8> @llvm.mips.maxi.s.b(<16 x i8>, i32)
1113 declare <16 x i8> @llvm.mips.maxi.u.b(<16 x i8>, i32)
1114 declare <16 x i8> @llvm.mips.mini.s.b(<16 x i8>, i32)
1115 declare <16 x i8> @llvm.mips.mini.u.b(<16 x i8>, i32)
1116 declare <16 x i8> @llvm.mips.nori.b(<16 x i8>, i32)
1117 declare <16 x i8> @llvm.mips.ori.b(<16 x i8>, i32)
1118 declare <16 x i8> @llvm.mips.sldi.b(<16 x i8>, <16 x i8>, i32)
1119 declare <16 x i8> @llvm.mips.slli.b(<16 x i8>, i32)
1120 declare <16 x i8> @llvm.mips.splati.b(<16 x i8>, i32)
1121 declare <16 x i8> @llvm.mips.srai.b(<16 x i8>, i32)
1122 declare <16 x i8> @llvm.mips.srari.b(<16 x i8>, i32)
1123 declare <16 x i8> @llvm.mips.srli.b(<16 x i8>, i32)
1124 declare <16 x i8> @llvm.mips.srlri.b(<16 x i8>, i32)
1125 declare i32 @llvm.mips.copy.s.h(<8 x i16>, i32)
1126 declare i32 @llvm.mips.copy.u.h(<8 x i16>, i32)
1127 declare i32 @llvm.mips.copy.s.w(<4 x i32>, i32)
1128 declare i32 @llvm.mips.copy.u.w(<4 x i32>, i32)
1129 declare i64 @llvm.mips.copy.s.d(<2 x i64>, i32)
1130 declare i64 @llvm.mips.copy.u.d(<2 x i64>, i32)
1131 declare i32 @llvm.mips.copy.s.b(<16 x i8>, i32)
1132 declare i32 @llvm.mips.copy.u.b(<16 x i8>, i32)
1133 declare <16 x i8> @llvm.mips.bmzi.b(<16 x i8>, <16 x i8>, i32)
1134 declare <16 x i8> @llvm.mips.ld.b(i8*, i32)
1135 declare <8 x i16> @llvm.mips.ld.h(i8*, i32)
1136 declare <4 x i32> @llvm.mips.ld.w(i8*, i32)
1137 declare <2 x i64> @llvm.mips.ld.d(i8*, i32)
1138 declare void @llvm.mips.st.b(<16 x i8>, i8*, i32)
1139 declare void @llvm.mips.st.h(<8 x i16>, i8*, i32)
1140 declare void @llvm.mips.st.w(<4 x i32>, i8*, i32)
1141 declare void @llvm.mips.st.d(<2 x i64>, i8*, i32)