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 11 define void @addvi_b(<16 x i8> * %ptr) { 12 entry: 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 21 define void @andi_b(<16 x i8> * %ptr) { 22 entry: 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 31 define void @bclri_b(<16 x i8> * %ptr) { 32 entry: 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 41 define void @binsli_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 42 entry: 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 52 define void @binsri_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 53 entry: 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 63 define void @bmnzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 64 entry: 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 74 define void @bmzi_b(<16 x i8> * %ptr, <16 x i8> * %ptr2) { 75 entry: 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 85 define void @bnegi_b(<16 x i8> * %ptr) { 86 entry: 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 95 define void @bseli_b(<16 x i8> * %ptr) { 96 entry: 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 105 define void @bseti_b(<16 x i8> * %ptr) { 106 entry: 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 115 define void @clei_s_b(<16 x i8> * %ptr) { 116 entry: 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 125 define void @clei_u_b(<16 x i8> * %ptr) { 126 entry: 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 135 define void @clti_s_b(<16 x i8> * %ptr) { 136 entry: 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 145 define void @clti_u_b(<16 x i8> * %ptr) { 146 entry: 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 155 define void @ldi_b(<16 x i8> * %ptr) { 156 entry: 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 164 define void @maxi_s_b(<16 x i8> * %ptr) { 165 entry: 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 174 define void @maxi_u_b(<16 x i8> * %ptr) { 175 entry: 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 184 define void @mini_s_b(<16 x i8> * %ptr) { 185 entry: 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 194 define void @mini_u_b(<16 x i8> * %ptr) { 195 entry: 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 204 define void @nori_b(<16 x i8> * %ptr) { 205 entry: 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 214 define void @ori_b(<16 x i8> * %ptr) { 215 entry: 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 224 define void @sldi_b(<16 x i8> * %ptr) { 225 entry: 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 234 define void @slli_b(<16 x i8> * %ptr) { 235 entry: 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 244 define void @splati_b(<16 x i8> * %ptr) { 245 entry: 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 254 define void @srai_b(<16 x i8> * %ptr) { 255 entry: 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 264 define void @srari_b(<16 x i8> * %ptr) { 265 entry: 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 274 define void @srli_b(<16 x i8> * %ptr) { 275 entry: 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 284 define void @srlri_b(<16 x i8> * %ptr) { 285 entry: 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 294 define void @ld_b(<16 x i8> * %ptr, i8 * %ldptr, i32 %offset) { 295 entry: 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 312 define void @st_b(<16 x i8> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 313 entry: 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 329 define void @addvi_w(<4 x i32> * %ptr) { 330 entry: 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 339 define void @bclri_w(<4 x i32> * %ptr) { 340 entry: 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 349 define void @binsli_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) { 350 entry: 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 360 define void @binsri_w(<4 x i32> * %ptr, <4 x i32> * %ptr2) { 361 entry: 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 371 define void @bnegi_w(<4 x i32> * %ptr) { 372 entry: 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 381 define void @bseti_w(<4 x i32> * %ptr) { 382 entry: 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 391 define void @clei_s_w(<4 x i32> * %ptr) { 392 entry: 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 401 define void @clei_u_w(<4 x i32> * %ptr) { 402 entry: 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 411 define void @clti_s_w(<4 x i32> * %ptr) { 412 entry: 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 421 define void @clti_u_w(<4 x i32> * %ptr) { 422 entry: 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 431 define void @maxi_s_w(<4 x i32> * %ptr) { 432 entry: 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 441 define void @maxi_u_w(<4 x i32> * %ptr) { 442 entry: 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 451 define void @mini_s_w(<4 x i32> * %ptr) { 452 entry: 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 461 define void @mini_u_w(<4 x i32> * %ptr) { 462 entry: 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 471 define void @ldi_w(<4 x i32> * %ptr) { 472 entry: 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 480 define void @sldi_w(<4 x i32> * %ptr) { 481 entry: 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 490 define void @slli_w(<4 x i32> * %ptr) { 491 entry: 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 500 define void @splati_w(<4 x i32> * %ptr) { 501 entry: 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 510 define void @srai_w(<4 x i32> * %ptr) { 511 entry: 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 520 define void @srari_w(<4 x i32> * %ptr) { 521 entry: 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 530 define void @srli_w(<4 x i32> * %ptr) { 531 entry: 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 540 define void @srlri_w(<4 x i32> * %ptr) { 541 entry: 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 550 define void @ld_w(<4 x i32> * %ptr, i8 * %ldptr, i32 %offset) { 551 entry: 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 565 define void @st_w(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 566 entry: 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 582 define void @addvi_h(<8 x i16> * %ptr) { 583 entry: 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 592 define void @bclri_h(<8 x i16> * %ptr) { 593 entry: 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 602 define void @binsli_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) { 603 entry: 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 613 define void @binsri_h(<8 x i16> * %ptr, <8 x i16> * %ptr2) { 614 entry: 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 624 define void @bnegi_h(<8 x i16> * %ptr) { 625 entry: 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 634 define void @bseti_h(<8 x i16> * %ptr) { 635 entry: 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 644 define void @clei_s_h(<8 x i16> * %ptr) { 645 entry: 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 654 define void @clei_u_h(<8 x i16> * %ptr) { 655 entry: 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 664 define void @clti_s_h(<8 x i16> * %ptr) { 665 entry: 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 674 define void @clti_u_h(<8 x i16> * %ptr) { 675 entry: 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 684 define void @maxi_s_h(<8 x i16> * %ptr) { 685 entry: 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 694 define void @maxi_u_h(<8 x i16> * %ptr) { 695 entry: 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 704 define void @mini_s_h(<8 x i16> * %ptr) { 705 entry: 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 714 define void @mini_u_h(<8 x i16> * %ptr) { 715 entry: 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 724 define void @ldi_h(<8 x i16> * %ptr) { 725 entry: 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 733 define void @sldi_h(<8 x i16> * %ptr) { 734 entry: 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 743 define void @slli_h(<8 x i16> * %ptr) { 744 entry: 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 753 define void @splati_h(<8 x i16> * %ptr) { 754 entry: 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 763 define void @srai_h(<8 x i16> * %ptr) { 764 entry: 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 773 define void @srari_h(<8 x i16> * %ptr) { 774 entry: 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 783 define void @srli_h(<8 x i16> * %ptr) { 784 entry: 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 793 define void @srlri_h(<8 x i16> * %ptr) { 794 entry: 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 803 define void @ld_h(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset) { 804 entry: 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 821 define void @st_h(<8 x i16> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 822 entry: 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 838 define i32 @copy_s_b(<16 x i8> * %ptr) { 839 entry: 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 } 846 define i32 @copy_s_h(<8 x i16> * %ptr) { 847 entry: 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 } 854 define i32 @copy_s_w(<4 x i32> * %ptr) { 855 entry: 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 } 862 define i32 @copy_u_b(<16 x i8> * %ptr) { 863 entry: 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 } 870 define i32 @copy_u_h(<8 x i16> * %ptr) { 871 entry: 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 } 878 define i32 @copy_u_w(<4 x i32> * %ptr) { 879 entry: 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 888 define i64 @copy_s_d(<2 x i64> * %ptr) { 889 entry: 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 899 define i64 @copy_u_d(<2 x i64> * %ptr) { 900 entry: 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 910 define void @addvi_d(<2 x i64> * %ptr) { 911 entry: 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 920 define void @bclri_d(<2 x i64> * %ptr) { 921 entry: 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 930 define void @binsli_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) { 931 entry: 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 941 define void @binsri_d(<2 x i64> * %ptr, <2 x i64> * %ptr2) { 942 entry: 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 952 define void @bnegi_d(<2 x i64> * %ptr) { 953 entry: 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 962 define void @bseti_d(<2 x i64> * %ptr) { 963 entry: 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 972 define void @clei_s_d(<2 x i64> * %ptr) { 973 entry: 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 982 define void @clei_u_d(<2 x i64> * %ptr) { 983 entry: 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 992 define void @clti_s_d(<2 x i64> * %ptr) { 993 entry: 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 1002 define void @clti_u_d(<2 x i64> * %ptr) { 1003 entry: 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 1012 define void @ldi_d(<2 x i64> * %ptr) { 1013 entry: 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 1021 define void @maxi_s_d(<2 x i64> * %ptr) { 1022 entry: 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 1031 define void @maxi_u_d(<2 x i64> * %ptr) { 1032 entry: 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 1041 define void @mini_s_d(<2 x i64> * %ptr) { 1042 entry: 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 1051 define void @mini_u_d(<2 x i64> * %ptr) { 1052 entry: 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 1061 define void @sldi_d(<2 x i64> * %ptr) { 1062 entry: 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 1071 define void @slli_d(<2 x i64> * %ptr) { 1072 entry: 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 1081 define void @srai_d(<2 x i64> * %ptr) { 1082 entry: 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 1091 define void @srari_d(<2 x i64> * %ptr) { 1092 entry: 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 1101 define void @srli_d(<2 x i64> * %ptr) { 1102 entry: 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 1111 define void @srlri_d(<2 x i64> * %ptr) { 1112 entry: 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 1121 define void @ld_d(<2 x i64> * %ptr, i8 * %ldptr, i32 %offset) { 1122 entry: 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 1136 define void @ld_d2(<2 x i64> * %ptr, i8 * %ldptr) { 1137 entry: 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 1149 define void @st_d(<2 x i64> * %ptr, i8 * %ldptr, i32 %offset, i8 * %stptr) { 1150 entry: 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 1167 declare <8 x i16> @llvm.mips.ldi.h(i32) 1168 declare <8 x i16> @llvm.mips.addvi.h(<8 x i16>, i32) 1169 declare <8 x i16> @llvm.mips.bclri.h(<8 x i16>, i32) 1170 declare <8 x i16> @llvm.mips.binsli.h(<8 x i16>, <8 x i16>, i32) 1171 declare <8 x i16> @llvm.mips.binsri.h(<8 x i16>, <8 x i16>, i32) 1172 declare <8 x i16> @llvm.mips.bnegi.h(<8 x i16>, i32) 1173 declare <8 x i16> @llvm.mips.bseti.h(<8 x i16>, i32) 1174 declare <8 x i16> @llvm.mips.clei.s.h(<8 x i16>, i32) 1175 declare <8 x i16> @llvm.mips.clei.u.h(<8 x i16>, i32) 1176 declare <8 x i16> @llvm.mips.clti.s.h(<8 x i16>, i32) 1177 declare <8 x i16> @llvm.mips.clti.u.h(<8 x i16>, i32) 1178 declare <8 x i16> @llvm.mips.maxi.s.h(<8 x i16>, i32) 1179 declare <8 x i16> @llvm.mips.maxi.u.h(<8 x i16>, i32) 1180 declare <8 x i16> @llvm.mips.mini.s.h(<8 x i16>, i32) 1181 declare <8 x i16> @llvm.mips.mini.u.h(<8 x i16>, i32) 1182 declare <8 x i16> @llvm.mips.sldi.h(<8 x i16>, <8 x i16>, i32) 1183 declare <8 x i16> @llvm.mips.slli.h(<8 x i16>, i32) 1184 declare <8 x i16> @llvm.mips.splati.h(<8 x i16>, i32) 1185 declare <8 x i16> @llvm.mips.srai.h(<8 x i16>, i32) 1186 declare <8 x i16> @llvm.mips.srari.h(<8 x i16>, i32) 1187 declare <8 x i16> @llvm.mips.srli.h(<8 x i16>, i32) 1188 declare <8 x i16> @llvm.mips.srlri.h(<8 x i16>, i32) 1189 declare <4 x i32> @llvm.mips.addvi.w(<4 x i32>, i32) 1190 declare <4 x i32> @llvm.mips.bclri.w(<4 x i32>, i32) 1191 declare <4 x i32> @llvm.mips.binsli.w(<4 x i32>, <4 x i32>, i32) 1192 declare <4 x i32> @llvm.mips.binsri.w(<4 x i32>, <4 x i32>, i32) 1193 declare <4 x i32> @llvm.mips.bnegi.w(<4 x i32>, i32) 1194 declare <4 x i32> @llvm.mips.bseti.w(<4 x i32>, i32) 1195 declare <4 x i32> @llvm.mips.ldi.w(i32) 1196 declare <4 x i32> @llvm.mips.clei.s.w(<4 x i32>, i32) 1197 declare <4 x i32> @llvm.mips.clei.u.w(<4 x i32>, i32) 1198 declare <4 x i32> @llvm.mips.clti.s.w(<4 x i32>, i32) 1199 declare <4 x i32> @llvm.mips.clti.u.w(<4 x i32>, i32) 1200 declare <4 x i32> @llvm.mips.maxi.s.w(<4 x i32>, i32) 1201 declare <4 x i32> @llvm.mips.maxi.u.w(<4 x i32>, i32) 1202 declare <4 x i32> @llvm.mips.mini.s.w(<4 x i32>, i32) 1203 declare <4 x i32> @llvm.mips.mini.u.w(<4 x i32>, i32) 1204 declare <4 x i32> @llvm.mips.sldi.w(<4 x i32>, <4 x i32>, i32) 1205 declare <4 x i32> @llvm.mips.slli.w(<4 x i32>, i32) 1206 declare <4 x i32> @llvm.mips.splati.w(<4 x i32>, i32) 1207 declare <4 x i32> @llvm.mips.srai.w(<4 x i32>, i32) 1208 declare <4 x i32> @llvm.mips.srari.w(<4 x i32>, i32) 1209 declare <4 x i32> @llvm.mips.srli.w(<4 x i32>, i32) 1210 declare <4 x i32> @llvm.mips.srlri.w(<4 x i32>, i32) 1211 declare <2 x i64> @llvm.mips.ldi.d(i32) 1212 declare <2 x i64> @llvm.mips.addvi.d(<2 x i64>, i32) 1213 declare <2 x i64> @llvm.mips.bclri.d(<2 x i64>, i32) 1214 declare <2 x i64> @llvm.mips.binsli.d(<2 x i64>, <2 x i64>, i32) 1215 declare <2 x i64> @llvm.mips.binsri.d(<2 x i64>, <2 x i64>, i32) 1216 declare <2 x i64> @llvm.mips.bnegi.d(<2 x i64>, i32) 1217 declare <2 x i64> @llvm.mips.bseti.d(<2 x i64>, i32) 1218 declare <2 x i64> @llvm.mips.clei.s.d(<2 x i64>, i32) 1219 declare <2 x i64> @llvm.mips.clei.u.d(<2 x i64>, i32) 1220 declare <2 x i64> @llvm.mips.clti.s.d(<2 x i64>, i32) 1221 declare <2 x i64> @llvm.mips.clti.u.d(<2 x i64>, i32) 1222 declare <2 x i64> @llvm.mips.maxi.s.d(<2 x i64>, i32) 1223 declare <2 x i64> @llvm.mips.maxi.u.d(<2 x i64>, i32) 1224 declare <2 x i64> @llvm.mips.mini.s.d(<2 x i64>, i32) 1225 declare <2 x i64> @llvm.mips.mini.u.d(<2 x i64>, i32) 1226 declare <2 x i64> @llvm.mips.sldi.d(<2 x i64>, <2 x i64>, i32) 1227 declare <2 x i64> @llvm.mips.slli.d(<2 x i64>, i32) 1228 declare <2 x i64> @llvm.mips.splati.d(<2 x i64>, i32) 1229 declare <2 x i64> @llvm.mips.srai.d(<2 x i64>, i32) 1230 declare <2 x i64> @llvm.mips.srari.d(<2 x i64>, i32) 1231 declare <2 x i64> @llvm.mips.srli.d(<2 x i64>, i32) 1232 declare <2 x i64> @llvm.mips.srlri.d(<2 x i64>, i32) 1233 declare <16 x i8> @llvm.mips.ldi.b(i32) 1234 declare <16 x i8> @llvm.mips.addvi.b(<16 x i8>, i32) 1235 declare <16 x i8> @llvm.mips.andi.b(<16 x i8>, i32) 1236 declare <16 x i8> @llvm.mips.bclri.b(<16 x i8>, i32) 1237 declare <16 x i8> @llvm.mips.binsli.b(<16 x i8>, <16 x i8>, i32) 1238 declare <16 x i8> @llvm.mips.binsri.b(<16 x i8>, <16 x i8>, i32) 1239 declare <16 x i8> @llvm.mips.bmnzi.b(<16 x i8>, <16 x i8>, i32) 1240 declare <16 x i8> @llvm.mips.bnegi.b(<16 x i8>, i32) 1241 declare <16 x i8> @llvm.mips.bseli.b(<16 x i8>, <16 x i8>, i32) 1242 declare <16 x i8> @llvm.mips.bseti.b(<16 x i8>, i32) 1243 declare <16 x i8> @llvm.mips.clei.s.b(<16 x i8>, i32) 1244 declare <16 x i8> @llvm.mips.clei.u.b(<16 x i8>, i32) 1245 declare <16 x i8> @llvm.mips.clti.s.b(<16 x i8>, i32) 1246 declare <16 x i8> @llvm.mips.clti.u.b(<16 x i8>, i32) 1247 declare <16 x i8> @llvm.mips.maxi.s.b(<16 x i8>, i32) 1248 declare <16 x i8> @llvm.mips.maxi.u.b(<16 x i8>, i32) 1249 declare <16 x i8> @llvm.mips.mini.s.b(<16 x i8>, i32) 1250 declare <16 x i8> @llvm.mips.mini.u.b(<16 x i8>, i32) 1251 declare <16 x i8> @llvm.mips.nori.b(<16 x i8>, i32) 1252 declare <16 x i8> @llvm.mips.ori.b(<16 x i8>, i32) 1253 declare <16 x i8> @llvm.mips.sldi.b(<16 x i8>, <16 x i8>, i32) 1254 declare <16 x i8> @llvm.mips.slli.b(<16 x i8>, i32) 1255 declare <16 x i8> @llvm.mips.splati.b(<16 x i8>, i32) 1256 declare <16 x i8> @llvm.mips.srai.b(<16 x i8>, i32) 1257 declare <16 x i8> @llvm.mips.srari.b(<16 x i8>, i32) 1258 declare <16 x i8> @llvm.mips.srli.b(<16 x i8>, i32) 1259 declare <16 x i8> @llvm.mips.srlri.b(<16 x i8>, i32) 1260 declare i32 @llvm.mips.copy.s.h(<8 x i16>, i32) 1261 declare i32 @llvm.mips.copy.u.h(<8 x i16>, i32) 1262 declare i32 @llvm.mips.copy.s.w(<4 x i32>, i32) 1263 declare i32 @llvm.mips.copy.u.w(<4 x i32>, i32) 1264 declare i64 @llvm.mips.copy.s.d(<2 x i64>, i32) 1265 declare i64 @llvm.mips.copy.u.d(<2 x i64>, i32) 1266 declare i32 @llvm.mips.copy.s.b(<16 x i8>, i32) 1267 declare i32 @llvm.mips.copy.u.b(<16 x i8>, i32) 1268 declare <16 x i8> @llvm.mips.bmzi.b(<16 x i8>, <16 x i8>, i32) 1269 declare <16 x i8> @llvm.mips.ld.b(i8*, i32) 1270 declare <8 x i16> @llvm.mips.ld.h(i8*, i32) 1271 declare <4 x i32> @llvm.mips.ld.w(i8*, i32) 1272 declare <2 x i64> @llvm.mips.ld.d(i8*, i32) 1273 declare void @llvm.mips.st.b(<16 x i8>, i8*, i32) 1274 declare void @llvm.mips.st.h(<8 x i16>, i8*, i32) 1275 declare void @llvm.mips.st.w(<4 x i32>, i8*, i32) 1276 declare void @llvm.mips.st.d(<2 x i64>, i8*, i32) 1277