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: -relocation-model=pic -ppc-asm-full-reg-names -verify-machineinstrs \ 4; RUN: < %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: < %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 15define 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 27entry: 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 35define 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 48entry: 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 56define 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 65entry: 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 74define 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 81entry: 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 90define 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 103entry: 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 111define 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 124entry: 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 132define 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 141entry: 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 150define 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 157entry: 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 168define 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 183entry: 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 191define 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 205entry: 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 213define 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 227entry: 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 235define 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 250entry: 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 258define 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 271entry: 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 279define 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 292entry: 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 300define 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 313entry: 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 321define 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 334entry: 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 344define 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 360entry: 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 368define 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 384entry: 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 392define 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 408entry: 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 416define 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 432entry: 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 440define 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 456entry: 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 464define 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 480entry: 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 488define 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 504entry: 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 512define 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 528entry: 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 536define 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 550entry: 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 558define 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 572entry: 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 580define 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 594entry: 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 602define 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 616entry: 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 624define 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 638entry: 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 646define 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 660entry: 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 668define 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 682entry: 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 690define 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 704entry: 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 714define 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 730entry: 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 738define 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 754entry: 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 762define 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 778entry: 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 786define 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 802entry: 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 810define 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 826entry: 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 834define 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 850entry: 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 858define 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 874entry: 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 882define 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 898entry: 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 906define 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 922entry: 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 930define 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 946entry: 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 954define 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 970entry: 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 978define 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 994entry: 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 1002define 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 1018entry: 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 1026define 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 1042entry: 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 1050define 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 1066entry: 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 1074define 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 1090entry: 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 1098define 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 1112entry: 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 1120define 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 1134entry: 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 1142define 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 1156entry: 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 1164define 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 1178entry: 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 1186define 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 1200entry: 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 1208define 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 1222entry: 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 1230define 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 1244entry: 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 1252define 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 1266entry: 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 1274define 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 1288entry: 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 1296define 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 1310entry: 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 1318define 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 1332entry: 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 1340define 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 1354entry: 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 1362define 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 1376entry: 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 1384define 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 1398entry: 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 1406define 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 1420entry: 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 1428define 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 1442entry: 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