1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \ 3 ; RUN: -ppc-asm-full-reg-names -verify-machineinstrs \ 4 ; RUN: -enable-ppc-quad-precision < %s | FileCheck %s 5 ; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unknown-unknown -ppc-vsr-nums-as-vr \ 6 ; RUN: -ppc-asm-full-reg-names -verify-machineinstrs \ 7 ; RUN: -enable-ppc-quad-precision < %s | FileCheck %s -check-prefix=CHECK-BE 8 9 ; Vector extract DWord and convert to quad precision. 10 11 @sdwVecMem = global <2 x i64> <i64 88, i64 99>, align 16 12 @udwVecMem = global <2 x i64> <i64 88, i64 99>, align 16 13 14 ; Function Attrs: norecurse nounwind 15 define void @sdwVecConv2qp(fp128* nocapture %a, <2 x i64> %b) { 16 ; CHECK-LABEL: sdwVecConv2qp: 17 ; CHECK: # %bb.0: # %entry 18 ; CHECK-NEXT: xxspltd v2, v2, 1 19 ; CHECK-NEXT: xscvsdqp v2, v2 20 ; CHECK-NEXT: stxv v2, 0(r3) 21 ; CHECK-NEXT: blr 22 23 ; CHECK-BE-LABEL: sdwVecConv2qp: 24 ; CHECK-BE: xscvsdqp v2, v2 25 ; CHECK-BE-NEXT: stxv v2, 0(r3) 26 ; CHECK-BE-NEXT: blr 27 entry: 28 %vecext = extractelement <2 x i64> %b, i32 0 29 %conv = sitofp i64 %vecext to fp128 30 store fp128 %conv, fp128* %a, align 16 31 ret void 32 } 33 34 ; Function Attrs: norecurse nounwind 35 define void @sdwVecConv2qp1(fp128* nocapture %a, <2 x i64> %b) { 36 ; CHECK-LABEL: sdwVecConv2qp1: 37 ; CHECK: # %bb.0: # %entry 38 ; CHECK-NEXT: xscvsdqp v2, v2 39 ; CHECK-NEXT: stxv v2, 0(r3) 40 ; CHECK-NEXT: blr 41 42 ; CHECK-BE-LABEL: sdwVecConv2qp1: 43 ; CHECK-BE: # %bb.0: # %entry 44 ; CHECK-BE-NEXT: xxspltd v2, v2, 1 45 ; CHECK-BE-NEXT: xscvsdqp v2, v2 46 ; CHECK-BE-NEXT: stxv v2, 0(r3) 47 ; CHECK-BE-NEXT: blr 48 entry: 49 %vecext = extractelement <2 x i64> %b, i32 1 50 %conv = sitofp i64 %vecext to fp128 51 store fp128 %conv, fp128* %a, align 16 52 ret void 53 } 54 55 ; Function Attrs: norecurse nounwind 56 define void @sdwVecConv2qp_02(fp128* nocapture %a) { 57 ; CHECK-LABEL: sdwVecConv2qp_02: 58 ; CHECK: # %bb.0: # %entry 59 ; CHECK-NEXT: addis r4, r2, .LC0@toc@ha 60 ; CHECK-NEXT: ld r4, .LC0@toc@l(r4) 61 ; CHECK-NEXT: lxsd v2, 0(r4) 62 ; CHECK-NEXT: xscvsdqp v2, v2 63 ; CHECK-NEXT: stxv v2, 0(r3) 64 ; CHECK-NEXT: blr 65 entry: 66 %0 = load <2 x i64>, <2 x i64>* @sdwVecMem, align 16 67 %vecext = extractelement <2 x i64> %0, i32 0 68 %conv = sitofp i64 %vecext to fp128 69 store fp128 %conv, fp128* %a, align 16 70 ret void 71 } 72 73 ; Function Attrs: norecurse nounwind 74 define void @sdwVecConv2qp1_03(fp128* nocapture %a, <2 x i64>* nocapture readonly %b) { 75 ; CHECK-LABEL: sdwVecConv2qp1_03: 76 ; CHECK: # %bb.0: # %entry 77 ; CHECK-NEXT: lxsd v2, 8(r4) 78 ; CHECK-NEXT: xscvsdqp v2, v2 79 ; CHECK-NEXT: stxv v2, 0(r3) 80 ; CHECK-NEXT: blr 81 entry: 82 %0 = load <2 x i64>, <2 x i64>* %b, align 16 83 %vecext = extractelement <2 x i64> %0, i32 1 84 %conv = sitofp i64 %vecext to fp128 85 store fp128 %conv, fp128* %a, align 16 86 ret void 87 } 88 89 ; Function Attrs: norecurse nounwind 90 define void @udwVecConv2qp(fp128* nocapture %a, <2 x i64> %b) { 91 ; CHECK-LABEL: udwVecConv2qp: 92 ; CHECK: # %bb.0: # %entry 93 ; CHECK-NEXT: xxspltd v2, v2, 1 94 ; CHECK-NEXT: xscvudqp v2, v2 95 ; CHECK-NEXT: stxv v2, 0(r3) 96 ; CHECK-NEXT: blr 97 98 ; CHECK-BE-LABEL: udwVecConv2qp: 99 ; CHECK-BE: # %bb.0: # %entry 100 ; CHECK-BE-NEXT: xscvudqp v2, v2 101 ; CHECK-BE-NEXT: stxv v2, 0(r3) 102 ; CHECK-BE-NEXT: blr 103 entry: 104 %vecext = extractelement <2 x i64> %b, i32 0 105 %conv = uitofp i64 %vecext to fp128 106 store fp128 %conv, fp128* %a, align 16 107 ret void 108 } 109 110 ; Function Attrs: norecurse nounwind 111 define void @udwVecConv2qp1(fp128* nocapture %a, <2 x i64> %b) { 112 ; CHECK-LABEL: udwVecConv2qp1: 113 ; CHECK: # %bb.0: # %entry 114 ; CHECK-NEXT: xscvudqp v2, v2 115 ; CHECK-NEXT: stxv v2, 0(r3) 116 ; CHECK-NEXT: blr 117 118 ; CHECK-BE-LABEL: udwVecConv2qp1: 119 ; CHECK-BE: # %bb.0: # %entry 120 ; CHECK-BE-NEXT: xxspltd v2, v2, 1 121 ; CHECK-BE-NEXT: xscvudqp v2, v2 122 ; CHECK-BE-NEXT: stxv v2, 0(r3) 123 ; CHECK-BE-NEXT: blr 124 entry: 125 %vecext = extractelement <2 x i64> %b, i32 1 126 %conv = uitofp i64 %vecext to fp128 127 store fp128 %conv, fp128* %a, align 16 128 ret void 129 } 130 131 ; Function Attrs: norecurse nounwind 132 define void @udwVecConv2qp1_02(fp128* nocapture %a) { 133 ; CHECK-LABEL: udwVecConv2qp1_02: 134 ; CHECK: # %bb.0: # %entry 135 ; CHECK-NEXT: addis r4, r2, .LC1@toc@ha 136 ; CHECK-NEXT: ld r4, .LC1@toc@l(r4) 137 ; CHECK-NEXT: lxsd v2, 8(r4) 138 ; CHECK-NEXT: xscvudqp v2, v2 139 ; CHECK-NEXT: stxv v2, 0(r3) 140 ; CHECK-NEXT: blr 141 entry: 142 %0 = load <2 x i64>, <2 x i64>* @udwVecMem, align 16 143 %vecext = extractelement <2 x i64> %0, i32 1 144 %conv = uitofp i64 %vecext to fp128 145 store fp128 %conv, fp128* %a, align 16 146 ret void 147 } 148 149 ; Function Attrs: norecurse nounwind 150 define void @udwVecConv2qp_03(fp128* nocapture %a, <2 x i64>* nocapture readonly %b) { 151 ; CHECK-LABEL: udwVecConv2qp_03: 152 ; CHECK: # %bb.0: # %entry 153 ; CHECK-NEXT: lxsd v2, 0(r4) 154 ; CHECK-NEXT: xscvudqp v2, v2 155 ; CHECK-NEXT: stxv v2, 0(r3) 156 ; CHECK-NEXT: blr 157 entry: 158 %0 = load <2 x i64>, <2 x i64>* %b, align 16 159 %vecext = extractelement <2 x i64> %0, i32 0 160 %conv = uitofp i64 %vecext to fp128 161 store fp128 %conv, fp128* %a, align 16 162 ret void 163 } 164 165 ; Vector extract Word and convert to quad precision. 166 167 ; Function Attrs: norecurse nounwind 168 define void @swVecConv2qp(fp128* nocapture %a, <4 x i32> %b) { 169 ; CHECK-LABEL: swVecConv2qp: 170 ; CHECK: # %bb.0: # %entry 171 ; CHECK-NEXT: vspltw v2, v2, 3 172 ; CHECK-NEXT: vextsw2d v2, v2 173 ; CHECK-NEXT: xscvsdqp v2, v2 174 ; CHECK-NEXT: stxv v2, 0(r3) 175 ; CHECK-NEXT: blr 176 177 ; CHECK-BE-LABEL: swVecConv2qp: 178 ; CHECK-BE: vspltw v2, v2, 0 179 ; CHECK-BE-NEXT: vextsw2d v2, v2 180 ; CHECK-BE-NEXT: xscvsdqp v2, v2 181 ; CHECK-BE-NEXT: stxv v2, 0(r3) 182 ; CHECK-BE-NEXT: blr 183 entry: 184 %vecext = extractelement <4 x i32> %b, i32 0 185 %conv = sitofp i32 %vecext to fp128 186 store fp128 %conv, fp128* %a, align 16 187 ret void 188 } 189 190 ; Function Attrs: norecurse nounwind 191 define void @swVecConv2qp1(fp128* nocapture %a, <4 x i32> %b) { 192 ; CHECK-LABEL: swVecConv2qp1: 193 ; CHECK: # %bb.0: # %entry 194 ; CHECK-NEXT: vspltw v2, v2, 2 195 ; CHECK-NEXT: vextsw2d v2, v2 196 ; CHECK-NEXT: xscvsdqp v2, v2 197 ; CHECK-NEXT: stxv v2, 0(r3) 198 ; CHECK-NEXT: blr 199 200 ; CHECK-BE-LABEL: swVecConv2qp1: 201 ; CHECK-BE: vextsw2d v2, v2 202 ; CHECK-BE-NEXT: xscvsdqp v2, v2 203 ; CHECK-BE-NEXT: stxv v2, 0(r3) 204 ; CHECK-BE-NEXT: blr 205 entry: 206 %vecext = extractelement <4 x i32> %b, i32 1 207 %conv = sitofp i32 %vecext to fp128 208 store fp128 %conv, fp128* %a, align 16 209 ret void 210 } 211 212 ; Function Attrs: norecurse nounwind 213 define void @swVecConv2qp2(fp128* nocapture %a, <4 x i32> %b) { 214 ; CHECK-LABEL: swVecConv2qp2: 215 ; CHECK: # %bb.0: # %entry 216 ; CHECK-NEXT: vextsw2d v2, v2 217 ; CHECK-NEXT: xscvsdqp v2, v2 218 ; CHECK-NEXT: stxv v2, 0(r3) 219 ; CHECK-NEXT: blr 220 221 ; CHECK-BE-LABEL: swVecConv2qp2: 222 ; CHECK-BE: vspltw v2, v2, 2 223 ; CHECK-BE-NEXT: vextsw2d v2, v2 224 ; CHECK-BE-NEXT: xscvsdqp v2, v2 225 ; CHECK-BE-NEXT: stxv v2, 0(r3) 226 ; CHECK-BE-NEXT: blr 227 entry: 228 %vecext = extractelement <4 x i32> %b, i32 2 229 %conv = sitofp i32 %vecext to fp128 230 store fp128 %conv, fp128* %a, align 16 231 ret void 232 } 233 234 ; Function Attrs: norecurse nounwind 235 define void @swVecConv2qp3(fp128* nocapture %a, <4 x i32> %b) { 236 ; CHECK-LABEL: swVecConv2qp3: 237 ; CHECK: # %bb.0: # %entry 238 ; CHECK-NEXT: vspltw v2, v2, 0 239 ; CHECK-NEXT: vextsw2d v2, v2 240 ; CHECK-NEXT: xscvsdqp v2, v2 241 ; CHECK-NEXT: stxv v2, 0(r3) 242 ; CHECK-NEXT: blr 243 244 ; CHECK-BE-LABEL: swVecConv2qp3: 245 ; CHECK-BE: vspltw v2, v2, 3 246 ; CHECK-BE-NEXT: vextsw2d v2, v2 247 ; CHECK-BE-NEXT: xscvsdqp v2, v2 248 ; CHECK-BE-NEXT: stxv v2, 0(r3) 249 ; CHECK-BE-NEXT: blr 250 entry: 251 %vecext = extractelement <4 x i32> %b, i32 3 252 %conv = sitofp i32 %vecext to fp128 253 store fp128 %conv, fp128* %a, align 16 254 ret void 255 } 256 257 ; Function Attrs: norecurse nounwind 258 define void @uwVecConv2qp(fp128* nocapture %a, <4 x i32> %b) { 259 ; CHECK-LABEL: uwVecConv2qp: 260 ; CHECK: # %bb.0: # %entry 261 ; CHECK-NEXT: xxextractuw v2, v2, 12 262 ; CHECK-NEXT: xscvudqp v2, v2 263 ; CHECK-NEXT: stxv v2, 0(r3) 264 ; CHECK-NEXT: blr 265 266 ; CHECK-BE-LABEL: uwVecConv2qp: 267 ; CHECK-BE: xxextractuw v2, v2, 0 268 ; CHECK-BE-NEXT: xscvudqp v2, v2 269 ; CHECK-BE-NEXT: stxv v2, 0(r3) 270 ; CHECK-BE-NEXT: blr 271 entry: 272 %vecext = extractelement <4 x i32> %b, i32 0 273 %conv = uitofp i32 %vecext to fp128 274 store fp128 %conv, fp128* %a, align 16 275 ret void 276 } 277 278 ; Function Attrs: norecurse nounwind 279 define void @uwVecConv2qp1(fp128* nocapture %a, <4 x i32> %b) { 280 ; CHECK-LABEL: uwVecConv2qp1: 281 ; CHECK: # %bb.0: # %entry 282 ; CHECK-NEXT: xxextractuw v2, v2, 8 283 ; CHECK-NEXT: xscvudqp v2, v2 284 ; CHECK-NEXT: stxv v2, 0(r3) 285 ; CHECK-NEXT: blr 286 287 ; CHECK-BE-LABEL: uwVecConv2qp1: 288 ; CHECK-BE: xxextractuw v2, v2, 4 289 ; CHECK-BE-NEXT: xscvudqp v2, v2 290 ; CHECK-BE-NEXT: stxv v2, 0(r3) 291 ; CHECK-BE-NEXT: blr 292 entry: 293 %vecext = extractelement <4 x i32> %b, i32 1 294 %conv = uitofp i32 %vecext to fp128 295 store fp128 %conv, fp128* %a, align 16 296 ret void 297 } 298 299 ; Function Attrs: norecurse nounwind 300 define void @uwVecConv2qp2(fp128* nocapture %a, <4 x i32> %b) { 301 ; CHECK-LABEL: uwVecConv2qp2: 302 ; CHECK: # %bb.0: # %entry 303 ; CHECK-NEXT: xxextractuw v2, v2, 4 304 ; CHECK-NEXT: xscvudqp v2, v2 305 ; CHECK-NEXT: stxv v2, 0(r3) 306 ; CHECK-NEXT: blr 307 308 ; CHECK-BE-LABEL: uwVecConv2qp2: 309 ; CHECK-BE: xxextractuw v2, v2, 8 310 ; CHECK-BE-NEXT: xscvudqp v2, v2 311 ; CHECK-BE-NEXT: stxv v2, 0(r3) 312 ; CHECK-BE-NEXT: blr 313 entry: 314 %vecext = extractelement <4 x i32> %b, i32 2 315 %conv = uitofp i32 %vecext to fp128 316 store fp128 %conv, fp128* %a, align 16 317 ret void 318 } 319 320 ; Function Attrs: norecurse nounwind 321 define void @uwVecConv2qp3(fp128* nocapture %a, <4 x i32> %b) { 322 ; CHECK-LABEL: uwVecConv2qp3: 323 ; CHECK: # %bb.0: # %entry 324 ; CHECK-NEXT: xxextractuw v2, v2, 0 325 ; CHECK-NEXT: xscvudqp v2, v2 326 ; CHECK-NEXT: stxv v2, 0(r3) 327 ; CHECK-NEXT: blr 328 329 ; CHECK-BE-LABEL: uwVecConv2qp3: 330 ; CHECK-BE: xxextractuw v2, v2, 12 331 ; CHECK-BE-NEXT: xscvudqp v2, v2 332 ; CHECK-BE-NEXT: stxv v2, 0(r3) 333 ; CHECK-BE-NEXT: blr 334 entry: 335 %vecext = extractelement <4 x i32> %b, i32 3 336 %conv = uitofp i32 %vecext to fp128 337 store fp128 %conv, fp128* %a, align 16 338 ret void 339 } 340 341 ; Vector extract HWord and convert to quad precision. 342 343 ; Function Attrs: norecurse nounwind 344 define void @shwVecConv2qp(fp128* nocapture %a, <8 x i16> %b) { 345 ; CHECK-LABEL: shwVecConv2qp: 346 ; CHECK: # %bb.0: # %entry 347 ; CHECK-NEXT: vextractuh v2, v2, 14 348 ; CHECK-NEXT: vextsh2d v2, v2 349 ; CHECK-NEXT: xscvsdqp v2, v2 350 ; CHECK-NEXT: stxv v2, 0(r3) 351 ; CHECK-NEXT: blr 352 ; 353 ; CHECK-BE-LABEL: shwVecConv2qp: 354 ; CHECK-BE: # %bb.0: # %entry 355 ; CHECK-BE-NEXT: vextractuh v2, v2, 0 356 ; CHECK-BE-NEXT: vextsh2d v2, v2 357 ; CHECK-BE-NEXT: xscvsdqp v2, v2 358 ; CHECK-BE-NEXT: stxv v2, 0(r3) 359 ; CHECK-BE-NEXT: blr 360 entry: 361 %vecext = extractelement <8 x i16> %b, i32 0 362 %conv = sitofp i16 %vecext to fp128 363 store fp128 %conv, fp128* %a, align 16 364 ret void 365 } 366 367 ; Function Attrs: norecurse nounwind 368 define void @shwVecConv2qp1(fp128* nocapture %a, <8 x i16> %b) { 369 ; CHECK-LABEL: shwVecConv2qp1: 370 ; CHECK: # %bb.0: # %entry 371 ; CHECK-NEXT: vextractuh v2, v2, 12 372 ; CHECK-NEXT: vextsh2d v2, v2 373 ; CHECK-NEXT: xscvsdqp v2, v2 374 ; CHECK-NEXT: stxv v2, 0(r3) 375 ; CHECK-NEXT: blr 376 ; 377 ; CHECK-BE-LABEL: shwVecConv2qp1: 378 ; CHECK-BE: # %bb.0: # %entry 379 ; CHECK-BE-NEXT: vextractuh v2, v2, 2 380 ; CHECK-BE-NEXT: vextsh2d v2, v2 381 ; CHECK-BE-NEXT: xscvsdqp v2, v2 382 ; CHECK-BE-NEXT: stxv v2, 0(r3) 383 ; CHECK-BE-NEXT: blr 384 entry: 385 %vecext = extractelement <8 x i16> %b, i32 1 386 %conv = sitofp i16 %vecext to fp128 387 store fp128 %conv, fp128* %a, align 16 388 ret void 389 } 390 391 ; Function Attrs: norecurse nounwind 392 define void @shwVecConv2qp2(fp128* nocapture %a, <8 x i16> %b) { 393 ; CHECK-LABEL: shwVecConv2qp2: 394 ; CHECK: # %bb.0: # %entry 395 ; CHECK-NEXT: vextractuh v2, v2, 10 396 ; CHECK-NEXT: vextsh2d v2, v2 397 ; CHECK-NEXT: xscvsdqp v2, v2 398 ; CHECK-NEXT: stxv v2, 0(r3) 399 ; CHECK-NEXT: blr 400 ; 401 ; CHECK-BE-LABEL: shwVecConv2qp2: 402 ; CHECK-BE: # %bb.0: # %entry 403 ; CHECK-BE-NEXT: vextractuh v2, v2, 4 404 ; CHECK-BE-NEXT: vextsh2d v2, v2 405 ; CHECK-BE-NEXT: xscvsdqp v2, v2 406 ; CHECK-BE-NEXT: stxv v2, 0(r3) 407 ; CHECK-BE-NEXT: blr 408 entry: 409 %vecext = extractelement <8 x i16> %b, i32 2 410 %conv = sitofp i16 %vecext to fp128 411 store fp128 %conv, fp128* %a, align 16 412 ret void 413 } 414 415 ; Function Attrs: norecurse nounwind 416 define void @shwVecConv2qp3(fp128* nocapture %a, <8 x i16> %b) { 417 ; CHECK-LABEL: shwVecConv2qp3: 418 ; CHECK: # %bb.0: # %entry 419 ; CHECK-NEXT: vextractuh v2, v2, 8 420 ; CHECK-NEXT: vextsh2d v2, v2 421 ; CHECK-NEXT: xscvsdqp v2, v2 422 ; CHECK-NEXT: stxv v2, 0(r3) 423 ; CHECK-NEXT: blr 424 ; 425 ; CHECK-BE-LABEL: shwVecConv2qp3: 426 ; CHECK-BE: # %bb.0: # %entry 427 ; CHECK-BE-NEXT: vextractuh v2, v2, 6 428 ; CHECK-BE-NEXT: vextsh2d v2, v2 429 ; CHECK-BE-NEXT: xscvsdqp v2, v2 430 ; CHECK-BE-NEXT: stxv v2, 0(r3) 431 ; CHECK-BE-NEXT: blr 432 entry: 433 %vecext = extractelement <8 x i16> %b, i32 3 434 %conv = sitofp i16 %vecext to fp128 435 store fp128 %conv, fp128* %a, align 16 436 ret void 437 } 438 439 ; Function Attrs: norecurse nounwind 440 define void @shwVecConv2qp4(fp128* nocapture %a, <8 x i16> %b) { 441 ; CHECK-LABEL: shwVecConv2qp4: 442 ; CHECK: # %bb.0: # %entry 443 ; CHECK-NEXT: vextractuh v2, v2, 6 444 ; CHECK-NEXT: vextsh2d v2, v2 445 ; CHECK-NEXT: xscvsdqp v2, v2 446 ; CHECK-NEXT: stxv v2, 0(r3) 447 ; CHECK-NEXT: blr 448 ; 449 ; CHECK-BE-LABEL: shwVecConv2qp4: 450 ; CHECK-BE: # %bb.0: # %entry 451 ; CHECK-BE-NEXT: vextractuh v2, v2, 8 452 ; CHECK-BE-NEXT: vextsh2d v2, v2 453 ; CHECK-BE-NEXT: xscvsdqp v2, v2 454 ; CHECK-BE-NEXT: stxv v2, 0(r3) 455 ; CHECK-BE-NEXT: blr 456 entry: 457 %vecext = extractelement <8 x i16> %b, i32 4 458 %conv = sitofp i16 %vecext to fp128 459 store fp128 %conv, fp128* %a, align 16 460 ret void 461 } 462 463 ; Function Attrs: norecurse nounwind 464 define void @shwVecConv2qp5(fp128* nocapture %a, <8 x i16> %b) { 465 ; CHECK-LABEL: shwVecConv2qp5: 466 ; CHECK: # %bb.0: # %entry 467 ; CHECK-NEXT: vextractuh v2, v2, 4 468 ; CHECK-NEXT: vextsh2d v2, v2 469 ; CHECK-NEXT: xscvsdqp v2, v2 470 ; CHECK-NEXT: stxv v2, 0(r3) 471 ; CHECK-NEXT: blr 472 ; 473 ; CHECK-BE-LABEL: shwVecConv2qp5: 474 ; CHECK-BE: # %bb.0: # %entry 475 ; CHECK-BE-NEXT: vextractuh v2, v2, 10 476 ; CHECK-BE-NEXT: vextsh2d v2, v2 477 ; CHECK-BE-NEXT: xscvsdqp v2, v2 478 ; CHECK-BE-NEXT: stxv v2, 0(r3) 479 ; CHECK-BE-NEXT: blr 480 entry: 481 %vecext = extractelement <8 x i16> %b, i32 5 482 %conv = sitofp i16 %vecext to fp128 483 store fp128 %conv, fp128* %a, align 16 484 ret void 485 } 486 487 ; Function Attrs: norecurse nounwind 488 define void @shwVecConv2qp6(fp128* nocapture %a, <8 x i16> %b) { 489 ; CHECK-LABEL: shwVecConv2qp6: 490 ; CHECK: # %bb.0: # %entry 491 ; CHECK-NEXT: vextractuh v2, v2, 2 492 ; CHECK-NEXT: vextsh2d v2, v2 493 ; CHECK-NEXT: xscvsdqp v2, v2 494 ; CHECK-NEXT: stxv v2, 0(r3) 495 ; CHECK-NEXT: blr 496 ; 497 ; CHECK-BE-LABEL: shwVecConv2qp6: 498 ; CHECK-BE: # %bb.0: # %entry 499 ; CHECK-BE-NEXT: vextractuh v2, v2, 12 500 ; CHECK-BE-NEXT: vextsh2d v2, v2 501 ; CHECK-BE-NEXT: xscvsdqp v2, v2 502 ; CHECK-BE-NEXT: stxv v2, 0(r3) 503 ; CHECK-BE-NEXT: blr 504 entry: 505 %vecext = extractelement <8 x i16> %b, i32 6 506 %conv = sitofp i16 %vecext to fp128 507 store fp128 %conv, fp128* %a, align 16 508 ret void 509 } 510 511 ; Function Attrs: norecurse nounwind 512 define void @shwVecConv2qp7(fp128* nocapture %a, <8 x i16> %b) { 513 ; CHECK-LABEL: shwVecConv2qp7: 514 ; CHECK: # %bb.0: # %entry 515 ; CHECK-NEXT: vextractuh v2, v2, 0 516 ; CHECK-NEXT: vextsh2d v2, v2 517 ; CHECK-NEXT: xscvsdqp v2, v2 518 ; CHECK-NEXT: stxv v2, 0(r3) 519 ; CHECK-NEXT: blr 520 ; 521 ; CHECK-BE-LABEL: shwVecConv2qp7: 522 ; CHECK-BE: # %bb.0: # %entry 523 ; CHECK-BE-NEXT: vextractuh v2, v2, 14 524 ; CHECK-BE-NEXT: vextsh2d v2, v2 525 ; CHECK-BE-NEXT: xscvsdqp v2, v2 526 ; CHECK-BE-NEXT: stxv v2, 0(r3) 527 ; CHECK-BE-NEXT: blr 528 entry: 529 %vecext = extractelement <8 x i16> %b, i32 7 530 %conv = sitofp i16 %vecext to fp128 531 store fp128 %conv, fp128* %a, align 16 532 ret void 533 } 534 535 ; Function Attrs: norecurse nounwind 536 define void @uhwVecConv2qp(fp128* nocapture %a, <8 x i16> %b) { 537 ; CHECK-LABEL: uhwVecConv2qp: 538 ; CHECK: # %bb.0: # %entry 539 ; CHECK-NEXT: vextractuh v2, v2, 14 540 ; CHECK-NEXT: xscvudqp v2, v2 541 ; CHECK-NEXT: stxv v2, 0(r3) 542 ; CHECK-NEXT: blr 543 ; 544 ; CHECK-BE-LABEL: uhwVecConv2qp: 545 ; CHECK-BE: # %bb.0: # %entry 546 ; CHECK-BE-NEXT: vextractuh v2, v2, 0 547 ; CHECK-BE-NEXT: xscvudqp v2, v2 548 ; CHECK-BE-NEXT: stxv v2, 0(r3) 549 ; CHECK-BE-NEXT: blr 550 entry: 551 %vecext = extractelement <8 x i16> %b, i32 0 552 %conv = uitofp i16 %vecext to fp128 553 store fp128 %conv, fp128* %a, align 16 554 ret void 555 } 556 557 ; Function Attrs: norecurse nounwind 558 define void @uhwVecConv2qp1(fp128* nocapture %a, <8 x i16> %b) { 559 ; CHECK-LABEL: uhwVecConv2qp1: 560 ; CHECK: # %bb.0: # %entry 561 ; CHECK-NEXT: vextractuh v2, v2, 12 562 ; CHECK-NEXT: xscvudqp v2, v2 563 ; CHECK-NEXT: stxv v2, 0(r3) 564 ; CHECK-NEXT: blr 565 ; 566 ; CHECK-BE-LABEL: uhwVecConv2qp1: 567 ; CHECK-BE: # %bb.0: # %entry 568 ; CHECK-BE-NEXT: vextractuh v2, v2, 2 569 ; CHECK-BE-NEXT: xscvudqp v2, v2 570 ; CHECK-BE-NEXT: stxv v2, 0(r3) 571 ; CHECK-BE-NEXT: blr 572 entry: 573 %vecext = extractelement <8 x i16> %b, i32 1 574 %conv = uitofp i16 %vecext to fp128 575 store fp128 %conv, fp128* %a, align 16 576 ret void 577 } 578 579 ; Function Attrs: norecurse nounwind 580 define void @uhwVecConv2qp2(fp128* nocapture %a, <8 x i16> %b) { 581 ; CHECK-LABEL: uhwVecConv2qp2: 582 ; CHECK: # %bb.0: # %entry 583 ; CHECK-NEXT: vextractuh v2, v2, 10 584 ; CHECK-NEXT: xscvudqp v2, v2 585 ; CHECK-NEXT: stxv v2, 0(r3) 586 ; CHECK-NEXT: blr 587 ; 588 ; CHECK-BE-LABEL: uhwVecConv2qp2: 589 ; CHECK-BE: # %bb.0: # %entry 590 ; CHECK-BE-NEXT: vextractuh v2, v2, 4 591 ; CHECK-BE-NEXT: xscvudqp v2, v2 592 ; CHECK-BE-NEXT: stxv v2, 0(r3) 593 ; CHECK-BE-NEXT: blr 594 entry: 595 %vecext = extractelement <8 x i16> %b, i32 2 596 %conv = uitofp i16 %vecext to fp128 597 store fp128 %conv, fp128* %a, align 16 598 ret void 599 } 600 601 ; Function Attrs: norecurse nounwind 602 define void @uhwVecConv2qp3(fp128* nocapture %a, <8 x i16> %b) { 603 ; CHECK-LABEL: uhwVecConv2qp3: 604 ; CHECK: # %bb.0: # %entry 605 ; CHECK-NEXT: vextractuh v2, v2, 8 606 ; CHECK-NEXT: xscvudqp v2, v2 607 ; CHECK-NEXT: stxv v2, 0(r3) 608 ; CHECK-NEXT: blr 609 ; 610 ; CHECK-BE-LABEL: uhwVecConv2qp3: 611 ; CHECK-BE: # %bb.0: # %entry 612 ; CHECK-BE-NEXT: vextractuh v2, v2, 6 613 ; CHECK-BE-NEXT: xscvudqp v2, v2 614 ; CHECK-BE-NEXT: stxv v2, 0(r3) 615 ; CHECK-BE-NEXT: blr 616 entry: 617 %vecext = extractelement <8 x i16> %b, i32 3 618 %conv = uitofp i16 %vecext to fp128 619 store fp128 %conv, fp128* %a, align 16 620 ret void 621 } 622 623 ; Function Attrs: norecurse nounwind 624 define void @uhwVecConv2qp4(fp128* nocapture %a, <8 x i16> %b) { 625 ; CHECK-LABEL: uhwVecConv2qp4: 626 ; CHECK: # %bb.0: # %entry 627 ; CHECK-NEXT: vextractuh v2, v2, 6 628 ; CHECK-NEXT: xscvudqp v2, v2 629 ; CHECK-NEXT: stxv v2, 0(r3) 630 ; CHECK-NEXT: blr 631 ; 632 ; CHECK-BE-LABEL: uhwVecConv2qp4: 633 ; CHECK-BE: # %bb.0: # %entry 634 ; CHECK-BE-NEXT: vextractuh v2, v2, 8 635 ; CHECK-BE-NEXT: xscvudqp v2, v2 636 ; CHECK-BE-NEXT: stxv v2, 0(r3) 637 ; CHECK-BE-NEXT: blr 638 entry: 639 %vecext = extractelement <8 x i16> %b, i32 4 640 %conv = uitofp i16 %vecext to fp128 641 store fp128 %conv, fp128* %a, align 16 642 ret void 643 } 644 645 ; Function Attrs: norecurse nounwind 646 define void @uhwVecConv2qp5(fp128* nocapture %a, <8 x i16> %b) { 647 ; CHECK-LABEL: uhwVecConv2qp5: 648 ; CHECK: # %bb.0: # %entry 649 ; CHECK-NEXT: vextractuh v2, v2, 4 650 ; CHECK-NEXT: xscvudqp v2, v2 651 ; CHECK-NEXT: stxv v2, 0(r3) 652 ; CHECK-NEXT: blr 653 ; 654 ; CHECK-BE-LABEL: uhwVecConv2qp5: 655 ; CHECK-BE: # %bb.0: # %entry 656 ; CHECK-BE-NEXT: vextractuh v2, v2, 10 657 ; CHECK-BE-NEXT: xscvudqp v2, v2 658 ; CHECK-BE-NEXT: stxv v2, 0(r3) 659 ; CHECK-BE-NEXT: blr 660 entry: 661 %vecext = extractelement <8 x i16> %b, i32 5 662 %conv = uitofp i16 %vecext to fp128 663 store fp128 %conv, fp128* %a, align 16 664 ret void 665 } 666 667 ; Function Attrs: norecurse nounwind 668 define void @uhwVecConv2qp6(fp128* nocapture %a, <8 x i16> %b) { 669 ; CHECK-LABEL: uhwVecConv2qp6: 670 ; CHECK: # %bb.0: # %entry 671 ; CHECK-NEXT: vextractuh v2, v2, 2 672 ; CHECK-NEXT: xscvudqp v2, v2 673 ; CHECK-NEXT: stxv v2, 0(r3) 674 ; CHECK-NEXT: blr 675 ; 676 ; CHECK-BE-LABEL: uhwVecConv2qp6: 677 ; CHECK-BE: # %bb.0: # %entry 678 ; CHECK-BE-NEXT: vextractuh v2, v2, 12 679 ; CHECK-BE-NEXT: xscvudqp v2, v2 680 ; CHECK-BE-NEXT: stxv v2, 0(r3) 681 ; CHECK-BE-NEXT: blr 682 entry: 683 %vecext = extractelement <8 x i16> %b, i32 6 684 %conv = uitofp i16 %vecext to fp128 685 store fp128 %conv, fp128* %a, align 16 686 ret void 687 } 688 689 ; Function Attrs: norecurse nounwind 690 define void @uhwVecConv2qp7(fp128* nocapture %a, <8 x i16> %b) { 691 ; CHECK-LABEL: uhwVecConv2qp7: 692 ; CHECK: # %bb.0: # %entry 693 ; CHECK-NEXT: vextractuh v2, v2, 0 694 ; CHECK-NEXT: xscvudqp v2, v2 695 ; CHECK-NEXT: stxv v2, 0(r3) 696 ; CHECK-NEXT: blr 697 ; 698 ; CHECK-BE-LABEL: uhwVecConv2qp7: 699 ; CHECK-BE: # %bb.0: # %entry 700 ; CHECK-BE-NEXT: vextractuh v2, v2, 14 701 ; CHECK-BE-NEXT: xscvudqp v2, v2 702 ; CHECK-BE-NEXT: stxv v2, 0(r3) 703 ; CHECK-BE-NEXT: blr 704 entry: 705 %vecext = extractelement <8 x i16> %b, i32 7 706 %conv = uitofp i16 %vecext to fp128 707 store fp128 %conv, fp128* %a, align 16 708 ret void 709 } 710 711 ; Vector extract Byte and convert to quad precision. 712 713 ; Function Attrs: norecurse nounwind 714 define void @sbVecConv2qp(fp128* nocapture %a, <16 x i8> %b) { 715 ; CHECK-LABEL: sbVecConv2qp: 716 ; CHECK: # %bb.0: # %entry 717 ; CHECK-NEXT: vextractub v2, v2, 15 718 ; CHECK-NEXT: vextsb2d v2, v2 719 ; CHECK-NEXT: xscvsdqp v2, v2 720 ; CHECK-NEXT: stxv v2, 0(r3) 721 ; CHECK-NEXT: blr 722 ; 723 ; CHECK-BE-LABEL: sbVecConv2qp: 724 ; CHECK-BE: # %bb.0: # %entry 725 ; CHECK-BE-NEXT: vextractub v2, v2, 0 726 ; CHECK-BE-NEXT: vextsb2d v2, v2 727 ; CHECK-BE-NEXT: xscvsdqp v2, v2 728 ; CHECK-BE-NEXT: stxv v2, 0(r3) 729 ; CHECK-BE-NEXT: blr 730 entry: 731 %vecext = extractelement <16 x i8> %b, i32 0 732 %conv = sitofp i8 %vecext to fp128 733 store fp128 %conv, fp128* %a, align 16 734 ret void 735 } 736 737 ; Function Attrs: norecurse nounwind 738 define void @sbVecConv2qp1(fp128* nocapture %a, <16 x i8> %b) { 739 ; CHECK-LABEL: sbVecConv2qp1: 740 ; CHECK: # %bb.0: # %entry 741 ; CHECK-NEXT: vextractub v2, v2, 14 742 ; CHECK-NEXT: vextsb2d v2, v2 743 ; CHECK-NEXT: xscvsdqp v2, v2 744 ; CHECK-NEXT: stxv v2, 0(r3) 745 ; CHECK-NEXT: blr 746 ; 747 ; CHECK-BE-LABEL: sbVecConv2qp1: 748 ; CHECK-BE: # %bb.0: # %entry 749 ; CHECK-BE-NEXT: vextractub v2, v2, 1 750 ; CHECK-BE-NEXT: vextsb2d v2, v2 751 ; CHECK-BE-NEXT: xscvsdqp v2, v2 752 ; CHECK-BE-NEXT: stxv v2, 0(r3) 753 ; CHECK-BE-NEXT: blr 754 entry: 755 %vecext = extractelement <16 x i8> %b, i32 1 756 %conv = sitofp i8 %vecext to fp128 757 store fp128 %conv, fp128* %a, align 16 758 ret void 759 } 760 761 ; Function Attrs: norecurse nounwind 762 define void @sbVecConv2qp2(fp128* nocapture %a, <16 x i8> %b) { 763 ; CHECK-LABEL: sbVecConv2qp2: 764 ; CHECK: # %bb.0: # %entry 765 ; CHECK-NEXT: vextractub v2, v2, 13 766 ; CHECK-NEXT: vextsb2d v2, v2 767 ; CHECK-NEXT: xscvsdqp v2, v2 768 ; CHECK-NEXT: stxv v2, 0(r3) 769 ; CHECK-NEXT: blr 770 ; 771 ; CHECK-BE-LABEL: sbVecConv2qp2: 772 ; CHECK-BE: # %bb.0: # %entry 773 ; CHECK-BE-NEXT: vextractub v2, v2, 2 774 ; CHECK-BE-NEXT: vextsb2d v2, v2 775 ; CHECK-BE-NEXT: xscvsdqp v2, v2 776 ; CHECK-BE-NEXT: stxv v2, 0(r3) 777 ; CHECK-BE-NEXT: blr 778 entry: 779 %vecext = extractelement <16 x i8> %b, i32 2 780 %conv = sitofp i8 %vecext to fp128 781 store fp128 %conv, fp128* %a, align 16 782 ret void 783 } 784 785 ; Function Attrs: norecurse nounwind 786 define void @sbVecConv2qp3(fp128* nocapture %a, <16 x i8> %b) { 787 ; CHECK-LABEL: sbVecConv2qp3: 788 ; CHECK: # %bb.0: # %entry 789 ; CHECK-NEXT: vextractub v2, v2, 12 790 ; CHECK-NEXT: vextsb2d v2, v2 791 ; CHECK-NEXT: xscvsdqp v2, v2 792 ; CHECK-NEXT: stxv v2, 0(r3) 793 ; CHECK-NEXT: blr 794 ; 795 ; CHECK-BE-LABEL: sbVecConv2qp3: 796 ; CHECK-BE: # %bb.0: # %entry 797 ; CHECK-BE-NEXT: vextractub v2, v2, 3 798 ; CHECK-BE-NEXT: vextsb2d v2, v2 799 ; CHECK-BE-NEXT: xscvsdqp v2, v2 800 ; CHECK-BE-NEXT: stxv v2, 0(r3) 801 ; CHECK-BE-NEXT: blr 802 entry: 803 %vecext = extractelement <16 x i8> %b, i32 3 804 %conv = sitofp i8 %vecext to fp128 805 store fp128 %conv, fp128* %a, align 16 806 ret void 807 } 808 809 ; Function Attrs: norecurse nounwind 810 define void @sbVecConv2qp4(fp128* nocapture %a, <16 x i8> %b) { 811 ; CHECK-LABEL: sbVecConv2qp4: 812 ; CHECK: # %bb.0: # %entry 813 ; CHECK-NEXT: vextractub v2, v2, 11 814 ; CHECK-NEXT: vextsb2d v2, v2 815 ; CHECK-NEXT: xscvsdqp v2, v2 816 ; CHECK-NEXT: stxv v2, 0(r3) 817 ; CHECK-NEXT: blr 818 ; 819 ; CHECK-BE-LABEL: sbVecConv2qp4: 820 ; CHECK-BE: # %bb.0: # %entry 821 ; CHECK-BE-NEXT: vextractub v2, v2, 4 822 ; CHECK-BE-NEXT: vextsb2d v2, v2 823 ; CHECK-BE-NEXT: xscvsdqp v2, v2 824 ; CHECK-BE-NEXT: stxv v2, 0(r3) 825 ; CHECK-BE-NEXT: blr 826 entry: 827 %vecext = extractelement <16 x i8> %b, i32 4 828 %conv = sitofp i8 %vecext to fp128 829 store fp128 %conv, fp128* %a, align 16 830 ret void 831 } 832 833 ; Function Attrs: norecurse nounwind 834 define void @sbVecConv2qp5(fp128* nocapture %a, <16 x i8> %b) { 835 ; CHECK-LABEL: sbVecConv2qp5: 836 ; CHECK: # %bb.0: # %entry 837 ; CHECK-NEXT: vextractub v2, v2, 10 838 ; CHECK-NEXT: vextsb2d v2, v2 839 ; CHECK-NEXT: xscvsdqp v2, v2 840 ; CHECK-NEXT: stxv v2, 0(r3) 841 ; CHECK-NEXT: blr 842 ; 843 ; CHECK-BE-LABEL: sbVecConv2qp5: 844 ; CHECK-BE: # %bb.0: # %entry 845 ; CHECK-BE-NEXT: vextractub v2, v2, 5 846 ; CHECK-BE-NEXT: vextsb2d v2, v2 847 ; CHECK-BE-NEXT: xscvsdqp v2, v2 848 ; CHECK-BE-NEXT: stxv v2, 0(r3) 849 ; CHECK-BE-NEXT: blr 850 entry: 851 %vecext = extractelement <16 x i8> %b, i32 5 852 %conv = sitofp i8 %vecext to fp128 853 store fp128 %conv, fp128* %a, align 16 854 ret void 855 } 856 857 ; Function Attrs: norecurse nounwind 858 define void @sbVecConv2qp6(fp128* nocapture %a, <16 x i8> %b) { 859 ; CHECK-LABEL: sbVecConv2qp6: 860 ; CHECK: # %bb.0: # %entry 861 ; CHECK-NEXT: vextractub v2, v2, 9 862 ; CHECK-NEXT: vextsb2d v2, v2 863 ; CHECK-NEXT: xscvsdqp v2, v2 864 ; CHECK-NEXT: stxv v2, 0(r3) 865 ; CHECK-NEXT: blr 866 ; 867 ; CHECK-BE-LABEL: sbVecConv2qp6: 868 ; CHECK-BE: # %bb.0: # %entry 869 ; CHECK-BE-NEXT: vextractub v2, v2, 6 870 ; CHECK-BE-NEXT: vextsb2d v2, v2 871 ; CHECK-BE-NEXT: xscvsdqp v2, v2 872 ; CHECK-BE-NEXT: stxv v2, 0(r3) 873 ; CHECK-BE-NEXT: blr 874 entry: 875 %vecext = extractelement <16 x i8> %b, i32 6 876 %conv = sitofp i8 %vecext to fp128 877 store fp128 %conv, fp128* %a, align 16 878 ret void 879 } 880 881 ; Function Attrs: norecurse nounwind 882 define void @sbVecConv2qp7(fp128* nocapture %a, <16 x i8> %b) { 883 ; CHECK-LABEL: sbVecConv2qp7: 884 ; CHECK: # %bb.0: # %entry 885 ; CHECK-NEXT: vextractub v2, v2, 8 886 ; CHECK-NEXT: vextsb2d v2, v2 887 ; CHECK-NEXT: xscvsdqp v2, v2 888 ; CHECK-NEXT: stxv v2, 0(r3) 889 ; CHECK-NEXT: blr 890 ; 891 ; CHECK-BE-LABEL: sbVecConv2qp7: 892 ; CHECK-BE: # %bb.0: # %entry 893 ; CHECK-BE-NEXT: vextractub v2, v2, 7 894 ; CHECK-BE-NEXT: vextsb2d v2, v2 895 ; CHECK-BE-NEXT: xscvsdqp v2, v2 896 ; CHECK-BE-NEXT: stxv v2, 0(r3) 897 ; CHECK-BE-NEXT: blr 898 entry: 899 %vecext = extractelement <16 x i8> %b, i32 7 900 %conv = sitofp i8 %vecext to fp128 901 store fp128 %conv, fp128* %a, align 16 902 ret void 903 } 904 905 ; Function Attrs: norecurse nounwind 906 define void @sbVecConv2qp8(fp128* nocapture %a, <16 x i8> %b) { 907 ; CHECK-LABEL: sbVecConv2qp8: 908 ; CHECK: # %bb.0: # %entry 909 ; CHECK-NEXT: vextractub v2, v2, 7 910 ; CHECK-NEXT: vextsb2d v2, v2 911 ; CHECK-NEXT: xscvsdqp v2, v2 912 ; CHECK-NEXT: stxv v2, 0(r3) 913 ; CHECK-NEXT: blr 914 ; 915 ; CHECK-BE-LABEL: sbVecConv2qp8: 916 ; CHECK-BE: # %bb.0: # %entry 917 ; CHECK-BE-NEXT: vextractub v2, v2, 8 918 ; CHECK-BE-NEXT: vextsb2d v2, v2 919 ; CHECK-BE-NEXT: xscvsdqp v2, v2 920 ; CHECK-BE-NEXT: stxv v2, 0(r3) 921 ; CHECK-BE-NEXT: blr 922 entry: 923 %vecext = extractelement <16 x i8> %b, i32 8 924 %conv = sitofp i8 %vecext to fp128 925 store fp128 %conv, fp128* %a, align 16 926 ret void 927 } 928 929 ; Function Attrs: norecurse nounwind 930 define void @sbVecConv2qp9(fp128* nocapture %a, <16 x i8> %b) { 931 ; CHECK-LABEL: sbVecConv2qp9: 932 ; CHECK: # %bb.0: # %entry 933 ; CHECK-NEXT: vextractub v2, v2, 6 934 ; CHECK-NEXT: vextsb2d v2, v2 935 ; CHECK-NEXT: xscvsdqp v2, v2 936 ; CHECK-NEXT: stxv v2, 0(r3) 937 ; CHECK-NEXT: blr 938 ; 939 ; CHECK-BE-LABEL: sbVecConv2qp9: 940 ; CHECK-BE: # %bb.0: # %entry 941 ; CHECK-BE-NEXT: vextractub v2, v2, 9 942 ; CHECK-BE-NEXT: vextsb2d v2, v2 943 ; CHECK-BE-NEXT: xscvsdqp v2, v2 944 ; CHECK-BE-NEXT: stxv v2, 0(r3) 945 ; CHECK-BE-NEXT: blr 946 entry: 947 %vecext = extractelement <16 x i8> %b, i32 9 948 %conv = sitofp i8 %vecext to fp128 949 store fp128 %conv, fp128* %a, align 16 950 ret void 951 } 952 953 ; Function Attrs: norecurse nounwind 954 define void @sbVecConv2qp10(fp128* nocapture %a, <16 x i8> %b) { 955 ; CHECK-LABEL: sbVecConv2qp10: 956 ; CHECK: # %bb.0: # %entry 957 ; CHECK-NEXT: vextractub v2, v2, 5 958 ; CHECK-NEXT: vextsb2d v2, v2 959 ; CHECK-NEXT: xscvsdqp v2, v2 960 ; CHECK-NEXT: stxv v2, 0(r3) 961 ; CHECK-NEXT: blr 962 ; 963 ; CHECK-BE-LABEL: sbVecConv2qp10: 964 ; CHECK-BE: # %bb.0: # %entry 965 ; CHECK-BE-NEXT: vextractub v2, v2, 10 966 ; CHECK-BE-NEXT: vextsb2d v2, v2 967 ; CHECK-BE-NEXT: xscvsdqp v2, v2 968 ; CHECK-BE-NEXT: stxv v2, 0(r3) 969 ; CHECK-BE-NEXT: blr 970 entry: 971 %vecext = extractelement <16 x i8> %b, i32 10 972 %conv = sitofp i8 %vecext to fp128 973 store fp128 %conv, fp128* %a, align 16 974 ret void 975 } 976 977 ; Function Attrs: norecurse nounwind 978 define void @sbVecConv2qp11(fp128* nocapture %a, <16 x i8> %b) { 979 ; CHECK-LABEL: sbVecConv2qp11: 980 ; CHECK: # %bb.0: # %entry 981 ; CHECK-NEXT: vextractub v2, v2, 4 982 ; CHECK-NEXT: vextsb2d v2, v2 983 ; CHECK-NEXT: xscvsdqp v2, v2 984 ; CHECK-NEXT: stxv v2, 0(r3) 985 ; CHECK-NEXT: blr 986 ; 987 ; CHECK-BE-LABEL: sbVecConv2qp11: 988 ; CHECK-BE: # %bb.0: # %entry 989 ; CHECK-BE-NEXT: vextractub v2, v2, 11 990 ; CHECK-BE-NEXT: vextsb2d v2, v2 991 ; CHECK-BE-NEXT: xscvsdqp v2, v2 992 ; CHECK-BE-NEXT: stxv v2, 0(r3) 993 ; CHECK-BE-NEXT: blr 994 entry: 995 %vecext = extractelement <16 x i8> %b, i32 11 996 %conv = sitofp i8 %vecext to fp128 997 store fp128 %conv, fp128* %a, align 16 998 ret void 999 } 1000 1001 ; Function Attrs: norecurse nounwind 1002 define void @sbVecConv2qp12(fp128* nocapture %a, <16 x i8> %b) { 1003 ; CHECK-LABEL: sbVecConv2qp12: 1004 ; CHECK: # %bb.0: # %entry 1005 ; CHECK-NEXT: vextractub v2, v2, 3 1006 ; CHECK-NEXT: vextsb2d v2, v2 1007 ; CHECK-NEXT: xscvsdqp v2, v2 1008 ; CHECK-NEXT: stxv v2, 0(r3) 1009 ; CHECK-NEXT: blr 1010 ; 1011 ; CHECK-BE-LABEL: sbVecConv2qp12: 1012 ; CHECK-BE: # %bb.0: # %entry 1013 ; CHECK-BE-NEXT: vextractub v2, v2, 12 1014 ; CHECK-BE-NEXT: vextsb2d v2, v2 1015 ; CHECK-BE-NEXT: xscvsdqp v2, v2 1016 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1017 ; CHECK-BE-NEXT: blr 1018 entry: 1019 %vecext = extractelement <16 x i8> %b, i32 12 1020 %conv = sitofp i8 %vecext to fp128 1021 store fp128 %conv, fp128* %a, align 16 1022 ret void 1023 } 1024 1025 ; Function Attrs: norecurse nounwind 1026 define void @sbVecConv2qp13(fp128* nocapture %a, <16 x i8> %b) { 1027 ; CHECK-LABEL: sbVecConv2qp13: 1028 ; CHECK: # %bb.0: # %entry 1029 ; CHECK-NEXT: vextractub v2, v2, 2 1030 ; CHECK-NEXT: vextsb2d v2, v2 1031 ; CHECK-NEXT: xscvsdqp v2, v2 1032 ; CHECK-NEXT: stxv v2, 0(r3) 1033 ; CHECK-NEXT: blr 1034 ; 1035 ; CHECK-BE-LABEL: sbVecConv2qp13: 1036 ; CHECK-BE: # %bb.0: # %entry 1037 ; CHECK-BE-NEXT: vextractub v2, v2, 13 1038 ; CHECK-BE-NEXT: vextsb2d v2, v2 1039 ; CHECK-BE-NEXT: xscvsdqp v2, v2 1040 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1041 ; CHECK-BE-NEXT: blr 1042 entry: 1043 %vecext = extractelement <16 x i8> %b, i32 13 1044 %conv = sitofp i8 %vecext to fp128 1045 store fp128 %conv, fp128* %a, align 16 1046 ret void 1047 } 1048 1049 ; Function Attrs: norecurse nounwind 1050 define void @sbVecConv2qp14(fp128* nocapture %a, <16 x i8> %b) { 1051 ; CHECK-LABEL: sbVecConv2qp14: 1052 ; CHECK: # %bb.0: # %entry 1053 ; CHECK-NEXT: vextractub v2, v2, 1 1054 ; CHECK-NEXT: vextsb2d v2, v2 1055 ; CHECK-NEXT: xscvsdqp v2, v2 1056 ; CHECK-NEXT: stxv v2, 0(r3) 1057 ; CHECK-NEXT: blr 1058 ; 1059 ; CHECK-BE-LABEL: sbVecConv2qp14: 1060 ; CHECK-BE: # %bb.0: # %entry 1061 ; CHECK-BE-NEXT: vextractub v2, v2, 14 1062 ; CHECK-BE-NEXT: vextsb2d v2, v2 1063 ; CHECK-BE-NEXT: xscvsdqp v2, v2 1064 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1065 ; CHECK-BE-NEXT: blr 1066 entry: 1067 %vecext = extractelement <16 x i8> %b, i32 14 1068 %conv = sitofp i8 %vecext to fp128 1069 store fp128 %conv, fp128* %a, align 16 1070 ret void 1071 } 1072 1073 ; Function Attrs: norecurse nounwind 1074 define void @sbVecConv2qp15(fp128* nocapture %a, <16 x i8> %b) { 1075 ; CHECK-LABEL: sbVecConv2qp15: 1076 ; CHECK: # %bb.0: # %entry 1077 ; CHECK-NEXT: vextractub v2, v2, 0 1078 ; CHECK-NEXT: vextsb2d v2, v2 1079 ; CHECK-NEXT: xscvsdqp v2, v2 1080 ; CHECK-NEXT: stxv v2, 0(r3) 1081 ; CHECK-NEXT: blr 1082 ; 1083 ; CHECK-BE-LABEL: sbVecConv2qp15: 1084 ; CHECK-BE: # %bb.0: # %entry 1085 ; CHECK-BE-NEXT: vextractub v2, v2, 15 1086 ; CHECK-BE-NEXT: vextsb2d v2, v2 1087 ; CHECK-BE-NEXT: xscvsdqp v2, v2 1088 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1089 ; CHECK-BE-NEXT: blr 1090 entry: 1091 %vecext = extractelement <16 x i8> %b, i32 15 1092 %conv = sitofp i8 %vecext to fp128 1093 store fp128 %conv, fp128* %a, align 16 1094 ret void 1095 } 1096 1097 ; Function Attrs: norecurse nounwind 1098 define void @ubVecConv2qp(fp128* nocapture %a, <16 x i8> %b) { 1099 ; CHECK-LABEL: ubVecConv2qp: 1100 ; CHECK: # %bb.0: # %entry 1101 ; CHECK-NEXT: vextractub v2, v2, 15 1102 ; CHECK-NEXT: xscvudqp v2, v2 1103 ; CHECK-NEXT: stxv v2, 0(r3) 1104 ; CHECK-NEXT: blr 1105 ; 1106 ; CHECK-BE-LABEL: ubVecConv2qp: 1107 ; CHECK-BE: # %bb.0: # %entry 1108 ; CHECK-BE-NEXT: vextractub v2, v2, 0 1109 ; CHECK-BE-NEXT: xscvudqp v2, v2 1110 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1111 ; CHECK-BE-NEXT: blr 1112 entry: 1113 %vecext = extractelement <16 x i8> %b, i32 0 1114 %conv = uitofp i8 %vecext to fp128 1115 store fp128 %conv, fp128* %a, align 16 1116 ret void 1117 } 1118 1119 ; Function Attrs: norecurse nounwind 1120 define void @ubVecConv2qp1(fp128* nocapture %a, <16 x i8> %b) { 1121 ; CHECK-LABEL: ubVecConv2qp1: 1122 ; CHECK: # %bb.0: # %entry 1123 ; CHECK-NEXT: vextractub v2, v2, 14 1124 ; CHECK-NEXT: xscvudqp v2, v2 1125 ; CHECK-NEXT: stxv v2, 0(r3) 1126 ; CHECK-NEXT: blr 1127 ; 1128 ; CHECK-BE-LABEL: ubVecConv2qp1: 1129 ; CHECK-BE: # %bb.0: # %entry 1130 ; CHECK-BE-NEXT: vextractub v2, v2, 1 1131 ; CHECK-BE-NEXT: xscvudqp v2, v2 1132 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1133 ; CHECK-BE-NEXT: blr 1134 entry: 1135 %vecext = extractelement <16 x i8> %b, i32 1 1136 %conv = uitofp i8 %vecext to fp128 1137 store fp128 %conv, fp128* %a, align 16 1138 ret void 1139 } 1140 1141 ; Function Attrs: norecurse nounwind 1142 define void @ubVecConv2qp2(fp128* nocapture %a, <16 x i8> %b) { 1143 ; CHECK-LABEL: ubVecConv2qp2: 1144 ; CHECK: # %bb.0: # %entry 1145 ; CHECK-NEXT: vextractub v2, v2, 13 1146 ; CHECK-NEXT: xscvudqp v2, v2 1147 ; CHECK-NEXT: stxv v2, 0(r3) 1148 ; CHECK-NEXT: blr 1149 ; 1150 ; CHECK-BE-LABEL: ubVecConv2qp2: 1151 ; CHECK-BE: # %bb.0: # %entry 1152 ; CHECK-BE-NEXT: vextractub v2, v2, 2 1153 ; CHECK-BE-NEXT: xscvudqp v2, v2 1154 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1155 ; CHECK-BE-NEXT: blr 1156 entry: 1157 %vecext = extractelement <16 x i8> %b, i32 2 1158 %conv = uitofp i8 %vecext to fp128 1159 store fp128 %conv, fp128* %a, align 16 1160 ret void 1161 } 1162 1163 ; Function Attrs: norecurse nounwind 1164 define void @ubVecConv2qp3(fp128* nocapture %a, <16 x i8> %b) { 1165 ; CHECK-LABEL: ubVecConv2qp3: 1166 ; CHECK: # %bb.0: # %entry 1167 ; CHECK-NEXT: vextractub v2, v2, 12 1168 ; CHECK-NEXT: xscvudqp v2, v2 1169 ; CHECK-NEXT: stxv v2, 0(r3) 1170 ; CHECK-NEXT: blr 1171 ; 1172 ; CHECK-BE-LABEL: ubVecConv2qp3: 1173 ; CHECK-BE: # %bb.0: # %entry 1174 ; CHECK-BE-NEXT: vextractub v2, v2, 3 1175 ; CHECK-BE-NEXT: xscvudqp v2, v2 1176 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1177 ; CHECK-BE-NEXT: blr 1178 entry: 1179 %vecext = extractelement <16 x i8> %b, i32 3 1180 %conv = uitofp i8 %vecext to fp128 1181 store fp128 %conv, fp128* %a, align 16 1182 ret void 1183 } 1184 1185 ; Function Attrs: norecurse nounwind 1186 define void @ubVecConv2qp4(fp128* nocapture %a, <16 x i8> %b) { 1187 ; CHECK-LABEL: ubVecConv2qp4: 1188 ; CHECK: # %bb.0: # %entry 1189 ; CHECK-NEXT: vextractub v2, v2, 11 1190 ; CHECK-NEXT: xscvudqp v2, v2 1191 ; CHECK-NEXT: stxv v2, 0(r3) 1192 ; CHECK-NEXT: blr 1193 ; 1194 ; CHECK-BE-LABEL: ubVecConv2qp4: 1195 ; CHECK-BE: # %bb.0: # %entry 1196 ; CHECK-BE-NEXT: vextractub v2, v2, 4 1197 ; CHECK-BE-NEXT: xscvudqp v2, v2 1198 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1199 ; CHECK-BE-NEXT: blr 1200 entry: 1201 %vecext = extractelement <16 x i8> %b, i32 4 1202 %conv = uitofp i8 %vecext to fp128 1203 store fp128 %conv, fp128* %a, align 16 1204 ret void 1205 } 1206 1207 ; Function Attrs: norecurse nounwind 1208 define void @ubVecConv2qp5(fp128* nocapture %a, <16 x i8> %b) { 1209 ; CHECK-LABEL: ubVecConv2qp5: 1210 ; CHECK: # %bb.0: # %entry 1211 ; CHECK-NEXT: vextractub v2, v2, 10 1212 ; CHECK-NEXT: xscvudqp v2, v2 1213 ; CHECK-NEXT: stxv v2, 0(r3) 1214 ; CHECK-NEXT: blr 1215 ; 1216 ; CHECK-BE-LABEL: ubVecConv2qp5: 1217 ; CHECK-BE: # %bb.0: # %entry 1218 ; CHECK-BE-NEXT: vextractub v2, v2, 5 1219 ; CHECK-BE-NEXT: xscvudqp v2, v2 1220 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1221 ; CHECK-BE-NEXT: blr 1222 entry: 1223 %vecext = extractelement <16 x i8> %b, i32 5 1224 %conv = uitofp i8 %vecext to fp128 1225 store fp128 %conv, fp128* %a, align 16 1226 ret void 1227 } 1228 1229 ; Function Attrs: norecurse nounwind 1230 define void @ubVecConv2qp6(fp128* nocapture %a, <16 x i8> %b) { 1231 ; CHECK-LABEL: ubVecConv2qp6: 1232 ; CHECK: # %bb.0: # %entry 1233 ; CHECK-NEXT: vextractub v2, v2, 9 1234 ; CHECK-NEXT: xscvudqp v2, v2 1235 ; CHECK-NEXT: stxv v2, 0(r3) 1236 ; CHECK-NEXT: blr 1237 ; 1238 ; CHECK-BE-LABEL: ubVecConv2qp6: 1239 ; CHECK-BE: # %bb.0: # %entry 1240 ; CHECK-BE-NEXT: vextractub v2, v2, 6 1241 ; CHECK-BE-NEXT: xscvudqp v2, v2 1242 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1243 ; CHECK-BE-NEXT: blr 1244 entry: 1245 %vecext = extractelement <16 x i8> %b, i32 6 1246 %conv = uitofp i8 %vecext to fp128 1247 store fp128 %conv, fp128* %a, align 16 1248 ret void 1249 } 1250 1251 ; Function Attrs: norecurse nounwind 1252 define void @ubVecConv2qp7(fp128* nocapture %a, <16 x i8> %b) { 1253 ; CHECK-LABEL: ubVecConv2qp7: 1254 ; CHECK: # %bb.0: # %entry 1255 ; CHECK-NEXT: vextractub v2, v2, 8 1256 ; CHECK-NEXT: xscvudqp v2, v2 1257 ; CHECK-NEXT: stxv v2, 0(r3) 1258 ; CHECK-NEXT: blr 1259 ; 1260 ; CHECK-BE-LABEL: ubVecConv2qp7: 1261 ; CHECK-BE: # %bb.0: # %entry 1262 ; CHECK-BE-NEXT: vextractub v2, v2, 7 1263 ; CHECK-BE-NEXT: xscvudqp v2, v2 1264 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1265 ; CHECK-BE-NEXT: blr 1266 entry: 1267 %vecext = extractelement <16 x i8> %b, i32 7 1268 %conv = uitofp i8 %vecext to fp128 1269 store fp128 %conv, fp128* %a, align 16 1270 ret void 1271 } 1272 1273 ; Function Attrs: norecurse nounwind 1274 define void @ubVecConv2qp8(fp128* nocapture %a, <16 x i8> %b) { 1275 ; CHECK-LABEL: ubVecConv2qp8: 1276 ; CHECK: # %bb.0: # %entry 1277 ; CHECK-NEXT: vextractub v2, v2, 7 1278 ; CHECK-NEXT: xscvudqp v2, v2 1279 ; CHECK-NEXT: stxv v2, 0(r3) 1280 ; CHECK-NEXT: blr 1281 ; 1282 ; CHECK-BE-LABEL: ubVecConv2qp8: 1283 ; CHECK-BE: # %bb.0: # %entry 1284 ; CHECK-BE-NEXT: vextractub v2, v2, 8 1285 ; CHECK-BE-NEXT: xscvudqp v2, v2 1286 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1287 ; CHECK-BE-NEXT: blr 1288 entry: 1289 %vecext = extractelement <16 x i8> %b, i32 8 1290 %conv = uitofp i8 %vecext to fp128 1291 store fp128 %conv, fp128* %a, align 16 1292 ret void 1293 } 1294 1295 ; Function Attrs: norecurse nounwind 1296 define void @ubVecConv2qp9(fp128* nocapture %a, <16 x i8> %b) { 1297 ; CHECK-LABEL: ubVecConv2qp9: 1298 ; CHECK: # %bb.0: # %entry 1299 ; CHECK-NEXT: vextractub v2, v2, 6 1300 ; CHECK-NEXT: xscvudqp v2, v2 1301 ; CHECK-NEXT: stxv v2, 0(r3) 1302 ; CHECK-NEXT: blr 1303 ; 1304 ; CHECK-BE-LABEL: ubVecConv2qp9: 1305 ; CHECK-BE: # %bb.0: # %entry 1306 ; CHECK-BE-NEXT: vextractub v2, v2, 9 1307 ; CHECK-BE-NEXT: xscvudqp v2, v2 1308 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1309 ; CHECK-BE-NEXT: blr 1310 entry: 1311 %vecext = extractelement <16 x i8> %b, i32 9 1312 %conv = uitofp i8 %vecext to fp128 1313 store fp128 %conv, fp128* %a, align 16 1314 ret void 1315 } 1316 1317 ; Function Attrs: norecurse nounwind 1318 define void @ubVecConv2qp10(fp128* nocapture %a, <16 x i8> %b) { 1319 ; CHECK-LABEL: ubVecConv2qp10: 1320 ; CHECK: # %bb.0: # %entry 1321 ; CHECK-NEXT: vextractub v2, v2, 5 1322 ; CHECK-NEXT: xscvudqp v2, v2 1323 ; CHECK-NEXT: stxv v2, 0(r3) 1324 ; CHECK-NEXT: blr 1325 ; 1326 ; CHECK-BE-LABEL: ubVecConv2qp10: 1327 ; CHECK-BE: # %bb.0: # %entry 1328 ; CHECK-BE-NEXT: vextractub v2, v2, 10 1329 ; CHECK-BE-NEXT: xscvudqp v2, v2 1330 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1331 ; CHECK-BE-NEXT: blr 1332 entry: 1333 %vecext = extractelement <16 x i8> %b, i32 10 1334 %conv = uitofp i8 %vecext to fp128 1335 store fp128 %conv, fp128* %a, align 16 1336 ret void 1337 } 1338 1339 ; Function Attrs: norecurse nounwind 1340 define void @ubVecConv2qp11(fp128* nocapture %a, <16 x i8> %b) { 1341 ; CHECK-LABEL: ubVecConv2qp11: 1342 ; CHECK: # %bb.0: # %entry 1343 ; CHECK-NEXT: vextractub v2, v2, 4 1344 ; CHECK-NEXT: xscvudqp v2, v2 1345 ; CHECK-NEXT: stxv v2, 0(r3) 1346 ; CHECK-NEXT: blr 1347 ; 1348 ; CHECK-BE-LABEL: ubVecConv2qp11: 1349 ; CHECK-BE: # %bb.0: # %entry 1350 ; CHECK-BE-NEXT: vextractub v2, v2, 11 1351 ; CHECK-BE-NEXT: xscvudqp v2, v2 1352 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1353 ; CHECK-BE-NEXT: blr 1354 entry: 1355 %vecext = extractelement <16 x i8> %b, i32 11 1356 %conv = uitofp i8 %vecext to fp128 1357 store fp128 %conv, fp128* %a, align 16 1358 ret void 1359 } 1360 1361 ; Function Attrs: norecurse nounwind 1362 define void @ubVecConv2qp12(fp128* nocapture %a, <16 x i8> %b) { 1363 ; CHECK-LABEL: ubVecConv2qp12: 1364 ; CHECK: # %bb.0: # %entry 1365 ; CHECK-NEXT: vextractub v2, v2, 3 1366 ; CHECK-NEXT: xscvudqp v2, v2 1367 ; CHECK-NEXT: stxv v2, 0(r3) 1368 ; CHECK-NEXT: blr 1369 ; 1370 ; CHECK-BE-LABEL: ubVecConv2qp12: 1371 ; CHECK-BE: # %bb.0: # %entry 1372 ; CHECK-BE-NEXT: vextractub v2, v2, 12 1373 ; CHECK-BE-NEXT: xscvudqp v2, v2 1374 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1375 ; CHECK-BE-NEXT: blr 1376 entry: 1377 %vecext = extractelement <16 x i8> %b, i32 12 1378 %conv = uitofp i8 %vecext to fp128 1379 store fp128 %conv, fp128* %a, align 16 1380 ret void 1381 } 1382 1383 ; Function Attrs: norecurse nounwind 1384 define void @ubVecConv2qp13(fp128* nocapture %a, <16 x i8> %b) { 1385 ; CHECK-LABEL: ubVecConv2qp13: 1386 ; CHECK: # %bb.0: # %entry 1387 ; CHECK-NEXT: vextractub v2, v2, 2 1388 ; CHECK-NEXT: xscvudqp v2, v2 1389 ; CHECK-NEXT: stxv v2, 0(r3) 1390 ; CHECK-NEXT: blr 1391 ; 1392 ; CHECK-BE-LABEL: ubVecConv2qp13: 1393 ; CHECK-BE: # %bb.0: # %entry 1394 ; CHECK-BE-NEXT: vextractub v2, v2, 13 1395 ; CHECK-BE-NEXT: xscvudqp v2, v2 1396 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1397 ; CHECK-BE-NEXT: blr 1398 entry: 1399 %vecext = extractelement <16 x i8> %b, i32 13 1400 %conv = uitofp i8 %vecext to fp128 1401 store fp128 %conv, fp128* %a, align 16 1402 ret void 1403 } 1404 1405 ; Function Attrs: norecurse nounwind 1406 define void @ubVecConv2qp14(fp128* nocapture %a, <16 x i8> %b) { 1407 ; CHECK-LABEL: ubVecConv2qp14: 1408 ; CHECK: # %bb.0: # %entry 1409 ; CHECK-NEXT: vextractub v2, v2, 1 1410 ; CHECK-NEXT: xscvudqp v2, v2 1411 ; CHECK-NEXT: stxv v2, 0(r3) 1412 ; CHECK-NEXT: blr 1413 ; 1414 ; CHECK-BE-LABEL: ubVecConv2qp14: 1415 ; CHECK-BE: # %bb.0: # %entry 1416 ; CHECK-BE-NEXT: vextractub v2, v2, 14 1417 ; CHECK-BE-NEXT: xscvudqp v2, v2 1418 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1419 ; CHECK-BE-NEXT: blr 1420 entry: 1421 %vecext = extractelement <16 x i8> %b, i32 14 1422 %conv = uitofp i8 %vecext to fp128 1423 store fp128 %conv, fp128* %a, align 16 1424 ret void 1425 } 1426 1427 ; Function Attrs: norecurse nounwind 1428 define void @ubVecConv2qp15(fp128* nocapture %a, <16 x i8> %b) { 1429 ; CHECK-LABEL: ubVecConv2qp15: 1430 ; CHECK: # %bb.0: # %entry 1431 ; CHECK-NEXT: vextractub v2, v2, 0 1432 ; CHECK-NEXT: xscvudqp v2, v2 1433 ; CHECK-NEXT: stxv v2, 0(r3) 1434 ; CHECK-NEXT: blr 1435 ; 1436 ; CHECK-BE-LABEL: ubVecConv2qp15: 1437 ; CHECK-BE: # %bb.0: # %entry 1438 ; CHECK-BE-NEXT: vextractub v2, v2, 15 1439 ; CHECK-BE-NEXT: xscvudqp v2, v2 1440 ; CHECK-BE-NEXT: stxv v2, 0(r3) 1441 ; CHECK-BE-NEXT: blr 1442 entry: 1443 %vecext = extractelement <16 x i8> %b, i32 15 1444 %conv = uitofp i8 %vecext to fp128 1445 store fp128 %conv, fp128* %a, align 16 1446 ret void 1447 } 1448