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 6 7; Test that the immediate intrinsics don't crash LLVM. 8 9; Some of the intrinsics lower to equivalent forms. 10 11define void @addvi_b(<16 x i8> * %ptr) { 12entry: 13; CHECK-LABEL: addvi_b: 14; CHECK: 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 18 ret void 19} 20 21define void @andi_b(<16 x i8> * %ptr) { 22entry: 23; CHECK-LABEL: andi_b: 24; CHECK: 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 28 ret void 29} 30 31define void @bclri_b(<16 x i8> * %ptr) { 32entry: 33; CHECK-LABEL: bclri_b: 34; CHECK: andi.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 38 ret void 39} 40 41define void @binsli_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 42entry: 43; CHECK-LABEL: binsli_b: 44; CHECK: 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 49 ret void 50} 51 52define void @binsri_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 53entry: 54; CHECK-LABEL: binsri_b: 55; CHECK: 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 60 ret void 61} 62 63define void @bmnzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 64entry: 65; CHECK-LABEL: bmnzi_b: 66; CHECK: 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 71 ret void 72} 73 74define void @bmzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 75entry: 76; CHECK-LABEL: bmzi_b: 77; CHECK: bmnzi.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 82 ret void 83} 84 85define void @bnegi_b(<16 x i8> * %ptr) { 86entry: 87; CHECK-LABEL: bnegi_b: 88; CHECK: 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 92 ret void 93} 94 95define void @bseli_b(<16 x i8> * %ptr) { 96entry: 97; CHECK-LABEL: bseli_b: 98; CHECK: 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 102 ret void 103} 104 105define void @bseti_b(<16 x i8> * %ptr) { 106entry: 107; CHECK-LABEL: bseti_b: 108; CHECK: 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 112 ret void 113} 114 115define void @clei_s_b(<16 x i8> * %ptr) { 116entry: 117; CHECK-LABEL: clei_s_b: 118; CHECK: 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 122 ret void 123} 124 125define void @clei_u_b(<16 x i8> * %ptr) { 126entry: 127; CHECK-LABEL: clei_u_b: 128; CHECK: 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 132 ret void 133} 134 135define void @clti_s_b(<16 x i8> * %ptr) { 136entry: 137; CHECK-LABEL: clti_s_b: 138; CHECK: 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 142 ret void 143} 144 145define void @clti_u_b(<16 x i8> * %ptr) { 146entry: 147; CHECK-LABEL: clti_u_b: 148; CHECK: 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 152 ret void 153} 154 155define void @ldi_b(<16 x i8> * %ptr) { 156entry: 157; CHECK-LABEL: ldi_b: 158; CHECK: 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 161 ret void 162} 163 164define void @maxi_s_b(<16 x i8> * %ptr) { 165entry: 166; CHECK-LABEL: maxi_s_b: 167; CHECK: 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 171 ret void 172} 173 174define void @maxi_u_b(<16 x i8> * %ptr) { 175entry: 176; CHECK-LABEL: maxi_u_b: 177; CHECK: 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 181 ret void 182} 183 184define void @mini_s_b(<16 x i8> * %ptr) { 185entry: 186; CHECK-LABEL: mini_s_b: 187; CHECK: 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 191 ret void 192} 193 194define void @mini_u_b(<16 x i8> * %ptr) { 195entry: 196; CHECK-LABEL: mini_u_b: 197; CHECK: 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 201 ret void 202} 203 204define void @nori_b(<16 x i8> * %ptr) { 205entry: 206; CHECK-LABEL: nori_b: 207; CHECK: 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 211 ret void 212} 213 214define void @ori_b(<16 x i8> * %ptr) { 215entry: 216; CHECK-LABEL: ori_b: 217; CHECK: 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 221 ret void 222} 223 224define void @sldi_b(<16 x i8> * %ptr) { 225entry: 226; CHECK-LABEL: sldi_b: 227; CHECK: 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 231 ret void 232} 233 234define void @slli_b(<16 x i8> * %ptr) { 235entry: 236; CHECK-LABEL: slli_b: 237; CHECK: 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 241 ret void 242} 243 244define void @splati_b(<16 x i8> * %ptr) { 245entry: 246; CHECK-LABEL: splati_b: 247; CHECK: 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 251 ret void 252} 253 254define void @srai_b(<16 x i8> * %ptr) { 255entry: 256; CHECK-LABEL: srai_b: 257; CHECK: 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 261 ret void 262} 263 264define void @srari_b(<16 x i8> * %ptr) { 265entry: 266; CHECK-LABEL: srari_b: 267; CHECK: 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 271 ret void 272} 273 274define void @srli_b(<16 x i8> * %ptr) { 275entry: 276; CHECK-LABEL: srli_b: 277; CHECK: 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 281 ret void 282} 283 284define void @srlri_b(<16 x i8> * %ptr) { 285entry: 286; CHECK-LABEL: srlri_b: 287; CHECK: 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 291 ret void 292} 293 294define void @ld_b(<16 x i8> * %ptr, i8 * %ldptr, i32 %offset) { 295entry: 296; CHECK-LABEL: ld_b 297; MSA32: addu $[[R0:[0-9]]], $5, $6 298 299; MSA64N32-DAG: sll $[[R2:[0-9]]], $6, 0 300; MSA64N32-DAG: sll $[[R1:[0-9]]], $5, 0 301; MSA64N32: addu $[[R0:[0-9]]], $[[R1]], $[[R2]] 302 303; MSA64N64: sll $[[R1:[0-9]]], $6, 0 304; MSA64N64: daddu $[[R0:[0-9]]], $5, $[[R1]] 305 306; CHECK: ld.b $w{{[0-9]+}}, 0($[[R0]]) 307 %a = call <16 x i8> @llvm.mips.ld.b(i8* %ldptr, i32 %offset) 308 store <16 x i8> %a, <16 x i8> * %ptr, align 16 309 ret void 310} 311 312define void @st_b(<16 x i8> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 313entry: 314; CHECK-LABEL: st_b 315; MSA32: addu $[[R0:[0-9]]], $7, $6 316 317; MSA64N32: sll $[[R1:[0-9]]], $6, 0 318; MSA64N32: sll $[[R2:[0-9]]], $7, 0 319; MSA64N32: addu $[[R0:[0-9]]], $[[R2]], $[[R1]] 320 321; MSA64N64: sll $[[R1:[0-9]]], $6, 0 322; MSA64N64: daddu $[[R0:[0-9]]], $7, $[[R1]] 323; CHECK: st.b $w{{[0-9]+}}, 0($[[R0]]) 324 %a = call <16 x i8> @llvm.mips.ld.b(i8* %ldptr, i32 0) 325 call void @llvm.mips.st.b(<16 x i8> %a, i8* %stptr, i32 %offset) 326 ret void 327} 328 329define void @addvi_w(<4 x i32> * %ptr) { 330entry: 331; CHECK-LABEL: addvi_w: 332; CHECK: addvi.w 333 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 334 %r = call <4 x i32> @llvm.mips.addvi.w(<4 x i32> %a, i32 25) 335 store <4 x i32> %r, <4 x i32> * %ptr, align 16 336 ret void 337} 338 339define void @bclri_w(<4 x i32> * %ptr) { 340entry: 341; CHECK-LABEL: bclri_w: 342; CHECK: bclri.w 343 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 344 %r = call <4 x i32> @llvm.mips.bclri.w(<4 x i32> %a, i32 25) 345 store <4 x i32> %r, <4 x i32> * %ptr, align 16 346 ret void 347} 348 349define void @binsli_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) { 350entry: 351; CHECK-LABEL: binsli_w: 352; CHECK: binsli.w 353 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 354 %b = load <4 x i32>, <4 x i32> * %ptr2, align 16 355 %r = call <4 x i32> @llvm.mips.binsli.w(<4 x i32> %a, <4 x i32> %b, i32 25) 356 store <4 x i32> %r, <4 x i32> * %ptr, align 16 357 ret void 358} 359 360define void @binsri_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) { 361entry: 362; CHECK-LABEL: binsri_w: 363; CHECK: binsri.w 364 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 365 %b = load <4 x i32>, <4 x i32> * %ptr2, align 16 366 %r = call <4 x i32> @llvm.mips.binsri.w(<4 x i32> %a, <4 x i32> %b, i32 25) 367 store <4 x i32> %r, <4 x i32> * %ptr, align 16 368 ret void 369} 370 371define void @bnegi_w(<4 x i32> * %ptr) { 372entry: 373; CHECK-LABEL: bnegi_w: 374; CHECK: bnegi.w 375 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 376 %r = call <4 x i32> @llvm.mips.bnegi.w(<4 x i32> %a, i32 25) 377 store <4 x i32> %r, <4 x i32> * %ptr, align 16 378 ret void 379} 380 381define void @bseti_w(<4 x i32> * %ptr) { 382entry: 383; CHECK-LABEL: bseti_w: 384; CHECK: bseti.w 385 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 386 %r = call <4 x i32> @llvm.mips.bseti.w(<4 x i32> %a, i32 25) 387 store <4 x i32> %r, <4 x i32> * %ptr, align 16 388 ret void 389} 390 391define void @clei_s_w(<4 x i32> * %ptr) { 392entry: 393; CHECK-LABEL: clei_s_w: 394; CHECK: clei_s.w 395 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 396 %r = call <4 x i32> @llvm.mips.clei.s.w(<4 x i32> %a, i32 14) 397 store <4 x i32> %r, <4 x i32> * %ptr, align 16 398 ret void 399} 400 401define void @clei_u_w(<4 x i32> * %ptr) { 402entry: 403; CHECK-LABEL: clei_u_w: 404; CHECK: clei_u.w 405 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 406 %r = call <4 x i32> @llvm.mips.clei.u.w(<4 x i32> %a, i32 25) 407 store <4 x i32> %r, <4 x i32> * %ptr, align 16 408 ret void 409} 410 411define void @clti_s_w(<4 x i32> * %ptr) { 412entry: 413; CHECK-LABEL: clti_s_w: 414; CHECK: clti_s.w 415 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 416 %r = call <4 x i32> @llvm.mips.clti.s.w(<4 x i32> %a, i32 15) 417 store <4 x i32> %r, <4 x i32> * %ptr, align 16 418 ret void 419} 420 421define void @clti_u_w(<4 x i32> * %ptr) { 422entry: 423; CHECK-LABEL: clti_u_w: 424; CHECK: clti_u.w 425 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 426 %r = call <4 x i32> @llvm.mips.clti.u.w(<4 x i32> %a, i32 25) 427 store <4 x i32> %r, <4 x i32> * %ptr, align 16 428 ret void 429} 430 431define void @maxi_s_w(<4 x i32> * %ptr) { 432entry: 433; CHECK-LABEL: maxi_s_w: 434; CHECK: maxi_s.w 435 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 436 %r = call <4 x i32> @llvm.mips.maxi.s.w(<4 x i32> %a, i32 2) 437 store <4 x i32> %r, <4 x i32> * %ptr, align 16 438 ret void 439} 440 441define void @maxi_u_w(<4 x i32> * %ptr) { 442entry: 443; CHECK-LABEL: maxi_u_w: 444; CHECK: maxi_u.w 445 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 446 %r = call <4 x i32> @llvm.mips.maxi.u.w(<4 x i32> %a, i32 2) 447 store <4 x i32> %r, <4 x i32> * %ptr, align 16 448 ret void 449} 450 451define void @mini_s_w(<4 x i32> * %ptr) { 452entry: 453; CHECK-LABEL: mini_s_w: 454; CHECK: mini_s.w 455 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 456 %r = call <4 x i32> @llvm.mips.mini.s.w(<4 x i32> %a, i32 2) 457 store <4 x i32> %r, <4 x i32> * %ptr, align 16 458 ret void 459} 460 461define void @mini_u_w(<4 x i32> * %ptr) { 462entry: 463; CHECK-LABEL: mini_u_w: 464; CHECK: mini_u.w 465 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 466 %r = call <4 x i32> @llvm.mips.mini.u.w(<4 x i32> %a, i32 2) 467 store <4 x i32> %r, <4 x i32> * %ptr, align 16 468 ret void 469} 470 471define void @ldi_w(<4 x i32> * %ptr) { 472entry: 473; CHECK-LABEL: ldi_w: 474; CHECK: ldi.w 475 %r = call <4 x i32> @llvm.mips.ldi.w(i32 3) 476 store <4 x i32> %r, <4 x i32> * %ptr, align 16 477 ret void 478} 479 480define void @sldi_w(<4 x i32> * %ptr) { 481entry: 482; CHECK-LABEL: sldi_w: 483; CHECK: sldi.w 484 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 485 %r = call <4 x i32> @llvm.mips.sldi.w(<4 x i32> %a, <4 x i32> %a, i32 2) 486 store <4 x i32> %r, <4 x i32> * %ptr, align 16 487 ret void 488} 489 490define void @slli_w(<4 x i32> * %ptr) { 491entry: 492; CHECK-LABEL: slli_w: 493; CHECK: slli.w 494 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 495 %r = call <4 x i32> @llvm.mips.slli.w(<4 x i32> %a, i32 3) 496 store <4 x i32> %r, <4 x i32> * %ptr, align 16 497 ret void 498} 499 500define void @splati_w(<4 x i32> * %ptr) { 501entry: 502; CHECK-LABEL: splati_w: 503; CHECK: splati.w 504 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 505 %r = call <4 x i32> @llvm.mips.splati.w(<4 x i32> %a, i32 3) 506 store <4 x i32> %r, <4 x i32> * %ptr, align 16 507 ret void 508} 509 510define void @srai_w(<4 x i32> * %ptr) { 511entry: 512; CHECK-LABEL: srai_w: 513; CHECK: srai.w 514 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 515 %r = call <4 x i32> @llvm.mips.srai.w(<4 x i32> %a, i32 3) 516 store <4 x i32> %r, <4 x i32> * %ptr, align 16 517 ret void 518} 519 520define void @srari_w(<4 x i32> * %ptr) { 521entry: 522; CHECK-LABEL: srari_w: 523; CHECK: srari.w 524 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 525 %r = call <4 x i32> @llvm.mips.srari.w(<4 x i32> %a, i32 3) 526 store <4 x i32> %r, <4 x i32> * %ptr, align 16 527 ret void 528} 529 530define void @srli_w(<4 x i32> * %ptr) { 531entry: 532; CHECK-LABEL: srli_w: 533; CHECK: srli.w 534 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 535 %r = call <4 x i32> @llvm.mips.srli.w(<4 x i32> %a, i32 3) 536 store <4 x i32> %r, <4 x i32> * %ptr, align 16 537 ret void 538} 539 540define void @srlri_w(<4 x i32> * %ptr) { 541entry: 542; CHECK-LABEL: srlri_w: 543; CHECK: srlri.w 544 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 545 %r = call <4 x i32> @llvm.mips.srlri.w(<4 x i32> %a, i32 3) 546 store <4 x i32> %r, <4 x i32> * %ptr, align 16 547 ret void 548} 549 550define void @ld_w(<4 x i32> * %ptr, i8 * %ldptr, i32 %offset) { 551entry: 552; CHECK-LABEL: ld_w 553; MSA32: addu $[[R0:[0-9]]], $5, $6 554; MSA64N32: sll $[[R2:[0-9]]], $6, 0 555; MSA64N32: sll $[[R1:[0-9]]], $5, 0 556; MSA64N32: addu $[[R0:[0-9]]], $[[R1]], $[[R2]] 557; MSA64N64: sll $[[R1:[0-9]]], $6, 0 558; MSA64N64: daddu $[[R0:[0-9]]], $5, $[[R1]] 559; CHECK: ld.w $w{{[0-9]+}}, 0($[[R0]]) 560 %a = call <4 x i32> @llvm.mips.ld.w(i8* %ldptr, i32 %offset) 561 store <4 x i32> %a, <4 x i32> * %ptr, align 16 562 ret void 563} 564 565define void @st_w(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 566entry: 567; CHECK-LABEL: st_w 568; MSA32: addu $[[R0:[0-9]]], $7, $6 569 570; MSA64N32: sll $[[R1:[0-9]+]], $6, 0 571; MSA64N32: sll $[[R2:[0-9]+]], $7, 0 572; MSA64N32: addu $[[R0:[0-9]+]], $[[R2]], $[[R1]] 573 574; MSA64N64: sll $[[R1:[0-9]]], $6, 0 575; MSA64N64: daddu $[[R0:[0-9]]], $7, $[[R1]] 576; CHECK: st.w $w{{[0-9]+}}, 0($[[R0]]) 577 %a = call <4 x i32> @llvm.mips.ld.w(i8* %ldptr, i32 0) 578 call void @llvm.mips.st.w(<4 x i32> %a, i8* %stptr, i32 %offset) 579 ret void 580} 581 582define void @addvi_h(<8 x i16> * %ptr) { 583entry: 584; CHECK-LABEL: addvi_h: 585; CHECK: addvi.h 586 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 587 %r = call <8 x i16> @llvm.mips.addvi.h(<8 x i16> %a, i32 25) 588 store <8 x i16> %r, <8 x i16> * %ptr, align 16 589 ret void 590} 591 592define void @bclri_h(<8 x i16> * %ptr) { 593entry: 594; CHECK-LABEL: bclri_h: 595; CHECK: bclri.h 596 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 597 %r = call <8 x i16> @llvm.mips.bclri.h(<8 x i16> %a, i32 8) 598 store <8 x i16> %r, <8 x i16> * %ptr, align 16 599 ret void 600} 601 602define void @binsli_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) { 603entry: 604; CHECK-LABEL: binsli_h: 605; CHECK: binsli.h 606 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 607 %b = load <8 x i16>, <8 x i16> * %ptr2, align 16 608 %r = call <8 x i16> @llvm.mips.binsli.h(<8 x i16> %a, <8 x i16> %b, i32 8) 609 store <8 x i16> %r, <8 x i16> * %ptr, align 16 610 ret void 611} 612 613define void @binsri_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) { 614entry: 615; CHECK-LABEL: binsri_h: 616; CHECK: binsri.h 617 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 618 %b = load <8 x i16>, <8 x i16> * %ptr2, align 16 619 %r = call <8 x i16> @llvm.mips.binsri.h(<8 x i16> %a, <8 x i16> %b, i32 14) 620 store <8 x i16> %r, <8 x i16> * %ptr, align 16 621 ret void 622} 623 624define void @bnegi_h(<8 x i16> * %ptr) { 625entry: 626; CHECK-LABEL: bnegi_h: 627; CHECK: bnegi.h 628 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 629 %r = call <8 x i16> @llvm.mips.bnegi.h(<8 x i16> %a, i32 14) 630 store <8 x i16> %r, <8 x i16> * %ptr, align 16 631 ret void 632} 633 634define void @bseti_h(<8 x i16> * %ptr) { 635entry: 636; CHECK-LABEL: bseti_h: 637; CHECK: bseti.h 638 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 639 %r = call <8 x i16> @llvm.mips.bseti.h(<8 x i16> %a, i32 15) 640 store <8 x i16> %r, <8 x i16> * %ptr, align 16 641 ret void 642} 643 644define void @clei_s_h(<8 x i16> * %ptr) { 645entry: 646; CHECK-LABEL: clei_s_h: 647; CHECK: clei_s.h 648 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 649 %r = call <8 x i16> @llvm.mips.clei.s.h(<8 x i16> %a, i32 13) 650 store <8 x i16> %r, <8 x i16> * %ptr, align 16 651 ret void 652} 653 654define void @clei_u_h(<8 x i16> * %ptr) { 655entry: 656; CHECK-LABEL: clei_u_h: 657; CHECK: clei_u.h 658 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 659 %r = call <8 x i16> @llvm.mips.clei.u.h(<8 x i16> %a, i32 25) 660 store <8 x i16> %r, <8 x i16> * %ptr, align 16 661 ret void 662} 663 664define void @clti_s_h(<8 x i16> * %ptr) { 665entry: 666; CHECK-LABEL: clti_s_h: 667; CHECK: clti_s.h 668 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 669 %r = call <8 x i16> @llvm.mips.clti.s.h(<8 x i16> %a, i32 15) 670 store <8 x i16> %r, <8 x i16> * %ptr, align 16 671 ret void 672} 673 674define void @clti_u_h(<8 x i16> * %ptr) { 675entry: 676; CHECK-LABEL: clti_u_h: 677; CHECK: clti_u.h 678 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 679 %r = call <8 x i16> @llvm.mips.clti.u.h(<8 x i16> %a, i32 25) 680 store <8 x i16> %r, <8 x i16> * %ptr, align 16 681 ret void 682} 683 684define void @maxi_s_h(<8 x i16> * %ptr) { 685entry: 686; CHECK-LABEL: maxi_s_h: 687; CHECK: maxi_s.h 688 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 689 %r = call <8 x i16> @llvm.mips.maxi.s.h(<8 x i16> %a, i32 2) 690 store <8 x i16> %r, <8 x i16> * %ptr, align 16 691 ret void 692} 693 694define void @maxi_u_h(<8 x i16> * %ptr) { 695entry: 696; CHECK-LABEL: maxi_u_h: 697; CHECK: maxi_u.h 698 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 699 %r = call <8 x i16> @llvm.mips.maxi.u.h(<8 x i16> %a, i32 2) 700 store <8 x i16> %r, <8 x i16> * %ptr, align 16 701 ret void 702} 703 704define void @mini_s_h(<8 x i16> * %ptr) { 705entry: 706; CHECK-LABEL: mini_s_h: 707; CHECK: mini_s.h 708 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 709 %r = call <8 x i16> @llvm.mips.mini.s.h(<8 x i16> %a, i32 2) 710 store <8 x i16> %r, <8 x i16> * %ptr, align 16 711 ret void 712} 713 714define void @mini_u_h(<8 x i16> * %ptr) { 715entry: 716; CHECK-LABEL: mini_u_h: 717; CHECK: mini_u.h 718 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 719 %r = call <8 x i16> @llvm.mips.mini.u.h(<8 x i16> %a, i32 2) 720 store <8 x i16> %r, <8 x i16> * %ptr, align 16 721 ret void 722} 723 724define void @ldi_h(<8 x i16> * %ptr) { 725entry: 726; CHECK-LABEL: ldi_h: 727; CHECK: ldi.h 728 %r = call <8 x i16> @llvm.mips.ldi.h(i32 3) 729 store <8 x i16> %r, <8 x i16> * %ptr, align 16 730 ret void 731} 732 733define void @sldi_h(<8 x i16> * %ptr) { 734entry: 735; CHECK-LABEL: sldi_h: 736; CHECK: sldi.h 737 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 738 %r = call <8 x i16> @llvm.mips.sldi.h(<8 x i16> %a, <8 x i16> %a, i32 3) 739 store <8 x i16> %r, <8 x i16> * %ptr, align 16 740 ret void 741} 742 743define void @slli_h(<8 x i16> * %ptr) { 744entry: 745; CHECK-LABEL: slli_h: 746; CHECK: slli.h 747 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 748 %r = call <8 x i16> @llvm.mips.slli.h(<8 x i16> %a, i32 3) 749 store <8 x i16> %r, <8 x i16> * %ptr, align 16 750 ret void 751} 752 753define void @splati_h(<8 x i16> * %ptr) { 754entry: 755; CHECK-LABEL: splati_h: 756; CHECK: splati.h 757 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 758 %r = call <8 x i16> @llvm.mips.splati.h(<8 x i16> %a, i32 3) 759 store <8 x i16> %r, <8 x i16> * %ptr, align 16 760 ret void 761} 762 763define void @srai_h(<8 x i16> * %ptr) { 764entry: 765; CHECK-LABEL: srai_h: 766; CHECK: srai.h 767 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 768 %r = call <8 x i16> @llvm.mips.srai.h(<8 x i16> %a, i32 3) 769 store <8 x i16> %r, <8 x i16> * %ptr, align 16 770 ret void 771} 772 773define void @srari_h(<8 x i16> * %ptr) { 774entry: 775; CHECK-LABEL: srari_h: 776; CHECK: srari.h 777 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 778 %r = call <8 x i16> @llvm.mips.srari.h(<8 x i16> %a, i32 3) 779 store <8 x i16> %r, <8 x i16> * %ptr, align 16 780 ret void 781} 782 783define void @srli_h(<8 x i16> * %ptr) { 784entry: 785; CHECK-LABEL: srli_h: 786; CHECK: srli.h 787 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 788 %r = call <8 x i16> @llvm.mips.srli.h(<8 x i16> %a, i32 3) 789 store <8 x i16> %r, <8 x i16> * %ptr, align 16 790 ret void 791} 792 793define void @srlri_h(<8 x i16> * %ptr) { 794entry: 795; CHECK-LABEL: srlri_h: 796; CHECK: srlri.h 797 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 798 %r = call <8 x i16> @llvm.mips.srlri.h(<8 x i16> %a, i32 3) 799 store <8 x i16> %r, <8 x i16> * %ptr, align 16 800 ret void 801} 802 803define void @ld_h(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset) { 804entry: 805; CHECK-LABEL: ld_h 806; MSA32: addu $[[R0:[0-9]]], $5, $6 807 808; MSA64N32-DAG: sll $[[R2:[0-9]]], $6, 0 809; MSA64N32-DAG: sll $[[R1:[0-9]]], $5, 0 810; MSA64N32: addu $[[R0:[0-9]]], $[[R1]], $[[R2]] 811 812; MSA64N64: sll $[[R1:[0-9]]], $6, 0 813; MSA64N64: daddu $[[R0:[0-9]]], $5, $[[R1]] 814 815; CHECK: ld.h $w{{[0-9]+}}, 0($[[R0]]) 816 %a = call <8 x i16> @llvm.mips.ld.h(i8* %ldptr, i32 %offset) 817 store <8 x i16> %a, <8 x i16> * %ptr, align 16 818 ret void 819} 820 821define void @st_h(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 822entry: 823; CHECK-LABEL: st_h 824; MSA32: addu $[[R0:[0-9]]], $7, $6 825 826; MSA64N32-DAG: sll $[[R1:[0-9]+]], $6, 0 827; MSA64N32-DAG: sll $[[R2:[0-9]+]], $7, 0 828; MSA64N32: addu $[[R0:[0-9]+]], $[[R2]], $[[R1]] 829 830; MSA64N64: sll $[[R1:[0-9]]], $6, 0 831; MSA64N64: daddu $[[R0:[0-9]]], $7, $[[R1]] 832; CHECK: st.h $w{{[0-9]+}}, 0($[[R0]]) 833 %a = call <8 x i16> @llvm.mips.ld.h(i8* %ldptr, i32 0) 834 call void @llvm.mips.st.h(<8 x i16> %a, i8* %stptr, i32 %offset) 835 ret void 836} 837 838define i32 @copy_s_b(<16 x i8> * %ptr) { 839entry: 840; CHECK-LABEL: copy_s_b: 841; CHECK: copy_s.b 842 %a = load <16 x i8>, <16 x i8> * %ptr, align 16 843 %r = call i32 @llvm.mips.copy.s.b(<16 x i8> %a, i32 1) 844 ret i32 %r 845} 846define i32 @copy_s_h(<8 x i16> * %ptr) { 847entry: 848; CHECK-LABEL: copy_s_h: 849; CHECK: copy_s.h 850 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 851 %r = call i32 @llvm.mips.copy.s.h(<8 x i16> %a, i32 1) 852 ret i32 %r 853} 854define i32 @copy_s_w(<4 x i32> * %ptr) { 855entry: 856; CHECK-LABEL: copy_s_w: 857; CHECK: copy_s.w 858 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 859 %r = call i32 @llvm.mips.copy.s.w(<4 x i32> %a, i32 1) 860 ret i32 %r 861} 862define i32 @copy_u_b(<16 x i8> * %ptr) { 863entry: 864; CHECK-LABEL: copy_u_b: 865; CHECK: copy_u.b 866 %a = load <16 x i8>, <16 x i8> * %ptr, align 16 867 %r = call i32 @llvm.mips.copy.u.b(<16 x i8> %a, i32 1) 868 ret i32 %r 869} 870define i32 @copy_u_h(<8 x i16> * %ptr) { 871entry: 872; CHECK-LABEL: copy_u_h: 873; CHECK: copy_u.h 874 %a = load <8 x i16>, <8 x i16> * %ptr, align 16 875 %r = call i32 @llvm.mips.copy.u.h(<8 x i16> %a, i32 1) 876 ret i32 %r 877} 878define i32 @copy_u_w(<4 x i32> * %ptr) { 879entry: 880; CHECK-LABEL: copy_u_w: 881; MSA32: copy_s.w 882; MSA64: copy_u.w 883 %a = load <4 x i32>, <4 x i32> * %ptr, align 16 884 %r = call i32 @llvm.mips.copy.u.w(<4 x i32> %a, i32 1) 885 ret i32 %r 886} 887 888define i64 @copy_s_d(<2 x i64> * %ptr) { 889entry: 890; CHECK-LABEL: copy_s_d: 891; MSA32: copy_s.w 892; MSA32: copy_s.w 893; MSA64: copy_s.d 894 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 895 %r = call i64 @llvm.mips.copy.s.d(<2 x i64> %a, i32 1) 896 ret i64 %r 897} 898 899define i64 @copy_u_d(<2 x i64> * %ptr) { 900entry: 901; CHECK-LABEL: copy_u_d: 902; MSA32: copy_s.w 903; MSA32: copy_s.w 904; MSA64: copy_s.d 905 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 906 %r = call i64 @llvm.mips.copy.u.d(<2 x i64> %a, i32 1) 907 ret i64 %r 908} 909 910define void @addvi_d(<2 x i64> * %ptr) { 911entry: 912; CHECK-LABEL: addvi_d: 913; CHECK: addvi.d 914 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 915 %r = call <2 x i64> @llvm.mips.addvi.d(<2 x i64> %a, i32 25) 916 store <2 x i64> %r, <2 x i64> * %ptr, align 16 917 ret void 918} 919 920define void @bclri_d(<2 x i64> * %ptr) { 921entry: 922; CHECK-LABEL: bclri_d: 923; CHECK: bclri.d 924 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 925 %r = call <2 x i64> @llvm.mips.bclri.d(<2 x i64> %a, i32 16) 926 store <2 x i64> %r, <2 x i64> * %ptr, align 16 927 ret void 928} 929 930define void @binsli_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) { 931entry: 932; CHECK-LABEL: binsli_d: 933; CHECK: binsli.d 934 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 935 %b = load <2 x i64>, <2 x i64> * %ptr2, align 16 936 %r = call <2 x i64> @llvm.mips.binsli.d(<2 x i64> %a, <2 x i64> %b, i32 4) 937 store <2 x i64> %r, <2 x i64> * %ptr, align 16 938 ret void 939} 940 941define void @binsri_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) { 942entry: 943; CHECK-LABEL: binsri_d: 944; CHECK: binsri.d 945 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 946 %b = load <2 x i64>, <2 x i64> * %ptr2, align 16 947 %r = call <2 x i64> @llvm.mips.binsri.d(<2 x i64> %a, <2 x i64> %b, i32 5) 948 store <2 x i64> %r, <2 x i64> * %ptr, align 16 949 ret void 950} 951 952define void @bnegi_d(<2 x i64> * %ptr) { 953entry: 954; CHECK-LABEL: bnegi_d: 955; CHECK: bnegi.d 956 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 957 %r = call <2 x i64> @llvm.mips.bnegi.d(<2 x i64> %a, i32 9) 958 store <2 x i64> %r, <2 x i64> * %ptr, align 16 959 ret void 960} 961 962define void @bseti_d(<2 x i64> * %ptr) { 963entry: 964; CHECK-LABEL: bseti_d: 965; CHECK: bseti.d 966 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 967 %r = call <2 x i64> @llvm.mips.bseti.d(<2 x i64> %a, i32 25) 968 store <2 x i64> %r, <2 x i64> * %ptr, align 16 969 ret void 970} 971 972define void @clei_s_d(<2 x i64> * %ptr) { 973entry: 974; CHECK-LABEL: clei_s_d: 975; CHECK: clei_s.d 976 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 977 %r = call <2 x i64> @llvm.mips.clei.s.d(<2 x i64> %a, i32 15) 978 store <2 x i64> %r, <2 x i64> * %ptr, align 16 979 ret void 980} 981 982define void @clei_u_d(<2 x i64> * %ptr) { 983entry: 984; CHECK-LABEL: clei_u_d: 985; CHECK: clei_u.d 986 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 987 %r = call <2 x i64> @llvm.mips.clei.u.d(<2 x i64> %a, i32 25) 988 store <2 x i64> %r, <2 x i64> * %ptr, align 16 989 ret void 990} 991 992define void @clti_s_d(<2 x i64> * %ptr) { 993entry: 994; CHECK-LABEL: clti_s_d: 995; CHECK: clti_s.d 996 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 997 %r = call <2 x i64> @llvm.mips.clti.s.d(<2 x i64> %a, i32 15) 998 store <2 x i64> %r, <2 x i64> * %ptr, align 16 999 ret void 1000} 1001 1002define void @clti_u_d(<2 x i64> * %ptr) { 1003entry: 1004; CHECK-LABEL: clti_u_d: 1005; CHECK: clti_u.d 1006 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1007 %r = call <2 x i64> @llvm.mips.clti.u.d(<2 x i64> %a, i32 25) 1008 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1009 ret void 1010} 1011 1012define void @ldi_d(<2 x i64> * %ptr) { 1013entry: 1014; CHECK-LABEL: ldi_d: 1015; CHECK: ldi.d 1016 %r = call <2 x i64> @llvm.mips.ldi.d(i32 3) 1017 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1018 ret void 1019} 1020 1021define void @maxi_s_d(<2 x i64> * %ptr) { 1022entry: 1023; CHECK-LABEL: maxi_s_d: 1024; CHECK: maxi_s.d 1025 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1026 %r = call <2 x i64> @llvm.mips.maxi.s.d(<2 x i64> %a, i32 2) 1027 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1028 ret void 1029} 1030 1031define void @maxi_u_d(<2 x i64> * %ptr) { 1032entry: 1033; CHECK-LABEL: maxi_u_d: 1034; CHECK: maxi_u.d 1035 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1036 %r = call <2 x i64> @llvm.mips.maxi.u.d(<2 x i64> %a, i32 2) 1037 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1038 ret void 1039} 1040 1041define void @mini_s_d(<2 x i64> * %ptr) { 1042entry: 1043; CHECK-LABEL: mini_s_d: 1044; CHECK: mini_s.d 1045 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1046 %r = call <2 x i64> @llvm.mips.mini.s.d(<2 x i64> %a, i32 2) 1047 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1048 ret void 1049} 1050 1051define void @mini_u_d(<2 x i64> * %ptr) { 1052entry: 1053; CHECK-LABEL: mini_u_d: 1054; CHECK: mini_u.d 1055 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1056 %r = call <2 x i64> @llvm.mips.mini.u.d(<2 x i64> %a, i32 2) 1057 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1058 ret void 1059} 1060 1061define void @sldi_d(<2 x i64> * %ptr) { 1062entry: 1063; CHECK-LABEL: sldi_d: 1064; CHECK: sldi.d 1065 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1066 %r = call <2 x i64> @llvm.mips.sldi.d(<2 x i64> %a, <2 x i64> %a, i32 1) 1067 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1068 ret void 1069} 1070 1071define void @slli_d(<2 x i64> * %ptr) { 1072entry: 1073; CHECK-LABEL: slli_d: 1074; CHECK: slli.d 1075 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1076 %r = call <2 x i64> @llvm.mips.slli.d(<2 x i64> %a, i32 3) 1077 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1078 ret void 1079} 1080 1081define void @srai_d(<2 x i64> * %ptr) { 1082entry: 1083; CHECK-LABEL: srai_d: 1084; CHECK: srai.d 1085 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1086 %r = call <2 x i64> @llvm.mips.srai.d(<2 x i64> %a, i32 3) 1087 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1088 ret void 1089} 1090 1091define void @srari_d(<2 x i64> * %ptr) { 1092entry: 1093; CHECK-LABEL: srari_d: 1094; CHECK: srari.d 1095 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1096 %r = call <2 x i64> @llvm.mips.srari.d(<2 x i64> %a, i32 3) 1097 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1098 ret void 1099} 1100 1101define void @srli_d(<2 x i64> * %ptr) { 1102entry: 1103; CHECK-LABEL: srli_d: 1104; CHECK: srli.d 1105 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1106 %r = call <2 x i64> @llvm.mips.srli.d(<2 x i64> %a, i32 3) 1107 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1108 ret void 1109} 1110 1111define void @srlri_d(<2 x i64> * %ptr) { 1112entry: 1113; CHECK-LABEL: srlri_d: 1114; CHECK: srlri.d 1115 %a = load <2 x i64>, <2 x i64> * %ptr, align 16 1116 %r = call <2 x i64> @llvm.mips.srlri.d(<2 x i64> %a, i32 3) 1117 store <2 x i64> %r, <2 x i64> * %ptr, align 16 1118 ret void 1119} 1120 1121define void @ld_d(<2 x i64> * %ptr, i8 * %ldptr, i32 %offset) { 1122entry: 1123; CHECK-LABEL: ld_d 1124; MSA32: addu $[[R0:[0-9]]], $5, $6 1125; MSA64N32: sll $[[R2:[0-9]]], $6, 0 1126; MSA64N32: sll $[[R1:[0-9]]], $5, 0 1127; MSA64N32: addu $[[R0:[0-9]]], $[[R1]], $[[R2]] 1128; MSA64N64: sll $[[R1:[0-9]]], $6, 0 1129; MSA64N64: daddu $[[R0:[0-9]]], $5, $[[R1]] 1130; CHECK: ld.d $w{{[0-9]+}}, 0($[[R0]]) 1131 %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 %offset) 1132 store <2 x i64> %a, <2 x i64> * %ptr, align 16 1133 ret void 1134} 1135 1136define void @ld_d2(<2 x i64> * %ptr, i8 * %ldptr) { 1137entry: 1138; CHECK-LABEL: ld_d2 1139; MSA32: addiu $[[R0:[0-9]]], $5, 4096 1140; MSA64N32: sll $[[R1:[0-9]]], $5, 0 1141; MSA64N32: addiu $[[R0:[0-9]]], $[[R1]], 4096 1142; MSA64N64: daddiu $[[R0:[0-9]]], $5, 4096 1143; CHECK: ld.d $w{{[0-9]+}}, 0($[[R0]]) 1144 %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 4096) 1145 store <2 x i64> %a, <2 x i64> * %ptr, align 16 1146 ret void 1147} 1148 1149define void @st_d(<2 x i64> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 1150entry: 1151; CHECK-LABEL: st_d 1152; MSA32: addu $[[R0:[0-9]]], $7, $6 1153 1154; MSA64N32-DAG: sll $[[R1:[0-9]]], $6, 0 1155; MSA64N32-DAG: sll $[[R2:[0-9]+]], $7, 0 1156; MSA64N32: addu $[[R0:[0-9]+]], $[[R2]], $[[R1]] 1157 1158; MSA64N64: sll $[[R1:[0-9]]], $6, 0 1159; MSA64N64: daddu $[[R0:[0-9]]], $7, $[[R1]] 1160; CHECK: st.d $w{{[0-9]+}}, 0($[[R0]]) 1161 %a = call <2 x i64> @llvm.mips.ld.d(i8* %ldptr, i32 0) 1162 call void @llvm.mips.st.d(<2 x i64> %a, i8* %stptr, i32 %offset) 1163 ret void 1164} 1165 1166 1167declare <8 x i16> @llvm.mips.ldi.h(i32) 1168declare <8 x i16> @llvm.mips.addvi.h(<8 x i16>, i32) 1169declare <8 x i16> @llvm.mips.bclri.h(<8 x i16>, i32) 1170declare <8 x i16> @llvm.mips.binsli.h(<8 x i16>, <8 x i16>, i32) 1171declare <8 x i16> @llvm.mips.binsri.h(<8 x i16>, <8 x i16>, i32) 1172declare <8 x i16> @llvm.mips.bnegi.h(<8 x i16>, i32) 1173declare <8 x i16> @llvm.mips.bseti.h(<8 x i16>, i32) 1174declare <8 x i16> @llvm.mips.clei.s.h(<8 x i16>, i32) 1175declare <8 x i16> @llvm.mips.clei.u.h(<8 x i16>, i32) 1176declare <8 x i16> @llvm.mips.clti.s.h(<8 x i16>, i32) 1177declare <8 x i16> @llvm.mips.clti.u.h(<8 x i16>, i32) 1178declare <8 x i16> @llvm.mips.maxi.s.h(<8 x i16>, i32) 1179declare <8 x i16> @llvm.mips.maxi.u.h(<8 x i16>, i32) 1180declare <8 x i16> @llvm.mips.mini.s.h(<8 x i16>, i32) 1181declare <8 x i16> @llvm.mips.mini.u.h(<8 x i16>, i32) 1182declare <8 x i16> @llvm.mips.sldi.h(<8 x i16>, <8 x i16>, i32) 1183declare <8 x i16> @llvm.mips.slli.h(<8 x i16>, i32) 1184declare <8 x i16> @llvm.mips.splati.h(<8 x i16>, i32) 1185declare <8 x i16> @llvm.mips.srai.h(<8 x i16>, i32) 1186declare <8 x i16> @llvm.mips.srari.h(<8 x i16>, i32) 1187declare <8 x i16> @llvm.mips.srli.h(<8 x i16>, i32) 1188declare <8 x i16> @llvm.mips.srlri.h(<8 x i16>, i32) 1189declare <4 x i32> @llvm.mips.addvi.w(<4 x i32>, i32) 1190declare <4 x i32> @llvm.mips.bclri.w(<4 x i32>, i32) 1191declare <4 x i32> @llvm.mips.binsli.w(<4 x i32>, <4 x i32>, i32) 1192declare <4 x i32> @llvm.mips.binsri.w(<4 x i32>, <4 x i32>, i32) 1193declare <4 x i32> @llvm.mips.bnegi.w(<4 x i32>, i32) 1194declare <4 x i32> @llvm.mips.bseti.w(<4 x i32>, i32) 1195declare <4 x i32> @llvm.mips.ldi.w(i32) 1196declare <4 x i32> @llvm.mips.clei.s.w(<4 x i32>, i32) 1197declare <4 x i32> @llvm.mips.clei.u.w(<4 x i32>, i32) 1198declare <4 x i32> @llvm.mips.clti.s.w(<4 x i32>, i32) 1199declare <4 x i32> @llvm.mips.clti.u.w(<4 x i32>, i32) 1200declare <4 x i32> @llvm.mips.maxi.s.w(<4 x i32>, i32) 1201declare <4 x i32> @llvm.mips.maxi.u.w(<4 x i32>, i32) 1202declare <4 x i32> @llvm.mips.mini.s.w(<4 x i32>, i32) 1203declare <4 x i32> @llvm.mips.mini.u.w(<4 x i32>, i32) 1204declare <4 x i32> @llvm.mips.sldi.w(<4 x i32>, <4 x i32>, i32) 1205declare <4 x i32> @llvm.mips.slli.w(<4 x i32>, i32) 1206declare <4 x i32> @llvm.mips.splati.w(<4 x i32>, i32) 1207declare <4 x i32> @llvm.mips.srai.w(<4 x i32>, i32) 1208declare <4 x i32> @llvm.mips.srari.w(<4 x i32>, i32) 1209declare <4 x i32> @llvm.mips.srli.w(<4 x i32>, i32) 1210declare <4 x i32> @llvm.mips.srlri.w(<4 x i32>, i32) 1211declare <2 x i64> @llvm.mips.ldi.d(i32) 1212declare <2 x i64> @llvm.mips.addvi.d(<2 x i64>, i32) 1213declare <2 x i64> @llvm.mips.bclri.d(<2 x i64>, i32) 1214declare <2 x i64> @llvm.mips.binsli.d(<2 x i64>, <2 x i64>, i32) 1215declare <2 x i64> @llvm.mips.binsri.d(<2 x i64>, <2 x i64>, i32) 1216declare <2 x i64> @llvm.mips.bnegi.d(<2 x i64>, i32) 1217declare <2 x i64> @llvm.mips.bseti.d(<2 x i64>, i32) 1218declare <2 x i64> @llvm.mips.clei.s.d(<2 x i64>, i32) 1219declare <2 x i64> @llvm.mips.clei.u.d(<2 x i64>, i32) 1220declare <2 x i64> @llvm.mips.clti.s.d(<2 x i64>, i32) 1221declare <2 x i64> @llvm.mips.clti.u.d(<2 x i64>, i32) 1222declare <2 x i64> @llvm.mips.maxi.s.d(<2 x i64>, i32) 1223declare <2 x i64> @llvm.mips.maxi.u.d(<2 x i64>, i32) 1224declare <2 x i64> @llvm.mips.mini.s.d(<2 x i64>, i32) 1225declare <2 x i64> @llvm.mips.mini.u.d(<2 x i64>, i32) 1226declare <2 x i64> @llvm.mips.sldi.d(<2 x i64>, <2 x i64>, i32) 1227declare <2 x i64> @llvm.mips.slli.d(<2 x i64>, i32) 1228declare <2 x i64> @llvm.mips.splati.d(<2 x i64>, i32) 1229declare <2 x i64> @llvm.mips.srai.d(<2 x i64>, i32) 1230declare <2 x i64> @llvm.mips.srari.d(<2 x i64>, i32) 1231declare <2 x i64> @llvm.mips.srli.d(<2 x i64>, i32) 1232declare <2 x i64> @llvm.mips.srlri.d(<2 x i64>, i32) 1233declare <16 x i8> @llvm.mips.ldi.b(i32) 1234declare <16 x i8> @llvm.mips.addvi.b(<16 x i8>, i32) 1235declare <16 x i8> @llvm.mips.andi.b(<16 x i8>, i32) 1236declare <16 x i8> @llvm.mips.bclri.b(<16 x i8>, i32) 1237declare <16 x i8> @llvm.mips.binsli.b(<16 x i8>, <16 x i8>, i32) 1238declare <16 x i8> @llvm.mips.binsri.b(<16 x i8>, <16 x i8>, i32) 1239declare <16 x i8> @llvm.mips.bmnzi.b(<16 x i8>, <16 x i8>, i32) 1240declare <16 x i8> @llvm.mips.bnegi.b(<16 x i8>, i32) 1241declare <16 x i8> @llvm.mips.bseli.b(<16 x i8>, <16 x i8>, i32) 1242declare <16 x i8> @llvm.mips.bseti.b(<16 x i8>, i32) 1243declare <16 x i8> @llvm.mips.clei.s.b(<16 x i8>, i32) 1244declare <16 x i8> @llvm.mips.clei.u.b(<16 x i8>, i32) 1245declare <16 x i8> @llvm.mips.clti.s.b(<16 x i8>, i32) 1246declare <16 x i8> @llvm.mips.clti.u.b(<16 x i8>, i32) 1247declare <16 x i8> @llvm.mips.maxi.s.b(<16 x i8>, i32) 1248declare <16 x i8> @llvm.mips.maxi.u.b(<16 x i8>, i32) 1249declare <16 x i8> @llvm.mips.mini.s.b(<16 x i8>, i32) 1250declare <16 x i8> @llvm.mips.mini.u.b(<16 x i8>, i32) 1251declare <16 x i8> @llvm.mips.nori.b(<16 x i8>, i32) 1252declare <16 x i8> @llvm.mips.ori.b(<16 x i8>, i32) 1253declare <16 x i8> @llvm.mips.sldi.b(<16 x i8>, <16 x i8>, i32) 1254declare <16 x i8> @llvm.mips.slli.b(<16 x i8>, i32) 1255declare <16 x i8> @llvm.mips.splati.b(<16 x i8>, i32) 1256declare <16 x i8> @llvm.mips.srai.b(<16 x i8>, i32) 1257declare <16 x i8> @llvm.mips.srari.b(<16 x i8>, i32) 1258declare <16 x i8> @llvm.mips.srli.b(<16 x i8>, i32) 1259declare <16 x i8> @llvm.mips.srlri.b(<16 x i8>, i32) 1260declare i32 @llvm.mips.copy.s.h(<8 x i16>, i32) 1261declare i32 @llvm.mips.copy.u.h(<8 x i16>, i32) 1262declare i32 @llvm.mips.copy.s.w(<4 x i32>, i32) 1263declare i32 @llvm.mips.copy.u.w(<4 x i32>, i32) 1264declare i64 @llvm.mips.copy.s.d(<2 x i64>, i32) 1265declare i64 @llvm.mips.copy.u.d(<2 x i64>, i32) 1266declare i32 @llvm.mips.copy.s.b(<16 x i8>, i32) 1267declare i32 @llvm.mips.copy.u.b(<16 x i8>, i32) 1268declare <16 x i8> @llvm.mips.bmzi.b(<16 x i8>, <16 x i8>, i32) 1269declare <16 x i8> @llvm.mips.ld.b(i8*, i32) 1270declare <8 x i16> @llvm.mips.ld.h(i8*, i32) 1271declare <4 x i32> @llvm.mips.ld.w(i8*, i32) 1272declare <2 x i64> @llvm.mips.ld.d(i8*, i32) 1273declare void @llvm.mips.st.b(<16 x i8>, i8*, i32) 1274declare void @llvm.mips.st.h(<8 x i16>, i8*, i32) 1275declare void @llvm.mips.st.w(<4 x i32>, i8*, i32) 1276declare void @llvm.mips.st.d(<2 x i64>, i8*, i32) 1277