1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -relocation-model=pic -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \ 3; RUN: -ppc-vsr-nums-as-vr -verify-machineinstrs -ppc-asm-full-reg-names < %s \ 4; RUN: | FileCheck %s 5; RUN: llc -relocation-model=pic -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \ 6; RUN: -ppc-vsr-nums-as-vr -verify-machineinstrs -ppc-asm-full-reg-names < %s \ 7; RUN: | FileCheck %s -check-prefix=CHECK-P8 8 9@mem = global [5 x i64] [i64 56, i64 63, i64 3, i64 5, i64 6], align 8 10@umem = global [5 x i64] [i64 560, i64 100, i64 34, i64 2, i64 5], align 8 11@swMem = global [5 x i32] [i32 5, i32 2, i32 3, i32 4, i32 0], align 4 12@uwMem = global [5 x i32] [i32 5, i32 2, i32 3, i32 4, i32 0], align 4 13@uhwMem = local_unnamed_addr global [5 x i16] [i16 5, i16 2, i16 3, i16 4, i16 0], align 2 14@ubMem = local_unnamed_addr global [5 x i8] c"\05\02\03\04\00", align 1 15 16; Function Attrs: norecurse nounwind 17define void @sdwConv2qp(fp128* nocapture %a, i64 %b) { 18; CHECK-LABEL: sdwConv2qp: 19; CHECK: # %bb.0: # %entry 20; CHECK-NEXT: mtvsrd v2, r4 21; CHECK-NEXT: xscvsdqp v2, v2 22; CHECK-NEXT: stxv v2, 0(r3) 23; CHECK-NEXT: blr 24; 25; CHECK-P8-LABEL: sdwConv2qp: 26; CHECK-P8: # %bb.0: # %entry 27; CHECK-P8-NEXT: mflr r0 28; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 29; CHECK-P8-NEXT: .cfi_offset lr, 16 30; CHECK-P8-NEXT: .cfi_offset r30, -16 31; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 32; CHECK-P8-NEXT: std r0, 16(r1) 33; CHECK-P8-NEXT: stdu r1, -48(r1) 34; CHECK-P8-NEXT: mr r30, r3 35; CHECK-P8-NEXT: mr r3, r4 36; CHECK-P8-NEXT: bl __floatdikf 37; CHECK-P8-NEXT: nop 38; CHECK-P8-NEXT: xxswapd vs0, v2 39; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 40; CHECK-P8-NEXT: addi r1, r1, 48 41; CHECK-P8-NEXT: ld r0, 16(r1) 42; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 43; CHECK-P8-NEXT: mtlr r0 44; CHECK-P8-NEXT: blr 45entry: 46 %conv = sitofp i64 %b to fp128 47 store fp128 %conv, fp128* %a, align 16 48 ret void 49 50} 51 52; Function Attrs: norecurse nounwind 53define void @sdwConv2qp_01(fp128* nocapture %a, i128 %b) { 54; CHECK-LABEL: sdwConv2qp_01: 55; CHECK: # %bb.0: # %entry 56; CHECK-NEXT: mflr r0 57; CHECK-NEXT: .cfi_def_cfa_offset 48 58; CHECK-NEXT: .cfi_offset lr, 16 59; CHECK-NEXT: .cfi_offset r30, -16 60; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill 61; CHECK-NEXT: std r0, 16(r1) 62; CHECK-NEXT: stdu r1, -48(r1) 63; CHECK-NEXT: mr r30, r3 64; CHECK-NEXT: mr r3, r4 65; CHECK-NEXT: mr r4, r5 66; CHECK-NEXT: bl __floattikf 67; CHECK-NEXT: nop 68; CHECK-NEXT: stxv v2, 0(r30) 69; CHECK-NEXT: addi r1, r1, 48 70; CHECK-NEXT: ld r0, 16(r1) 71; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 72; CHECK-NEXT: mtlr r0 73; CHECK-NEXT: blr 74; 75; CHECK-P8-LABEL: sdwConv2qp_01: 76; CHECK-P8: # %bb.0: # %entry 77; CHECK-P8-NEXT: mflr r0 78; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 79; CHECK-P8-NEXT: .cfi_offset lr, 16 80; CHECK-P8-NEXT: .cfi_offset r30, -16 81; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 82; CHECK-P8-NEXT: std r0, 16(r1) 83; CHECK-P8-NEXT: stdu r1, -48(r1) 84; CHECK-P8-NEXT: mr r30, r3 85; CHECK-P8-NEXT: mr r3, r4 86; CHECK-P8-NEXT: mr r4, r5 87; CHECK-P8-NEXT: bl __floattikf 88; CHECK-P8-NEXT: nop 89; CHECK-P8-NEXT: xxswapd vs0, v2 90; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 91; CHECK-P8-NEXT: addi r1, r1, 48 92; CHECK-P8-NEXT: ld r0, 16(r1) 93; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 94; CHECK-P8-NEXT: mtlr r0 95; CHECK-P8-NEXT: blr 96entry: 97 %conv = sitofp i128 %b to fp128 98 store fp128 %conv, fp128* %a, align 16 99 ret void 100 101} 102 103; Function Attrs: norecurse nounwind 104define void @sdwConv2qp_02(fp128* nocapture %a) { 105; CHECK-LABEL: sdwConv2qp_02: 106; CHECK: # %bb.0: # %entry 107; CHECK-NEXT: addis r4, r2, .LC0@toc@ha 108; CHECK-NEXT: ld r4, .LC0@toc@l(r4) 109; CHECK-NEXT: lxsd v2, 16(r4) 110; CHECK-NEXT: xscvsdqp v2, v2 111; CHECK-NEXT: stxv v2, 0(r3) 112; CHECK-NEXT: blr 113; 114; CHECK-P8-LABEL: sdwConv2qp_02: 115; CHECK-P8: # %bb.0: # %entry 116; CHECK-P8-NEXT: mflr r0 117; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 118; CHECK-P8-NEXT: .cfi_offset lr, 16 119; CHECK-P8-NEXT: .cfi_offset r30, -16 120; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 121; CHECK-P8-NEXT: std r0, 16(r1) 122; CHECK-P8-NEXT: stdu r1, -48(r1) 123; CHECK-P8-NEXT: addis r4, r2, .LC0@toc@ha 124; CHECK-P8-NEXT: mr r30, r3 125; CHECK-P8-NEXT: ld r4, .LC0@toc@l(r4) 126; CHECK-P8-NEXT: ld r4, 16(r4) 127; CHECK-P8-NEXT: mr r3, r4 128; CHECK-P8-NEXT: bl __floatdikf 129; CHECK-P8-NEXT: nop 130; CHECK-P8-NEXT: xxswapd vs0, v2 131; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 132; CHECK-P8-NEXT: addi r1, r1, 48 133; CHECK-P8-NEXT: ld r0, 16(r1) 134; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 135; CHECK-P8-NEXT: mtlr r0 136; CHECK-P8-NEXT: blr 137entry: 138 %0 = load i64, i64* getelementptr inbounds 139 ([5 x i64], [5 x i64]* @mem, i64 0, i64 2), align 8 140 %conv = sitofp i64 %0 to fp128 141 store fp128 %conv, fp128* %a, align 16 142 ret void 143 144} 145 146; Function Attrs: norecurse nounwind 147define void @sdwConv2qp_03(fp128* nocapture %a, i64* nocapture readonly %b) { 148; CHECK-LABEL: sdwConv2qp_03: 149; CHECK: # %bb.0: # %entry 150; CHECK-NEXT: lxsd v2, 0(r4) 151; CHECK-NEXT: xscvsdqp v2, v2 152; CHECK-NEXT: stxv v2, 0(r3) 153; CHECK-NEXT: blr 154; 155; CHECK-P8-LABEL: sdwConv2qp_03: 156; CHECK-P8: # %bb.0: # %entry 157; CHECK-P8-NEXT: mflr r0 158; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 159; CHECK-P8-NEXT: .cfi_offset lr, 16 160; CHECK-P8-NEXT: .cfi_offset r30, -16 161; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 162; CHECK-P8-NEXT: std r0, 16(r1) 163; CHECK-P8-NEXT: stdu r1, -48(r1) 164; CHECK-P8-NEXT: ld r4, 0(r4) 165; CHECK-P8-NEXT: mr r30, r3 166; CHECK-P8-NEXT: mr r3, r4 167; CHECK-P8-NEXT: bl __floatdikf 168; CHECK-P8-NEXT: nop 169; CHECK-P8-NEXT: xxswapd vs0, v2 170; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 171; CHECK-P8-NEXT: addi r1, r1, 48 172; CHECK-P8-NEXT: ld r0, 16(r1) 173; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 174; CHECK-P8-NEXT: mtlr r0 175; CHECK-P8-NEXT: blr 176entry: 177 %0 = load i64, i64* %b, align 8 178 %conv = sitofp i64 %0 to fp128 179 store fp128 %conv, fp128* %a, align 16 180 ret void 181 182} 183 184; Function Attrs: norecurse nounwind 185define void @sdwConv2qp_04(fp128* nocapture %a, i1 %b) { 186; CHECK-LABEL: sdwConv2qp_04: 187; CHECK: # %bb.0: # %entry 188; CHECK-NEXT: andi. r4, r4, 1 189; CHECK-NEXT: li r4, 0 190; CHECK-NEXT: li r5, -1 191; CHECK-NEXT: iselgt r4, r5, r4 192; CHECK-NEXT: mtvsrwa v2, r4 193; CHECK-NEXT: xscvsdqp v2, v2 194; CHECK-NEXT: stxv v2, 0(r3) 195; CHECK-NEXT: blr 196; 197; CHECK-P8-LABEL: sdwConv2qp_04: 198; CHECK-P8: # %bb.0: # %entry 199; CHECK-P8-NEXT: mflr r0 200; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 201; CHECK-P8-NEXT: .cfi_offset lr, 16 202; CHECK-P8-NEXT: .cfi_offset r30, -16 203; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 204; CHECK-P8-NEXT: std r0, 16(r1) 205; CHECK-P8-NEXT: stdu r1, -48(r1) 206; CHECK-P8-NEXT: mr r30, r3 207; CHECK-P8-NEXT: andi. r3, r4, 1 208; CHECK-P8-NEXT: li r4, -1 209; CHECK-P8-NEXT: li r3, 0 210; CHECK-P8-NEXT: iselgt r3, r4, r3 211; CHECK-P8-NEXT: bl __floatsikf 212; CHECK-P8-NEXT: nop 213; CHECK-P8-NEXT: xxswapd vs0, v2 214; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 215; CHECK-P8-NEXT: addi r1, r1, 48 216; CHECK-P8-NEXT: ld r0, 16(r1) 217; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 218; CHECK-P8-NEXT: mtlr r0 219; CHECK-P8-NEXT: blr 220entry: 221 %conv = sitofp i1 %b to fp128 222 store fp128 %conv, fp128* %a, align 16 223 ret void 224 225} 226 227; Function Attrs: norecurse nounwind 228define void @udwConv2qp(fp128* nocapture %a, i64 %b) { 229; CHECK-LABEL: udwConv2qp: 230; CHECK: # %bb.0: # %entry 231; CHECK-NEXT: mtvsrd v2, r4 232; CHECK-NEXT: xscvudqp v2, v2 233; CHECK-NEXT: stxv v2, 0(r3) 234; CHECK-NEXT: blr 235; 236; CHECK-P8-LABEL: udwConv2qp: 237; CHECK-P8: # %bb.0: # %entry 238; CHECK-P8-NEXT: mflr r0 239; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 240; CHECK-P8-NEXT: .cfi_offset lr, 16 241; CHECK-P8-NEXT: .cfi_offset r30, -16 242; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 243; CHECK-P8-NEXT: std r0, 16(r1) 244; CHECK-P8-NEXT: stdu r1, -48(r1) 245; CHECK-P8-NEXT: mr r30, r3 246; CHECK-P8-NEXT: mr r3, r4 247; CHECK-P8-NEXT: bl __floatundikf 248; CHECK-P8-NEXT: nop 249; CHECK-P8-NEXT: xxswapd vs0, v2 250; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 251; CHECK-P8-NEXT: addi r1, r1, 48 252; CHECK-P8-NEXT: ld r0, 16(r1) 253; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 254; CHECK-P8-NEXT: mtlr r0 255; CHECK-P8-NEXT: blr 256entry: 257 %conv = uitofp i64 %b to fp128 258 store fp128 %conv, fp128* %a, align 16 259 ret void 260 261} 262 263; Function Attrs: norecurse nounwind 264define void @udwConv2qp_01(fp128* nocapture %a, i128 %b) { 265; CHECK-LABEL: udwConv2qp_01: 266; CHECK: # %bb.0: # %entry 267; CHECK-NEXT: mflr r0 268; CHECK-NEXT: .cfi_def_cfa_offset 48 269; CHECK-NEXT: .cfi_offset lr, 16 270; CHECK-NEXT: .cfi_offset r30, -16 271; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill 272; CHECK-NEXT: std r0, 16(r1) 273; CHECK-NEXT: stdu r1, -48(r1) 274; CHECK-NEXT: mr r30, r3 275; CHECK-NEXT: mr r3, r4 276; CHECK-NEXT: mr r4, r5 277; CHECK-NEXT: bl __floatuntikf 278; CHECK-NEXT: nop 279; CHECK-NEXT: stxv v2, 0(r30) 280; CHECK-NEXT: addi r1, r1, 48 281; CHECK-NEXT: ld r0, 16(r1) 282; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 283; CHECK-NEXT: mtlr r0 284; CHECK-NEXT: blr 285; 286; CHECK-P8-LABEL: udwConv2qp_01: 287; CHECK-P8: # %bb.0: # %entry 288; CHECK-P8-NEXT: mflr r0 289; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 290; CHECK-P8-NEXT: .cfi_offset lr, 16 291; CHECK-P8-NEXT: .cfi_offset r30, -16 292; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 293; CHECK-P8-NEXT: std r0, 16(r1) 294; CHECK-P8-NEXT: stdu r1, -48(r1) 295; CHECK-P8-NEXT: mr r30, r3 296; CHECK-P8-NEXT: mr r3, r4 297; CHECK-P8-NEXT: mr r4, r5 298; CHECK-P8-NEXT: bl __floatuntikf 299; CHECK-P8-NEXT: nop 300; CHECK-P8-NEXT: xxswapd vs0, v2 301; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 302; CHECK-P8-NEXT: addi r1, r1, 48 303; CHECK-P8-NEXT: ld r0, 16(r1) 304; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 305; CHECK-P8-NEXT: mtlr r0 306; CHECK-P8-NEXT: blr 307entry: 308 %conv = uitofp i128 %b to fp128 309 store fp128 %conv, fp128* %a, align 16 310 ret void 311 312} 313 314; Function Attrs: norecurse nounwind 315define void @udwConv2qp_02(fp128* nocapture %a) { 316; CHECK-LABEL: udwConv2qp_02: 317; CHECK: # %bb.0: # %entry 318; CHECK-NEXT: addis r4, r2, .LC1@toc@ha 319; CHECK-NEXT: ld r4, .LC1@toc@l(r4) 320; CHECK-NEXT: lxsd v2, 32(r4) 321; CHECK-NEXT: xscvudqp v2, v2 322; CHECK-NEXT: stxv v2, 0(r3) 323; CHECK-NEXT: blr 324; 325; CHECK-P8-LABEL: udwConv2qp_02: 326; CHECK-P8: # %bb.0: # %entry 327; CHECK-P8-NEXT: mflr r0 328; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 329; CHECK-P8-NEXT: .cfi_offset lr, 16 330; CHECK-P8-NEXT: .cfi_offset r30, -16 331; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 332; CHECK-P8-NEXT: std r0, 16(r1) 333; CHECK-P8-NEXT: stdu r1, -48(r1) 334; CHECK-P8-NEXT: addis r4, r2, .LC1@toc@ha 335; CHECK-P8-NEXT: mr r30, r3 336; CHECK-P8-NEXT: ld r4, .LC1@toc@l(r4) 337; CHECK-P8-NEXT: ld r4, 32(r4) 338; CHECK-P8-NEXT: mr r3, r4 339; CHECK-P8-NEXT: bl __floatundikf 340; CHECK-P8-NEXT: nop 341; CHECK-P8-NEXT: xxswapd vs0, v2 342; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 343; CHECK-P8-NEXT: addi r1, r1, 48 344; CHECK-P8-NEXT: ld r0, 16(r1) 345; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 346; CHECK-P8-NEXT: mtlr r0 347; CHECK-P8-NEXT: blr 348entry: 349 %0 = load i64, i64* getelementptr inbounds 350 ([5 x i64], [5 x i64]* @umem, i64 0, i64 4), align 8 351 %conv = uitofp i64 %0 to fp128 352 store fp128 %conv, fp128* %a, align 16 353 ret void 354 355} 356 357; Function Attrs: norecurse nounwind 358define void @udwConv2qp_03(fp128* nocapture %a, i64* nocapture readonly %b) { 359; CHECK-LABEL: udwConv2qp_03: 360; CHECK: # %bb.0: # %entry 361; CHECK-NEXT: lxsd v2, 0(r4) 362; CHECK-NEXT: xscvudqp v2, v2 363; CHECK-NEXT: stxv v2, 0(r3) 364; CHECK-NEXT: blr 365; 366; CHECK-P8-LABEL: udwConv2qp_03: 367; CHECK-P8: # %bb.0: # %entry 368; CHECK-P8-NEXT: mflr r0 369; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 370; CHECK-P8-NEXT: .cfi_offset lr, 16 371; CHECK-P8-NEXT: .cfi_offset r30, -16 372; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 373; CHECK-P8-NEXT: std r0, 16(r1) 374; CHECK-P8-NEXT: stdu r1, -48(r1) 375; CHECK-P8-NEXT: ld r4, 0(r4) 376; CHECK-P8-NEXT: mr r30, r3 377; CHECK-P8-NEXT: mr r3, r4 378; CHECK-P8-NEXT: bl __floatundikf 379; CHECK-P8-NEXT: nop 380; CHECK-P8-NEXT: xxswapd vs0, v2 381; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 382; CHECK-P8-NEXT: addi r1, r1, 48 383; CHECK-P8-NEXT: ld r0, 16(r1) 384; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 385; CHECK-P8-NEXT: mtlr r0 386; CHECK-P8-NEXT: blr 387entry: 388 %0 = load i64, i64* %b, align 8 389 %conv = uitofp i64 %0 to fp128 390 store fp128 %conv, fp128* %a, align 16 391 ret void 392 393} 394 395; Function Attrs: norecurse nounwind 396define void @udwConv2qp_04(fp128* nocapture %a, i1 %b) { 397; CHECK-LABEL: udwConv2qp_04: 398; CHECK: # %bb.0: # %entry 399; CHECK-NEXT: clrlwi r4, r4, 31 400; CHECK-NEXT: mtvsrwa v2, r4 401; CHECK-NEXT: xscvsdqp v2, v2 402; CHECK-NEXT: stxv v2, 0(r3) 403; CHECK-NEXT: blr 404; 405; CHECK-P8-LABEL: udwConv2qp_04: 406; CHECK-P8: # %bb.0: # %entry 407; CHECK-P8-NEXT: mflr r0 408; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 409; CHECK-P8-NEXT: .cfi_offset lr, 16 410; CHECK-P8-NEXT: .cfi_offset r30, -16 411; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 412; CHECK-P8-NEXT: std r0, 16(r1) 413; CHECK-P8-NEXT: stdu r1, -48(r1) 414; CHECK-P8-NEXT: mr r30, r3 415; CHECK-P8-NEXT: clrldi r3, r4, 63 416; CHECK-P8-NEXT: bl __floatsikf 417; CHECK-P8-NEXT: nop 418; CHECK-P8-NEXT: xxswapd vs0, v2 419; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 420; CHECK-P8-NEXT: addi r1, r1, 48 421; CHECK-P8-NEXT: ld r0, 16(r1) 422; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 423; CHECK-P8-NEXT: mtlr r0 424; CHECK-P8-NEXT: blr 425entry: 426 %conv = uitofp i1 %b to fp128 427 store fp128 %conv, fp128* %a, align 16 428 ret void 429 430} 431 432; Function Attrs: norecurse nounwind 433define fp128* @sdwConv2qp_testXForm(fp128* returned %sink, 434; CHECK-LABEL: sdwConv2qp_testXForm: 435; CHECK: # %bb.0: # %entry 436; CHECK-NEXT: lis r5, 1 437; CHECK-NEXT: ori r5, r5, 7797 438; CHECK-NEXT: lxsdx v2, r4, r5 439; CHECK-NEXT: xscvsdqp v2, v2 440; CHECK-NEXT: stxv v2, 0(r3) 441; CHECK-NEXT: blr 442; 443; CHECK-P8-LABEL: sdwConv2qp_testXForm: 444; CHECK-P8: # %bb.0: # %entry 445; CHECK-P8-NEXT: mflr r0 446; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 447; CHECK-P8-NEXT: .cfi_offset lr, 16 448; CHECK-P8-NEXT: .cfi_offset r30, -16 449; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 450; CHECK-P8-NEXT: std r0, 16(r1) 451; CHECK-P8-NEXT: stdu r1, -48(r1) 452; CHECK-P8-NEXT: lis r5, 1 453; CHECK-P8-NEXT: mr r30, r3 454; CHECK-P8-NEXT: ori r5, r5, 7797 455; CHECK-P8-NEXT: ldx r4, r4, r5 456; CHECK-P8-NEXT: mr r3, r4 457; CHECK-P8-NEXT: bl __floatdikf 458; CHECK-P8-NEXT: nop 459; CHECK-P8-NEXT: xxswapd vs0, v2 460; CHECK-P8-NEXT: mr r3, r30 461; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 462; CHECK-P8-NEXT: addi r1, r1, 48 463; CHECK-P8-NEXT: ld r0, 16(r1) 464; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 465; CHECK-P8-NEXT: mtlr r0 466; CHECK-P8-NEXT: blr 467 i8* nocapture readonly %a) { 468entry: 469 %add.ptr = getelementptr inbounds i8, i8* %a, i64 73333 470 %0 = bitcast i8* %add.ptr to i64* 471 %1 = load i64, i64* %0, align 8 472 %conv = sitofp i64 %1 to fp128 473 store fp128 %conv, fp128* %sink, align 16 474 ret fp128* %sink 475 476} 477 478; Function Attrs: norecurse nounwind 479define fp128* @udwConv2qp_testXForm(fp128* returned %sink, 480; CHECK-LABEL: udwConv2qp_testXForm: 481; CHECK: # %bb.0: # %entry 482; CHECK-NEXT: lis r5, 1 483; CHECK-NEXT: ori r5, r5, 7797 484; CHECK-NEXT: lxsdx v2, r4, r5 485; CHECK-NEXT: xscvudqp v2, v2 486; CHECK-NEXT: stxv v2, 0(r3) 487; CHECK-NEXT: blr 488; 489; CHECK-P8-LABEL: udwConv2qp_testXForm: 490; CHECK-P8: # %bb.0: # %entry 491; CHECK-P8-NEXT: mflr r0 492; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 493; CHECK-P8-NEXT: .cfi_offset lr, 16 494; CHECK-P8-NEXT: .cfi_offset r30, -16 495; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 496; CHECK-P8-NEXT: std r0, 16(r1) 497; CHECK-P8-NEXT: stdu r1, -48(r1) 498; CHECK-P8-NEXT: lis r5, 1 499; CHECK-P8-NEXT: mr r30, r3 500; CHECK-P8-NEXT: ori r5, r5, 7797 501; CHECK-P8-NEXT: ldx r4, r4, r5 502; CHECK-P8-NEXT: mr r3, r4 503; CHECK-P8-NEXT: bl __floatundikf 504; CHECK-P8-NEXT: nop 505; CHECK-P8-NEXT: xxswapd vs0, v2 506; CHECK-P8-NEXT: mr r3, r30 507; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 508; CHECK-P8-NEXT: addi r1, r1, 48 509; CHECK-P8-NEXT: ld r0, 16(r1) 510; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 511; CHECK-P8-NEXT: mtlr r0 512; CHECK-P8-NEXT: blr 513 i8* nocapture readonly %a) { 514entry: 515 %add.ptr = getelementptr inbounds i8, i8* %a, i64 73333 516 %0 = bitcast i8* %add.ptr to i64* 517 %1 = load i64, i64* %0, align 8 518 %conv = uitofp i64 %1 to fp128 519 store fp128 %conv, fp128* %sink, align 16 520 ret fp128* %sink 521 522} 523 524; Function Attrs: norecurse nounwind 525define void @swConv2qp(fp128* nocapture %a, i32 signext %b) { 526; CHECK-LABEL: swConv2qp: 527; CHECK: # %bb.0: # %entry 528; CHECK-NEXT: mtvsrwa v2, r4 529; CHECK-NEXT: xscvsdqp v2, v2 530; CHECK-NEXT: stxv v2, 0(r3) 531; CHECK-NEXT: blr 532; 533; CHECK-P8-LABEL: swConv2qp: 534; CHECK-P8: # %bb.0: # %entry 535; CHECK-P8-NEXT: mflr r0 536; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 537; CHECK-P8-NEXT: .cfi_offset lr, 16 538; CHECK-P8-NEXT: .cfi_offset r30, -16 539; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 540; CHECK-P8-NEXT: std r0, 16(r1) 541; CHECK-P8-NEXT: stdu r1, -48(r1) 542; CHECK-P8-NEXT: mr r30, r3 543; CHECK-P8-NEXT: mr r3, r4 544; CHECK-P8-NEXT: bl __floatsikf 545; CHECK-P8-NEXT: nop 546; CHECK-P8-NEXT: xxswapd vs0, v2 547; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 548; CHECK-P8-NEXT: addi r1, r1, 48 549; CHECK-P8-NEXT: ld r0, 16(r1) 550; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 551; CHECK-P8-NEXT: mtlr r0 552; CHECK-P8-NEXT: blr 553entry: 554 %conv = sitofp i32 %b to fp128 555 store fp128 %conv, fp128* %a, align 16 556 ret void 557 558} 559 560; Function Attrs: norecurse nounwind 561define void @swConv2qp_02(fp128* nocapture %a, i32* nocapture readonly %b) { 562; CHECK-LABEL: swConv2qp_02: 563; CHECK: # %bb.0: # %entry 564; CHECK-NEXT: lxsiwax v2, 0, r4 565; CHECK-NEXT: xscvsdqp v2, v2 566; CHECK-NEXT: stxv v2, 0(r3) 567; CHECK-NEXT: blr 568; 569; CHECK-P8-LABEL: swConv2qp_02: 570; CHECK-P8: # %bb.0: # %entry 571; CHECK-P8-NEXT: mflr r0 572; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 573; CHECK-P8-NEXT: .cfi_offset lr, 16 574; CHECK-P8-NEXT: .cfi_offset r30, -16 575; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 576; CHECK-P8-NEXT: std r0, 16(r1) 577; CHECK-P8-NEXT: stdu r1, -48(r1) 578; CHECK-P8-NEXT: lwa r4, 0(r4) 579; CHECK-P8-NEXT: mr r30, r3 580; CHECK-P8-NEXT: mr r3, r4 581; CHECK-P8-NEXT: bl __floatsikf 582; CHECK-P8-NEXT: nop 583; CHECK-P8-NEXT: xxswapd vs0, v2 584; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 585; CHECK-P8-NEXT: addi r1, r1, 48 586; CHECK-P8-NEXT: ld r0, 16(r1) 587; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 588; CHECK-P8-NEXT: mtlr r0 589; CHECK-P8-NEXT: blr 590entry: 591 %0 = load i32, i32* %b, align 4 592 %conv = sitofp i32 %0 to fp128 593 store fp128 %conv, fp128* %a, align 16 594 ret void 595 596} 597 598; Function Attrs: norecurse nounwind 599define void @swConv2qp_03(fp128* nocapture %a) { 600; CHECK-LABEL: swConv2qp_03: 601; CHECK: # %bb.0: # %entry 602; CHECK-NEXT: addis r4, r2, .LC2@toc@ha 603; CHECK-NEXT: ld r4, .LC2@toc@l(r4) 604; CHECK-NEXT: addi r4, r4, 12 605; CHECK-NEXT: lxsiwax v2, 0, r4 606; CHECK-NEXT: xscvsdqp v2, v2 607; CHECK-NEXT: stxv v2, 0(r3) 608; CHECK-NEXT: blr 609; 610; CHECK-P8-LABEL: swConv2qp_03: 611; CHECK-P8: # %bb.0: # %entry 612; CHECK-P8-NEXT: mflr r0 613; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 614; CHECK-P8-NEXT: .cfi_offset lr, 16 615; CHECK-P8-NEXT: .cfi_offset r30, -16 616; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 617; CHECK-P8-NEXT: std r0, 16(r1) 618; CHECK-P8-NEXT: stdu r1, -48(r1) 619; CHECK-P8-NEXT: addis r4, r2, .LC2@toc@ha 620; CHECK-P8-NEXT: mr r30, r3 621; CHECK-P8-NEXT: ld r4, .LC2@toc@l(r4) 622; CHECK-P8-NEXT: lwa r4, 12(r4) 623; CHECK-P8-NEXT: mr r3, r4 624; CHECK-P8-NEXT: bl __floatsikf 625; CHECK-P8-NEXT: nop 626; CHECK-P8-NEXT: xxswapd vs0, v2 627; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 628; CHECK-P8-NEXT: addi r1, r1, 48 629; CHECK-P8-NEXT: ld r0, 16(r1) 630; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 631; CHECK-P8-NEXT: mtlr r0 632; CHECK-P8-NEXT: blr 633entry: 634 %0 = load i32, i32* getelementptr inbounds 635 ([5 x i32], [5 x i32]* @swMem, i64 0, i64 3), align 4 636 %conv = sitofp i32 %0 to fp128 637 store fp128 %conv, fp128* %a, align 16 638 ret void 639 640} 641 642; Function Attrs: norecurse nounwind 643define void @uwConv2qp(fp128* nocapture %a, i32 zeroext %b) { 644; CHECK-LABEL: uwConv2qp: 645; CHECK: # %bb.0: # %entry 646; CHECK-NEXT: mtvsrwz v2, r4 647; CHECK-NEXT: xscvudqp v2, v2 648; CHECK-NEXT: stxv v2, 0(r3) 649; CHECK-NEXT: blr 650; 651; CHECK-P8-LABEL: uwConv2qp: 652; CHECK-P8: # %bb.0: # %entry 653; CHECK-P8-NEXT: mflr r0 654; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 655; CHECK-P8-NEXT: .cfi_offset lr, 16 656; CHECK-P8-NEXT: .cfi_offset r30, -16 657; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 658; CHECK-P8-NEXT: std r0, 16(r1) 659; CHECK-P8-NEXT: stdu r1, -48(r1) 660; CHECK-P8-NEXT: mr r30, r3 661; CHECK-P8-NEXT: mr r3, r4 662; CHECK-P8-NEXT: bl __floatunsikf 663; CHECK-P8-NEXT: nop 664; CHECK-P8-NEXT: xxswapd vs0, v2 665; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 666; CHECK-P8-NEXT: addi r1, r1, 48 667; CHECK-P8-NEXT: ld r0, 16(r1) 668; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 669; CHECK-P8-NEXT: mtlr r0 670; CHECK-P8-NEXT: blr 671entry: 672 %conv = uitofp i32 %b to fp128 673 store fp128 %conv, fp128* %a, align 16 674 ret void 675 676} 677 678; Function Attrs: norecurse nounwind 679define void @uwConv2qp_02(fp128* nocapture %a, i32* nocapture readonly %b) { 680; CHECK-LABEL: uwConv2qp_02: 681; CHECK: # %bb.0: # %entry 682; CHECK-NEXT: lxsiwzx v2, 0, r4 683; CHECK-NEXT: xscvudqp v2, v2 684; CHECK-NEXT: stxv v2, 0(r3) 685; CHECK-NEXT: blr 686; 687; CHECK-P8-LABEL: uwConv2qp_02: 688; CHECK-P8: # %bb.0: # %entry 689; CHECK-P8-NEXT: mflr r0 690; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 691; CHECK-P8-NEXT: .cfi_offset lr, 16 692; CHECK-P8-NEXT: .cfi_offset r30, -16 693; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 694; CHECK-P8-NEXT: std r0, 16(r1) 695; CHECK-P8-NEXT: stdu r1, -48(r1) 696; CHECK-P8-NEXT: lwz r4, 0(r4) 697; CHECK-P8-NEXT: mr r30, r3 698; CHECK-P8-NEXT: mr r3, r4 699; CHECK-P8-NEXT: bl __floatunsikf 700; CHECK-P8-NEXT: nop 701; CHECK-P8-NEXT: xxswapd vs0, v2 702; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 703; CHECK-P8-NEXT: addi r1, r1, 48 704; CHECK-P8-NEXT: ld r0, 16(r1) 705; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 706; CHECK-P8-NEXT: mtlr r0 707; CHECK-P8-NEXT: blr 708entry: 709 %0 = load i32, i32* %b, align 4 710 %conv = uitofp i32 %0 to fp128 711 store fp128 %conv, fp128* %a, align 16 712 ret void 713 714} 715 716; Function Attrs: norecurse nounwind 717define void @uwConv2qp_03(fp128* nocapture %a) { 718; CHECK-LABEL: uwConv2qp_03: 719; CHECK: # %bb.0: # %entry 720; CHECK-NEXT: addis r4, r2, .LC3@toc@ha 721; CHECK-NEXT: ld r4, .LC3@toc@l(r4) 722; CHECK-NEXT: addi r4, r4, 12 723; CHECK-NEXT: lxsiwzx v2, 0, r4 724; CHECK-NEXT: xscvudqp v2, v2 725; CHECK-NEXT: stxv v2, 0(r3) 726; CHECK-NEXT: blr 727; 728; CHECK-P8-LABEL: uwConv2qp_03: 729; CHECK-P8: # %bb.0: # %entry 730; CHECK-P8-NEXT: mflr r0 731; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 732; CHECK-P8-NEXT: .cfi_offset lr, 16 733; CHECK-P8-NEXT: .cfi_offset r30, -16 734; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 735; CHECK-P8-NEXT: std r0, 16(r1) 736; CHECK-P8-NEXT: stdu r1, -48(r1) 737; CHECK-P8-NEXT: addis r4, r2, .LC3@toc@ha 738; CHECK-P8-NEXT: mr r30, r3 739; CHECK-P8-NEXT: ld r4, .LC3@toc@l(r4) 740; CHECK-P8-NEXT: lwz r4, 12(r4) 741; CHECK-P8-NEXT: mr r3, r4 742; CHECK-P8-NEXT: bl __floatunsikf 743; CHECK-P8-NEXT: nop 744; CHECK-P8-NEXT: xxswapd vs0, v2 745; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 746; CHECK-P8-NEXT: addi r1, r1, 48 747; CHECK-P8-NEXT: ld r0, 16(r1) 748; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 749; CHECK-P8-NEXT: mtlr r0 750; CHECK-P8-NEXT: blr 751entry: 752 %0 = load i32, i32* getelementptr inbounds 753 ([5 x i32], [5 x i32]* @uwMem, i64 0, i64 3), align 4 754 %conv = uitofp i32 %0 to fp128 755 store fp128 %conv, fp128* %a, align 16 756 ret void 757 758} 759 760; Function Attrs: norecurse nounwind 761define void @uwConv2qp_04(fp128* nocapture %a, 762; CHECK-LABEL: uwConv2qp_04: 763; CHECK: # %bb.0: # %entry 764; CHECK-NEXT: lwz r5, 0(r5) 765; CHECK-NEXT: add r4, r5, r4 766; CHECK-NEXT: mtvsrwz v2, r4 767; CHECK-NEXT: xscvudqp v2, v2 768; CHECK-NEXT: stxv v2, 0(r3) 769; CHECK-NEXT: blr 770; 771; CHECK-P8-LABEL: uwConv2qp_04: 772; CHECK-P8: # %bb.0: # %entry 773; CHECK-P8-NEXT: mflr r0 774; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 775; CHECK-P8-NEXT: .cfi_offset lr, 16 776; CHECK-P8-NEXT: .cfi_offset r30, -16 777; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 778; CHECK-P8-NEXT: std r0, 16(r1) 779; CHECK-P8-NEXT: stdu r1, -48(r1) 780; CHECK-P8-NEXT: mr r30, r3 781; CHECK-P8-NEXT: lwz r3, 0(r5) 782; CHECK-P8-NEXT: add r3, r3, r4 783; CHECK-P8-NEXT: clrldi r3, r3, 32 784; CHECK-P8-NEXT: bl __floatunsikf 785; CHECK-P8-NEXT: nop 786; CHECK-P8-NEXT: xxswapd vs0, v2 787; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 788; CHECK-P8-NEXT: addi r1, r1, 48 789; CHECK-P8-NEXT: ld r0, 16(r1) 790; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 791; CHECK-P8-NEXT: mtlr r0 792; CHECK-P8-NEXT: blr 793 i32 zeroext %b, i32* nocapture readonly %c) { 794entry: 795 %0 = load i32, i32* %c, align 4 796 %add = add i32 %0, %b 797 %conv = uitofp i32 %add to fp128 798 store fp128 %conv, fp128* %a, align 16 799 ret void 800 801} 802 803; Function Attrs: norecurse nounwind 804define void @uhwConv2qp(fp128* nocapture %a, i16 zeroext %b) { 805; CHECK-LABEL: uhwConv2qp: 806; CHECK: # %bb.0: # %entry 807; CHECK-NEXT: mtvsrwz v2, r4 808; CHECK-NEXT: xscvudqp v2, v2 809; CHECK-NEXT: stxv v2, 0(r3) 810; CHECK-NEXT: blr 811; 812; CHECK-P8-LABEL: uhwConv2qp: 813; CHECK-P8: # %bb.0: # %entry 814; CHECK-P8-NEXT: mflr r0 815; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 816; CHECK-P8-NEXT: .cfi_offset lr, 16 817; CHECK-P8-NEXT: .cfi_offset r30, -16 818; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 819; CHECK-P8-NEXT: std r0, 16(r1) 820; CHECK-P8-NEXT: stdu r1, -48(r1) 821; CHECK-P8-NEXT: mr r30, r3 822; CHECK-P8-NEXT: mr r3, r4 823; CHECK-P8-NEXT: bl __floatunsikf 824; CHECK-P8-NEXT: nop 825; CHECK-P8-NEXT: xxswapd vs0, v2 826; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 827; CHECK-P8-NEXT: addi r1, r1, 48 828; CHECK-P8-NEXT: ld r0, 16(r1) 829; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 830; CHECK-P8-NEXT: mtlr r0 831; CHECK-P8-NEXT: blr 832entry: 833 %conv = uitofp i16 %b to fp128 834 store fp128 %conv, fp128* %a, align 16 835 ret void 836 837 838} 839 840; Function Attrs: norecurse nounwind 841define void @uhwConv2qp_02(fp128* nocapture %a, i16* nocapture readonly %b) { 842; CHECK-LABEL: uhwConv2qp_02: 843; CHECK: # %bb.0: # %entry 844; CHECK-NEXT: lxsihzx v2, 0, r4 845; CHECK-NEXT: xscvudqp v2, v2 846; CHECK-NEXT: stxv v2, 0(r3) 847; CHECK-NEXT: blr 848; 849; CHECK-P8-LABEL: uhwConv2qp_02: 850; CHECK-P8: # %bb.0: # %entry 851; CHECK-P8-NEXT: mflr r0 852; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 853; CHECK-P8-NEXT: .cfi_offset lr, 16 854; CHECK-P8-NEXT: .cfi_offset r30, -16 855; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 856; CHECK-P8-NEXT: std r0, 16(r1) 857; CHECK-P8-NEXT: stdu r1, -48(r1) 858; CHECK-P8-NEXT: lhz r4, 0(r4) 859; CHECK-P8-NEXT: mr r30, r3 860; CHECK-P8-NEXT: mr r3, r4 861; CHECK-P8-NEXT: bl __floatunsikf 862; CHECK-P8-NEXT: nop 863; CHECK-P8-NEXT: xxswapd vs0, v2 864; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 865; CHECK-P8-NEXT: addi r1, r1, 48 866; CHECK-P8-NEXT: ld r0, 16(r1) 867; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 868; CHECK-P8-NEXT: mtlr r0 869; CHECK-P8-NEXT: blr 870entry: 871 %0 = load i16, i16* %b, align 2 872 %conv = uitofp i16 %0 to fp128 873 store fp128 %conv, fp128* %a, align 16 874 ret void 875 876} 877 878; Function Attrs: norecurse nounwind 879define void @uhwConv2qp_03(fp128* nocapture %a) { 880; CHECK-LABEL: uhwConv2qp_03: 881; CHECK: # %bb.0: # %entry 882; CHECK-NEXT: addis r4, r2, .LC4@toc@ha 883; CHECK-NEXT: ld r4, .LC4@toc@l(r4) 884; CHECK-NEXT: addi r4, r4, 6 885; CHECK-NEXT: lxsihzx v2, 0, r4 886; CHECK-NEXT: xscvudqp v2, v2 887; CHECK-NEXT: stxv v2, 0(r3) 888; CHECK-NEXT: blr 889; 890; CHECK-P8-LABEL: uhwConv2qp_03: 891; CHECK-P8: # %bb.0: # %entry 892; CHECK-P8-NEXT: mflr r0 893; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 894; CHECK-P8-NEXT: .cfi_offset lr, 16 895; CHECK-P8-NEXT: .cfi_offset r30, -16 896; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 897; CHECK-P8-NEXT: std r0, 16(r1) 898; CHECK-P8-NEXT: stdu r1, -48(r1) 899; CHECK-P8-NEXT: addis r4, r2, .LC4@toc@ha 900; CHECK-P8-NEXT: mr r30, r3 901; CHECK-P8-NEXT: ld r4, .LC4@toc@l(r4) 902; CHECK-P8-NEXT: lhz r4, 6(r4) 903; CHECK-P8-NEXT: mr r3, r4 904; CHECK-P8-NEXT: bl __floatunsikf 905; CHECK-P8-NEXT: nop 906; CHECK-P8-NEXT: xxswapd vs0, v2 907; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 908; CHECK-P8-NEXT: addi r1, r1, 48 909; CHECK-P8-NEXT: ld r0, 16(r1) 910; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 911; CHECK-P8-NEXT: mtlr r0 912; CHECK-P8-NEXT: blr 913entry: 914 %0 = load i16, i16* getelementptr inbounds 915 ([5 x i16], [5 x i16]* @uhwMem, i64 0, i64 3), align 2 916 %conv = uitofp i16 %0 to fp128 917 store fp128 %conv, fp128* %a, align 16 918 ret void 919 920} 921 922; Function Attrs: norecurse nounwind 923define void @uhwConv2qp_04(fp128* nocapture %a, i16 zeroext %b, 924; CHECK-LABEL: uhwConv2qp_04: 925; CHECK: # %bb.0: # %entry 926; CHECK-NEXT: lhz r5, 0(r5) 927; CHECK-NEXT: add r4, r5, r4 928; CHECK-NEXT: mtvsrwa v2, r4 929; CHECK-NEXT: xscvsdqp v2, v2 930; CHECK-NEXT: stxv v2, 0(r3) 931; CHECK-NEXT: blr 932; 933; CHECK-P8-LABEL: uhwConv2qp_04: 934; CHECK-P8: # %bb.0: # %entry 935; CHECK-P8-NEXT: mflr r0 936; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 937; CHECK-P8-NEXT: .cfi_offset lr, 16 938; CHECK-P8-NEXT: .cfi_offset r30, -16 939; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 940; CHECK-P8-NEXT: std r0, 16(r1) 941; CHECK-P8-NEXT: stdu r1, -48(r1) 942; CHECK-P8-NEXT: mr r30, r3 943; CHECK-P8-NEXT: lhz r3, 0(r5) 944; CHECK-P8-NEXT: add r3, r3, r4 945; CHECK-P8-NEXT: clrldi r3, r3, 32 946; CHECK-P8-NEXT: bl __floatsikf 947; CHECK-P8-NEXT: nop 948; CHECK-P8-NEXT: xxswapd vs0, v2 949; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 950; CHECK-P8-NEXT: addi r1, r1, 48 951; CHECK-P8-NEXT: ld r0, 16(r1) 952; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 953; CHECK-P8-NEXT: mtlr r0 954; CHECK-P8-NEXT: blr 955 i16* nocapture readonly %c) { 956entry: 957 %conv = zext i16 %b to i32 958 %0 = load i16, i16* %c, align 2 959 %conv1 = zext i16 %0 to i32 960 %add = add nuw nsw i32 %conv1, %conv 961 %conv2 = sitofp i32 %add to fp128 962 store fp128 %conv2, fp128* %a, align 16 963 ret void 964 965} 966 967; Function Attrs: norecurse nounwind 968define void @ubConv2qp(fp128* nocapture %a, i8 zeroext %b) { 969; CHECK-LABEL: ubConv2qp: 970; CHECK: # %bb.0: # %entry 971; CHECK-NEXT: mtvsrwz v2, r4 972; CHECK-NEXT: xscvudqp v2, v2 973; CHECK-NEXT: stxv v2, 0(r3) 974; CHECK-NEXT: blr 975; 976; CHECK-P8-LABEL: ubConv2qp: 977; CHECK-P8: # %bb.0: # %entry 978; CHECK-P8-NEXT: mflr r0 979; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 980; CHECK-P8-NEXT: .cfi_offset lr, 16 981; CHECK-P8-NEXT: .cfi_offset r30, -16 982; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 983; CHECK-P8-NEXT: std r0, 16(r1) 984; CHECK-P8-NEXT: stdu r1, -48(r1) 985; CHECK-P8-NEXT: mr r30, r3 986; CHECK-P8-NEXT: mr r3, r4 987; CHECK-P8-NEXT: bl __floatunsikf 988; CHECK-P8-NEXT: nop 989; CHECK-P8-NEXT: xxswapd vs0, v2 990; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 991; CHECK-P8-NEXT: addi r1, r1, 48 992; CHECK-P8-NEXT: ld r0, 16(r1) 993; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 994; CHECK-P8-NEXT: mtlr r0 995; CHECK-P8-NEXT: blr 996entry: 997 %conv = uitofp i8 %b to fp128 998 store fp128 %conv, fp128* %a, align 16 999 ret void 1000 1001} 1002 1003; Function Attrs: norecurse nounwind 1004define void @ubConv2qp_02(fp128* nocapture %a, i8* nocapture readonly %b) { 1005; CHECK-LABEL: ubConv2qp_02: 1006; CHECK: # %bb.0: # %entry 1007; CHECK-NEXT: lxsibzx v2, 0, r4 1008; CHECK-NEXT: xscvudqp v2, v2 1009; CHECK-NEXT: stxv v2, 0(r3) 1010; CHECK-NEXT: blr 1011; 1012; CHECK-P8-LABEL: ubConv2qp_02: 1013; CHECK-P8: # %bb.0: # %entry 1014; CHECK-P8-NEXT: mflr r0 1015; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1016; CHECK-P8-NEXT: .cfi_offset lr, 16 1017; CHECK-P8-NEXT: .cfi_offset r30, -16 1018; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1019; CHECK-P8-NEXT: std r0, 16(r1) 1020; CHECK-P8-NEXT: stdu r1, -48(r1) 1021; CHECK-P8-NEXT: lbz r4, 0(r4) 1022; CHECK-P8-NEXT: mr r30, r3 1023; CHECK-P8-NEXT: mr r3, r4 1024; CHECK-P8-NEXT: bl __floatunsikf 1025; CHECK-P8-NEXT: nop 1026; CHECK-P8-NEXT: xxswapd vs0, v2 1027; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1028; CHECK-P8-NEXT: addi r1, r1, 48 1029; CHECK-P8-NEXT: ld r0, 16(r1) 1030; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1031; CHECK-P8-NEXT: mtlr r0 1032; CHECK-P8-NEXT: blr 1033entry: 1034 %0 = load i8, i8* %b, align 1 1035 %conv = uitofp i8 %0 to fp128 1036 store fp128 %conv, fp128* %a, align 16 1037 ret void 1038 1039} 1040 1041; Function Attrs: norecurse nounwind 1042define void @ubConv2qp_03(fp128* nocapture %a) { 1043; CHECK-LABEL: ubConv2qp_03: 1044; CHECK: # %bb.0: # %entry 1045; CHECK-NEXT: addis r4, r2, .LC5@toc@ha 1046; CHECK-NEXT: ld r4, .LC5@toc@l(r4) 1047; CHECK-NEXT: addi r4, r4, 2 1048; CHECK-NEXT: lxsibzx v2, 0, r4 1049; CHECK-NEXT: xscvudqp v2, v2 1050; CHECK-NEXT: stxv v2, 0(r3) 1051; CHECK-NEXT: blr 1052; 1053; CHECK-P8-LABEL: ubConv2qp_03: 1054; CHECK-P8: # %bb.0: # %entry 1055; CHECK-P8-NEXT: mflr r0 1056; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1057; CHECK-P8-NEXT: .cfi_offset lr, 16 1058; CHECK-P8-NEXT: .cfi_offset r30, -16 1059; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1060; CHECK-P8-NEXT: std r0, 16(r1) 1061; CHECK-P8-NEXT: stdu r1, -48(r1) 1062; CHECK-P8-NEXT: addis r4, r2, .LC5@toc@ha 1063; CHECK-P8-NEXT: mr r30, r3 1064; CHECK-P8-NEXT: ld r4, .LC5@toc@l(r4) 1065; CHECK-P8-NEXT: lbz r4, 2(r4) 1066; CHECK-P8-NEXT: mr r3, r4 1067; CHECK-P8-NEXT: bl __floatunsikf 1068; CHECK-P8-NEXT: nop 1069; CHECK-P8-NEXT: xxswapd vs0, v2 1070; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1071; CHECK-P8-NEXT: addi r1, r1, 48 1072; CHECK-P8-NEXT: ld r0, 16(r1) 1073; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1074; CHECK-P8-NEXT: mtlr r0 1075; CHECK-P8-NEXT: blr 1076entry: 1077 %0 = load i8, i8* getelementptr inbounds 1078 ([5 x i8], [5 x i8]* @ubMem, i64 0, i64 2), align 1 1079 %conv = uitofp i8 %0 to fp128 1080 store fp128 %conv, fp128* %a, align 16 1081 ret void 1082 1083} 1084 1085; Function Attrs: norecurse nounwind 1086define void @ubConv2qp_04(fp128* nocapture %a, i8 zeroext %b, 1087; CHECK-LABEL: ubConv2qp_04: 1088; CHECK: # %bb.0: # %entry 1089; CHECK-NEXT: lbz r5, 0(r5) 1090; CHECK-NEXT: add r4, r5, r4 1091; CHECK-NEXT: mtvsrwa v2, r4 1092; CHECK-NEXT: xscvsdqp v2, v2 1093; CHECK-NEXT: stxv v2, 0(r3) 1094; CHECK-NEXT: blr 1095; 1096; CHECK-P8-LABEL: ubConv2qp_04: 1097; CHECK-P8: # %bb.0: # %entry 1098; CHECK-P8-NEXT: mflr r0 1099; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1100; CHECK-P8-NEXT: .cfi_offset lr, 16 1101; CHECK-P8-NEXT: .cfi_offset r30, -16 1102; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1103; CHECK-P8-NEXT: std r0, 16(r1) 1104; CHECK-P8-NEXT: stdu r1, -48(r1) 1105; CHECK-P8-NEXT: mr r30, r3 1106; CHECK-P8-NEXT: lbz r3, 0(r5) 1107; CHECK-P8-NEXT: add r3, r3, r4 1108; CHECK-P8-NEXT: clrldi r3, r3, 32 1109; CHECK-P8-NEXT: bl __floatsikf 1110; CHECK-P8-NEXT: nop 1111; CHECK-P8-NEXT: xxswapd vs0, v2 1112; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1113; CHECK-P8-NEXT: addi r1, r1, 48 1114; CHECK-P8-NEXT: ld r0, 16(r1) 1115; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1116; CHECK-P8-NEXT: mtlr r0 1117; CHECK-P8-NEXT: blr 1118 i8* nocapture readonly %c) { 1119entry: 1120 %conv = zext i8 %b to i32 1121 %0 = load i8, i8* %c, align 1 1122 %conv1 = zext i8 %0 to i32 1123 %add = add nuw nsw i32 %conv1, %conv 1124 %conv2 = sitofp i32 %add to fp128 1125 store fp128 %conv2, fp128* %a, align 16 1126 ret void 1127 1128} 1129 1130; Convert QP to DP 1131 1132@f128Array = global [4 x fp128] 1133 [fp128 0xL00000000000000004004C00000000000, 1134 fp128 0xLF000000000000000400808AB851EB851, 1135 fp128 0xL5000000000000000400E0C26324C8366, 1136 fp128 0xL8000000000000000400A24E2E147AE14], align 16 1137@f128global = global fp128 0xL300000000000000040089CA8F5C28F5C, align 16 1138 1139; Function Attrs: norecurse nounwind readonly 1140define double @qpConv2dp(fp128* nocapture readonly %a) { 1141; CHECK-LABEL: qpConv2dp: 1142; CHECK: # %bb.0: # %entry 1143; CHECK-NEXT: lxv v2, 0(r3) 1144; CHECK-NEXT: xscvqpdp v2, v2 1145; CHECK-NEXT: xscpsgndp f1, v2, v2 1146; CHECK-NEXT: blr 1147; 1148; CHECK-P8-LABEL: qpConv2dp: 1149; CHECK-P8: # %bb.0: # %entry 1150; CHECK-P8-NEXT: mflr r0 1151; CHECK-P8-NEXT: std r0, 16(r1) 1152; CHECK-P8-NEXT: stdu r1, -32(r1) 1153; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1154; CHECK-P8-NEXT: .cfi_offset lr, 16 1155; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 1156; CHECK-P8-NEXT: xxswapd v2, vs0 1157; CHECK-P8-NEXT: bl __trunckfdf2 1158; CHECK-P8-NEXT: nop 1159; CHECK-P8-NEXT: addi r1, r1, 32 1160; CHECK-P8-NEXT: ld r0, 16(r1) 1161; CHECK-P8-NEXT: mtlr r0 1162; CHECK-P8-NEXT: blr 1163entry: 1164 %0 = load fp128, fp128* %a, align 16 1165 %conv = fptrunc fp128 %0 to double 1166 ret double %conv 1167} 1168 1169; Function Attrs: norecurse nounwind 1170define void @qpConv2dp_02(double* nocapture %res) { 1171; CHECK-LABEL: qpConv2dp_02: 1172; CHECK: # %bb.0: # %entry 1173; CHECK-NEXT: addis r4, r2, .LC6@toc@ha 1174; CHECK-NEXT: ld r4, .LC6@toc@l(r4) 1175; CHECK-NEXT: lxv v2, 0(r4) 1176; CHECK-NEXT: xscvqpdp v2, v2 1177; CHECK-NEXT: stxsd v2, 0(r3) 1178; CHECK-NEXT: blr 1179; 1180; CHECK-P8-LABEL: qpConv2dp_02: 1181; CHECK-P8: # %bb.0: # %entry 1182; CHECK-P8-NEXT: mflr r0 1183; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1184; CHECK-P8-NEXT: .cfi_offset lr, 16 1185; CHECK-P8-NEXT: .cfi_offset r30, -16 1186; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1187; CHECK-P8-NEXT: std r0, 16(r1) 1188; CHECK-P8-NEXT: stdu r1, -48(r1) 1189; CHECK-P8-NEXT: addis r4, r2, .LC6@toc@ha 1190; CHECK-P8-NEXT: mr r30, r3 1191; CHECK-P8-NEXT: ld r4, .LC6@toc@l(r4) 1192; CHECK-P8-NEXT: lxvd2x vs0, 0, r4 1193; CHECK-P8-NEXT: xxswapd v2, vs0 1194; CHECK-P8-NEXT: bl __trunckfdf2 1195; CHECK-P8-NEXT: nop 1196; CHECK-P8-NEXT: stfd f1, 0(r30) 1197; CHECK-P8-NEXT: addi r1, r1, 48 1198; CHECK-P8-NEXT: ld r0, 16(r1) 1199; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1200; CHECK-P8-NEXT: mtlr r0 1201; CHECK-P8-NEXT: blr 1202entry: 1203 %0 = load fp128, fp128* @f128global, align 16 1204 %conv = fptrunc fp128 %0 to double 1205 store double %conv, double* %res, align 8 1206 ret void 1207} 1208 1209; Function Attrs: norecurse nounwind 1210define void @qpConv2dp_03(double* nocapture %res, i32 signext %idx) { 1211; CHECK-LABEL: qpConv2dp_03: 1212; CHECK: # %bb.0: # %entry 1213; CHECK-NEXT: addis r5, r2, .LC7@toc@ha 1214; CHECK-NEXT: sldi r4, r4, 3 1215; CHECK-NEXT: ld r5, .LC7@toc@l(r5) 1216; CHECK-NEXT: lxv v2, 0(r5) 1217; CHECK-NEXT: xscvqpdp v2, v2 1218; CHECK-NEXT: stxsdx v2, r3, r4 1219; CHECK-NEXT: blr 1220; 1221; CHECK-P8-LABEL: qpConv2dp_03: 1222; CHECK-P8: # %bb.0: # %entry 1223; CHECK-P8-NEXT: mflr r0 1224; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1225; CHECK-P8-NEXT: .cfi_offset lr, 16 1226; CHECK-P8-NEXT: .cfi_offset r29, -24 1227; CHECK-P8-NEXT: .cfi_offset r30, -16 1228; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1229; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1230; CHECK-P8-NEXT: std r0, 16(r1) 1231; CHECK-P8-NEXT: stdu r1, -64(r1) 1232; CHECK-P8-NEXT: mr r30, r4 1233; CHECK-P8-NEXT: addis r4, r2, .LC7@toc@ha 1234; CHECK-P8-NEXT: mr r29, r3 1235; CHECK-P8-NEXT: ld r4, .LC7@toc@l(r4) 1236; CHECK-P8-NEXT: lxvd2x vs0, 0, r4 1237; CHECK-P8-NEXT: xxswapd v2, vs0 1238; CHECK-P8-NEXT: bl __trunckfdf2 1239; CHECK-P8-NEXT: nop 1240; CHECK-P8-NEXT: sldi r3, r30, 3 1241; CHECK-P8-NEXT: stfdx f1, r29, r3 1242; CHECK-P8-NEXT: addi r1, r1, 64 1243; CHECK-P8-NEXT: ld r0, 16(r1) 1244; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1245; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1246; CHECK-P8-NEXT: mtlr r0 1247; CHECK-P8-NEXT: blr 1248entry: 1249 %0 = load fp128, fp128* getelementptr inbounds ([4 x fp128], [4 x fp128]* @f128Array, i64 0, i64 0), align 16 1250 %conv = fptrunc fp128 %0 to double 1251 %idxprom = sext i32 %idx to i64 1252 %arrayidx = getelementptr inbounds double, double* %res, i64 %idxprom 1253 store double %conv, double* %arrayidx, align 8 1254 ret void 1255} 1256 1257; Function Attrs: norecurse nounwind 1258define void @qpConv2dp_04(fp128* nocapture readonly %a, fp128* nocapture readonly %b, double* nocapture %res) { 1259; CHECK-LABEL: qpConv2dp_04: 1260; CHECK: # %bb.0: # %entry 1261; CHECK-NEXT: lxv v2, 0(r3) 1262; CHECK-NEXT: lxv v3, 0(r4) 1263; CHECK-NEXT: xsaddqp v2, v2, v3 1264; CHECK-NEXT: xscvqpdp v2, v2 1265; CHECK-NEXT: stxsd v2, 0(r5) 1266; CHECK-NEXT: blr 1267; 1268; CHECK-P8-LABEL: qpConv2dp_04: 1269; CHECK-P8: # %bb.0: # %entry 1270; CHECK-P8-NEXT: mflr r0 1271; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1272; CHECK-P8-NEXT: .cfi_offset lr, 16 1273; CHECK-P8-NEXT: .cfi_offset r30, -16 1274; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1275; CHECK-P8-NEXT: std r0, 16(r1) 1276; CHECK-P8-NEXT: stdu r1, -48(r1) 1277; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 1278; CHECK-P8-NEXT: lxvd2x vs1, 0, r4 1279; CHECK-P8-NEXT: mr r30, r5 1280; CHECK-P8-NEXT: xxswapd v2, vs0 1281; CHECK-P8-NEXT: xxswapd v3, vs1 1282; CHECK-P8-NEXT: bl __addkf3 1283; CHECK-P8-NEXT: nop 1284; CHECK-P8-NEXT: bl __trunckfdf2 1285; CHECK-P8-NEXT: nop 1286; CHECK-P8-NEXT: stfd f1, 0(r30) 1287; CHECK-P8-NEXT: addi r1, r1, 48 1288; CHECK-P8-NEXT: ld r0, 16(r1) 1289; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1290; CHECK-P8-NEXT: mtlr r0 1291; CHECK-P8-NEXT: blr 1292entry: 1293 %0 = load fp128, fp128* %a, align 16 1294 %1 = load fp128, fp128* %b, align 16 1295 %add = fadd fp128 %0, %1 1296 %conv = fptrunc fp128 %add to double 1297 store double %conv, double* %res, align 8 1298 ret void 1299} 1300 1301; Convert QP to SP 1302 1303; Function Attrs: norecurse nounwind readonly 1304define float @qpConv2sp(fp128* nocapture readonly %a) { 1305; CHECK-LABEL: qpConv2sp: 1306; CHECK: # %bb.0: # %entry 1307; CHECK-NEXT: lxv v2, 0(r3) 1308; CHECK-NEXT: xscvqpdpo v2, v2 1309; CHECK-NEXT: xsrsp f1, v2 1310; CHECK-NEXT: blr 1311; 1312; CHECK-P8-LABEL: qpConv2sp: 1313; CHECK-P8: # %bb.0: # %entry 1314; CHECK-P8-NEXT: mflr r0 1315; CHECK-P8-NEXT: std r0, 16(r1) 1316; CHECK-P8-NEXT: stdu r1, -32(r1) 1317; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1318; CHECK-P8-NEXT: .cfi_offset lr, 16 1319; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 1320; CHECK-P8-NEXT: xxswapd v2, vs0 1321; CHECK-P8-NEXT: bl __trunckfsf2 1322; CHECK-P8-NEXT: nop 1323; CHECK-P8-NEXT: addi r1, r1, 32 1324; CHECK-P8-NEXT: ld r0, 16(r1) 1325; CHECK-P8-NEXT: mtlr r0 1326; CHECK-P8-NEXT: blr 1327entry: 1328 %0 = load fp128, fp128* %a, align 16 1329 %conv = fptrunc fp128 %0 to float 1330 ret float %conv 1331} 1332 1333; Function Attrs: norecurse nounwind 1334define void @qpConv2sp_02(float* nocapture %res) { 1335; CHECK-LABEL: qpConv2sp_02: 1336; CHECK: # %bb.0: # %entry 1337; CHECK-NEXT: addis r4, r2, .LC6@toc@ha 1338; CHECK-NEXT: ld r4, .LC6@toc@l(r4) 1339; CHECK-NEXT: lxv v2, 0(r4) 1340; CHECK-NEXT: xscvqpdpo v2, v2 1341; CHECK-NEXT: xsrsp f0, v2 1342; CHECK-NEXT: stfs f0, 0(r3) 1343; CHECK-NEXT: blr 1344; 1345; CHECK-P8-LABEL: qpConv2sp_02: 1346; CHECK-P8: # %bb.0: # %entry 1347; CHECK-P8-NEXT: mflr r0 1348; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1349; CHECK-P8-NEXT: .cfi_offset lr, 16 1350; CHECK-P8-NEXT: .cfi_offset r30, -16 1351; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1352; CHECK-P8-NEXT: std r0, 16(r1) 1353; CHECK-P8-NEXT: stdu r1, -48(r1) 1354; CHECK-P8-NEXT: addis r4, r2, .LC6@toc@ha 1355; CHECK-P8-NEXT: mr r30, r3 1356; CHECK-P8-NEXT: ld r4, .LC6@toc@l(r4) 1357; CHECK-P8-NEXT: lxvd2x vs0, 0, r4 1358; CHECK-P8-NEXT: xxswapd v2, vs0 1359; CHECK-P8-NEXT: bl __trunckfsf2 1360; CHECK-P8-NEXT: nop 1361; CHECK-P8-NEXT: stfs f1, 0(r30) 1362; CHECK-P8-NEXT: addi r1, r1, 48 1363; CHECK-P8-NEXT: ld r0, 16(r1) 1364; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1365; CHECK-P8-NEXT: mtlr r0 1366; CHECK-P8-NEXT: blr 1367entry: 1368 %0 = load fp128, fp128* @f128global, align 16 1369 %conv = fptrunc fp128 %0 to float 1370 store float %conv, float* %res, align 4 1371 ret void 1372} 1373 1374; Function Attrs: norecurse nounwind 1375define void @qpConv2sp_03(float* nocapture %res, i32 signext %idx) { 1376; CHECK-LABEL: qpConv2sp_03: 1377; CHECK: # %bb.0: # %entry 1378; CHECK-NEXT: addis r5, r2, .LC7@toc@ha 1379; CHECK-NEXT: sldi r4, r4, 2 1380; CHECK-NEXT: ld r5, .LC7@toc@l(r5) 1381; CHECK-NEXT: lxv v2, 48(r5) 1382; CHECK-NEXT: xscvqpdpo v2, v2 1383; CHECK-NEXT: xsrsp f0, v2 1384; CHECK-NEXT: stfsx f0, r3, r4 1385; CHECK-NEXT: blr 1386; 1387; CHECK-P8-LABEL: qpConv2sp_03: 1388; CHECK-P8: # %bb.0: # %entry 1389; CHECK-P8-NEXT: mflr r0 1390; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1391; CHECK-P8-NEXT: .cfi_offset lr, 16 1392; CHECK-P8-NEXT: .cfi_offset r29, -24 1393; CHECK-P8-NEXT: .cfi_offset r30, -16 1394; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1395; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1396; CHECK-P8-NEXT: std r0, 16(r1) 1397; CHECK-P8-NEXT: stdu r1, -64(r1) 1398; CHECK-P8-NEXT: mr r30, r4 1399; CHECK-P8-NEXT: addis r4, r2, .LC7@toc@ha 1400; CHECK-P8-NEXT: mr r29, r3 1401; CHECK-P8-NEXT: ld r4, .LC7@toc@l(r4) 1402; CHECK-P8-NEXT: addi r4, r4, 48 1403; CHECK-P8-NEXT: lxvd2x vs0, 0, r4 1404; CHECK-P8-NEXT: xxswapd v2, vs0 1405; CHECK-P8-NEXT: bl __trunckfsf2 1406; CHECK-P8-NEXT: nop 1407; CHECK-P8-NEXT: sldi r3, r30, 2 1408; CHECK-P8-NEXT: stfsx f1, r29, r3 1409; CHECK-P8-NEXT: addi r1, r1, 64 1410; CHECK-P8-NEXT: ld r0, 16(r1) 1411; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1412; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1413; CHECK-P8-NEXT: mtlr r0 1414; CHECK-P8-NEXT: blr 1415entry: 1416 %0 = load fp128, fp128* getelementptr inbounds ([4 x fp128], [4 x fp128]* @f128Array, i64 0, i64 3), align 16 1417 %conv = fptrunc fp128 %0 to float 1418 %idxprom = sext i32 %idx to i64 1419 %arrayidx = getelementptr inbounds float, float* %res, i64 %idxprom 1420 store float %conv, float* %arrayidx, align 4 1421 ret void 1422} 1423 1424; Function Attrs: norecurse nounwind 1425define void @qpConv2sp_04(fp128* nocapture readonly %a, fp128* nocapture readonly %b, float* nocapture %res) { 1426; CHECK-LABEL: qpConv2sp_04: 1427; CHECK: # %bb.0: # %entry 1428; CHECK-NEXT: lxv v2, 0(r3) 1429; CHECK-NEXT: lxv v3, 0(r4) 1430; CHECK-NEXT: xsaddqp v2, v2, v3 1431; CHECK-NEXT: xscvqpdpo v2, v2 1432; CHECK-NEXT: xsrsp f0, v2 1433; CHECK-NEXT: stfs f0, 0(r5) 1434; CHECK-NEXT: blr 1435; 1436; CHECK-P8-LABEL: qpConv2sp_04: 1437; CHECK-P8: # %bb.0: # %entry 1438; CHECK-P8-NEXT: mflr r0 1439; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1440; CHECK-P8-NEXT: .cfi_offset lr, 16 1441; CHECK-P8-NEXT: .cfi_offset r30, -16 1442; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1443; CHECK-P8-NEXT: std r0, 16(r1) 1444; CHECK-P8-NEXT: stdu r1, -48(r1) 1445; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 1446; CHECK-P8-NEXT: lxvd2x vs1, 0, r4 1447; CHECK-P8-NEXT: mr r30, r5 1448; CHECK-P8-NEXT: xxswapd v2, vs0 1449; CHECK-P8-NEXT: xxswapd v3, vs1 1450; CHECK-P8-NEXT: bl __addkf3 1451; CHECK-P8-NEXT: nop 1452; CHECK-P8-NEXT: bl __trunckfsf2 1453; CHECK-P8-NEXT: nop 1454; CHECK-P8-NEXT: stfs f1, 0(r30) 1455; CHECK-P8-NEXT: addi r1, r1, 48 1456; CHECK-P8-NEXT: ld r0, 16(r1) 1457; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1458; CHECK-P8-NEXT: mtlr r0 1459; CHECK-P8-NEXT: blr 1460entry: 1461 %0 = load fp128, fp128* %a, align 16 1462 %1 = load fp128, fp128* %b, align 16 1463 %add = fadd fp128 %0, %1 1464 %conv = fptrunc fp128 %add to float 1465 store float %conv, float* %res, align 4 1466 ret void 1467} 1468 1469@f128Glob = common global fp128 0xL00000000000000000000000000000000, align 16 1470 1471; Function Attrs: norecurse nounwind readnone 1472define fp128 @dpConv2qp(double %a) { 1473; CHECK-LABEL: dpConv2qp: 1474; CHECK: # %bb.0: # %entry 1475; CHECK-NEXT: xscpsgndp v2, f1, f1 1476; CHECK-NEXT: xscvdpqp v2, v2 1477; CHECK-NEXT: blr 1478; 1479; CHECK-P8-LABEL: dpConv2qp: 1480; CHECK-P8: # %bb.0: # %entry 1481; CHECK-P8-NEXT: mflr r0 1482; CHECK-P8-NEXT: std r0, 16(r1) 1483; CHECK-P8-NEXT: stdu r1, -32(r1) 1484; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1485; CHECK-P8-NEXT: .cfi_offset lr, 16 1486; CHECK-P8-NEXT: bl __extenddfkf2 1487; CHECK-P8-NEXT: nop 1488; CHECK-P8-NEXT: addi r1, r1, 32 1489; CHECK-P8-NEXT: ld r0, 16(r1) 1490; CHECK-P8-NEXT: mtlr r0 1491; CHECK-P8-NEXT: blr 1492entry: 1493 %conv = fpext double %a to fp128 1494 ret fp128 %conv 1495} 1496 1497; Function Attrs: norecurse nounwind 1498define void @dpConv2qp_02(double* nocapture readonly %a) { 1499; CHECK-LABEL: dpConv2qp_02: 1500; CHECK: # %bb.0: # %entry 1501; CHECK-NEXT: lxsd v2, 0(r3) 1502; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1503; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1504; CHECK-NEXT: xscvdpqp v2, v2 1505; CHECK-NEXT: stxv v2, 0(r3) 1506; CHECK-NEXT: blr 1507; 1508; CHECK-P8-LABEL: dpConv2qp_02: 1509; CHECK-P8: # %bb.0: # %entry 1510; CHECK-P8-NEXT: mflr r0 1511; CHECK-P8-NEXT: std r0, 16(r1) 1512; CHECK-P8-NEXT: stdu r1, -32(r1) 1513; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1514; CHECK-P8-NEXT: .cfi_offset lr, 16 1515; CHECK-P8-NEXT: lfd f1, 0(r3) 1516; CHECK-P8-NEXT: bl __extenddfkf2 1517; CHECK-P8-NEXT: nop 1518; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1519; CHECK-P8-NEXT: xxswapd vs0, v2 1520; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1521; CHECK-P8-NEXT: stxvd2x vs0, 0, r3 1522; CHECK-P8-NEXT: addi r1, r1, 32 1523; CHECK-P8-NEXT: ld r0, 16(r1) 1524; CHECK-P8-NEXT: mtlr r0 1525; CHECK-P8-NEXT: blr 1526entry: 1527 %0 = load double, double* %a, align 8 1528 %conv = fpext double %0 to fp128 1529 store fp128 %conv, fp128* @f128Glob, align 16 1530 ret void 1531} 1532 1533; Function Attrs: norecurse nounwind 1534define void @dpConv2qp_02b(double* nocapture readonly %a, i32 signext %idx) { 1535; CHECK-LABEL: dpConv2qp_02b: 1536; CHECK: # %bb.0: # %entry 1537; CHECK-NEXT: sldi r4, r4, 3 1538; CHECK-NEXT: lxsdx v2, r3, r4 1539; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1540; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1541; CHECK-NEXT: xscvdpqp v2, v2 1542; CHECK-NEXT: stxv v2, 0(r3) 1543; CHECK-NEXT: blr 1544; 1545; CHECK-P8-LABEL: dpConv2qp_02b: 1546; CHECK-P8: # %bb.0: # %entry 1547; CHECK-P8-NEXT: mflr r0 1548; CHECK-P8-NEXT: std r0, 16(r1) 1549; CHECK-P8-NEXT: stdu r1, -32(r1) 1550; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1551; CHECK-P8-NEXT: .cfi_offset lr, 16 1552; CHECK-P8-NEXT: sldi r4, r4, 3 1553; CHECK-P8-NEXT: lfdx f1, r3, r4 1554; CHECK-P8-NEXT: bl __extenddfkf2 1555; CHECK-P8-NEXT: nop 1556; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1557; CHECK-P8-NEXT: xxswapd vs0, v2 1558; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1559; CHECK-P8-NEXT: stxvd2x vs0, 0, r3 1560; CHECK-P8-NEXT: addi r1, r1, 32 1561; CHECK-P8-NEXT: ld r0, 16(r1) 1562; CHECK-P8-NEXT: mtlr r0 1563; CHECK-P8-NEXT: blr 1564entry: 1565 %idxprom = sext i32 %idx to i64 1566 %arrayidx = getelementptr inbounds double, double* %a, i64 %idxprom 1567 %0 = load double, double* %arrayidx, align 8 1568 %conv = fpext double %0 to fp128 1569 store fp128 %conv, fp128* @f128Glob, align 16 1570 ret void 1571} 1572 1573; Function Attrs: norecurse nounwind 1574define void @dpConv2qp_03(fp128* nocapture %res, i32 signext %idx, double %a) { 1575; CHECK-LABEL: dpConv2qp_03: 1576; CHECK: # %bb.0: # %entry 1577; CHECK-NEXT: xscpsgndp v2, f1, f1 1578; CHECK-NEXT: sldi r4, r4, 4 1579; CHECK-NEXT: xscvdpqp v2, v2 1580; CHECK-NEXT: stxvx v2, r3, r4 1581; CHECK-NEXT: blr 1582; 1583; CHECK-P8-LABEL: dpConv2qp_03: 1584; CHECK-P8: # %bb.0: # %entry 1585; CHECK-P8-NEXT: mflr r0 1586; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1587; CHECK-P8-NEXT: .cfi_offset lr, 16 1588; CHECK-P8-NEXT: .cfi_offset r29, -24 1589; CHECK-P8-NEXT: .cfi_offset r30, -16 1590; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1591; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1592; CHECK-P8-NEXT: std r0, 16(r1) 1593; CHECK-P8-NEXT: stdu r1, -64(r1) 1594; CHECK-P8-NEXT: mr r30, r4 1595; CHECK-P8-NEXT: mr r29, r3 1596; CHECK-P8-NEXT: bl __extenddfkf2 1597; CHECK-P8-NEXT: nop 1598; CHECK-P8-NEXT: xxswapd vs0, v2 1599; CHECK-P8-NEXT: sldi r3, r30, 4 1600; CHECK-P8-NEXT: stxvd2x vs0, r29, r3 1601; CHECK-P8-NEXT: addi r1, r1, 64 1602; CHECK-P8-NEXT: ld r0, 16(r1) 1603; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1604; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1605; CHECK-P8-NEXT: mtlr r0 1606; CHECK-P8-NEXT: blr 1607entry: 1608 %conv = fpext double %a to fp128 1609 %idxprom = sext i32 %idx to i64 1610 %arrayidx = getelementptr inbounds fp128, fp128* %res, i64 %idxprom 1611 store fp128 %conv, fp128* %arrayidx, align 16 1612 ret void 1613} 1614 1615; Function Attrs: norecurse nounwind 1616define void @dpConv2qp_04(double %a, fp128* nocapture %res) { 1617; CHECK-LABEL: dpConv2qp_04: 1618; CHECK: # %bb.0: # %entry 1619; CHECK-NEXT: xscpsgndp v2, f1, f1 1620; CHECK-NEXT: xscvdpqp v2, v2 1621; CHECK-NEXT: stxv v2, 0(r4) 1622; CHECK-NEXT: blr 1623; 1624; CHECK-P8-LABEL: dpConv2qp_04: 1625; CHECK-P8: # %bb.0: # %entry 1626; CHECK-P8-NEXT: mflr r0 1627; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1628; CHECK-P8-NEXT: .cfi_offset lr, 16 1629; CHECK-P8-NEXT: .cfi_offset r30, -16 1630; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1631; CHECK-P8-NEXT: std r0, 16(r1) 1632; CHECK-P8-NEXT: stdu r1, -48(r1) 1633; CHECK-P8-NEXT: mr r30, r4 1634; CHECK-P8-NEXT: bl __extenddfkf2 1635; CHECK-P8-NEXT: nop 1636; CHECK-P8-NEXT: xxswapd vs0, v2 1637; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1638; CHECK-P8-NEXT: addi r1, r1, 48 1639; CHECK-P8-NEXT: ld r0, 16(r1) 1640; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1641; CHECK-P8-NEXT: mtlr r0 1642; CHECK-P8-NEXT: blr 1643entry: 1644 %conv = fpext double %a to fp128 1645 store fp128 %conv, fp128* %res, align 16 1646 ret void 1647} 1648 1649; Function Attrs: norecurse nounwind readnone 1650define fp128 @spConv2qp(float %a) { 1651; CHECK-LABEL: spConv2qp: 1652; CHECK: # %bb.0: # %entry 1653; CHECK-NEXT: xscpsgndp v2, f1, f1 1654; CHECK-NEXT: xscvdpqp v2, v2 1655; CHECK-NEXT: blr 1656; 1657; CHECK-P8-LABEL: spConv2qp: 1658; CHECK-P8: # %bb.0: # %entry 1659; CHECK-P8-NEXT: mflr r0 1660; CHECK-P8-NEXT: std r0, 16(r1) 1661; CHECK-P8-NEXT: stdu r1, -32(r1) 1662; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1663; CHECK-P8-NEXT: .cfi_offset lr, 16 1664; CHECK-P8-NEXT: bl __extendsfkf2 1665; CHECK-P8-NEXT: nop 1666; CHECK-P8-NEXT: addi r1, r1, 32 1667; CHECK-P8-NEXT: ld r0, 16(r1) 1668; CHECK-P8-NEXT: mtlr r0 1669; CHECK-P8-NEXT: blr 1670entry: 1671 %conv = fpext float %a to fp128 1672 ret fp128 %conv 1673} 1674 1675; Function Attrs: norecurse nounwind 1676define void @spConv2qp_02(float* nocapture readonly %a) { 1677; CHECK-LABEL: spConv2qp_02: 1678; CHECK: # %bb.0: # %entry 1679; CHECK-NEXT: lxssp v2, 0(r3) 1680; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1681; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1682; CHECK-NEXT: xscvdpqp v2, v2 1683; CHECK-NEXT: stxv v2, 0(r3) 1684; CHECK-NEXT: blr 1685; 1686; CHECK-P8-LABEL: spConv2qp_02: 1687; CHECK-P8: # %bb.0: # %entry 1688; CHECK-P8-NEXT: mflr r0 1689; CHECK-P8-NEXT: std r0, 16(r1) 1690; CHECK-P8-NEXT: stdu r1, -32(r1) 1691; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1692; CHECK-P8-NEXT: .cfi_offset lr, 16 1693; CHECK-P8-NEXT: lfs f1, 0(r3) 1694; CHECK-P8-NEXT: bl __extendsfkf2 1695; CHECK-P8-NEXT: nop 1696; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1697; CHECK-P8-NEXT: xxswapd vs0, v2 1698; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1699; CHECK-P8-NEXT: stxvd2x vs0, 0, r3 1700; CHECK-P8-NEXT: addi r1, r1, 32 1701; CHECK-P8-NEXT: ld r0, 16(r1) 1702; CHECK-P8-NEXT: mtlr r0 1703; CHECK-P8-NEXT: blr 1704entry: 1705 %0 = load float, float* %a, align 4 1706 %conv = fpext float %0 to fp128 1707 store fp128 %conv, fp128* @f128Glob, align 16 1708 ret void 1709} 1710 1711; Function Attrs: norecurse nounwind 1712define void @spConv2qp_02b(float* nocapture readonly %a, i32 signext %idx) { 1713; CHECK-LABEL: spConv2qp_02b: 1714; CHECK: # %bb.0: # %entry 1715; CHECK-NEXT: sldi r4, r4, 2 1716; CHECK-NEXT: lxsspx v2, r3, r4 1717; CHECK-NEXT: addis r3, r2, .LC8@toc@ha 1718; CHECK-NEXT: ld r3, .LC8@toc@l(r3) 1719; CHECK-NEXT: xscvdpqp v2, v2 1720; CHECK-NEXT: stxv v2, 0(r3) 1721; CHECK-NEXT: blr 1722; 1723; CHECK-P8-LABEL: spConv2qp_02b: 1724; CHECK-P8: # %bb.0: # %entry 1725; CHECK-P8-NEXT: mflr r0 1726; CHECK-P8-NEXT: std r0, 16(r1) 1727; CHECK-P8-NEXT: stdu r1, -32(r1) 1728; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 1729; CHECK-P8-NEXT: .cfi_offset lr, 16 1730; CHECK-P8-NEXT: sldi r4, r4, 2 1731; CHECK-P8-NEXT: lfsx f1, r3, r4 1732; CHECK-P8-NEXT: bl __extendsfkf2 1733; CHECK-P8-NEXT: nop 1734; CHECK-P8-NEXT: addis r3, r2, .LC8@toc@ha 1735; CHECK-P8-NEXT: xxswapd vs0, v2 1736; CHECK-P8-NEXT: ld r3, .LC8@toc@l(r3) 1737; CHECK-P8-NEXT: stxvd2x vs0, 0, r3 1738; CHECK-P8-NEXT: addi r1, r1, 32 1739; CHECK-P8-NEXT: ld r0, 16(r1) 1740; CHECK-P8-NEXT: mtlr r0 1741; CHECK-P8-NEXT: blr 1742entry: 1743 %idxprom = sext i32 %idx to i64 1744 %arrayidx = getelementptr inbounds float, float* %a, i64 %idxprom 1745 %0 = load float, float* %arrayidx, align 4 1746 %conv = fpext float %0 to fp128 1747 store fp128 %conv, fp128* @f128Glob, align 16 1748 ret void 1749} 1750 1751; Function Attrs: norecurse nounwind 1752define void @spConv2qp_03(fp128* nocapture %res, i32 signext %idx, float %a) { 1753; CHECK-LABEL: spConv2qp_03: 1754; CHECK: # %bb.0: # %entry 1755; CHECK-NEXT: xscpsgndp v2, f1, f1 1756; CHECK-NEXT: sldi r4, r4, 4 1757; CHECK-NEXT: xscvdpqp v2, v2 1758; CHECK-NEXT: stxvx v2, r3, r4 1759; CHECK-NEXT: blr 1760; 1761; CHECK-P8-LABEL: spConv2qp_03: 1762; CHECK-P8: # %bb.0: # %entry 1763; CHECK-P8-NEXT: mflr r0 1764; CHECK-P8-NEXT: .cfi_def_cfa_offset 64 1765; CHECK-P8-NEXT: .cfi_offset lr, 16 1766; CHECK-P8-NEXT: .cfi_offset r29, -24 1767; CHECK-P8-NEXT: .cfi_offset r30, -16 1768; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill 1769; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1770; CHECK-P8-NEXT: std r0, 16(r1) 1771; CHECK-P8-NEXT: stdu r1, -64(r1) 1772; CHECK-P8-NEXT: mr r30, r4 1773; CHECK-P8-NEXT: mr r29, r3 1774; CHECK-P8-NEXT: bl __extendsfkf2 1775; CHECK-P8-NEXT: nop 1776; CHECK-P8-NEXT: xxswapd vs0, v2 1777; CHECK-P8-NEXT: sldi r3, r30, 4 1778; CHECK-P8-NEXT: stxvd2x vs0, r29, r3 1779; CHECK-P8-NEXT: addi r1, r1, 64 1780; CHECK-P8-NEXT: ld r0, 16(r1) 1781; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1782; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1783; CHECK-P8-NEXT: mtlr r0 1784; CHECK-P8-NEXT: blr 1785entry: 1786 %conv = fpext float %a to fp128 1787 %idxprom = sext i32 %idx to i64 1788 %arrayidx = getelementptr inbounds fp128, fp128* %res, i64 %idxprom 1789 store fp128 %conv, fp128* %arrayidx, align 16 1790 ret void 1791} 1792 1793; Function Attrs: norecurse nounwind 1794define void @spConv2qp_04(float %a, fp128* nocapture %res) { 1795; CHECK-LABEL: spConv2qp_04: 1796; CHECK: # %bb.0: # %entry 1797; CHECK-NEXT: xscpsgndp v2, f1, f1 1798; CHECK-NEXT: xscvdpqp v2, v2 1799; CHECK-NEXT: stxv v2, 0(r4) 1800; CHECK-NEXT: blr 1801; 1802; CHECK-P8-LABEL: spConv2qp_04: 1803; CHECK-P8: # %bb.0: # %entry 1804; CHECK-P8-NEXT: mflr r0 1805; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1806; CHECK-P8-NEXT: .cfi_offset lr, 16 1807; CHECK-P8-NEXT: .cfi_offset r30, -16 1808; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1809; CHECK-P8-NEXT: std r0, 16(r1) 1810; CHECK-P8-NEXT: stdu r1, -48(r1) 1811; CHECK-P8-NEXT: mr r30, r4 1812; CHECK-P8-NEXT: bl __extendsfkf2 1813; CHECK-P8-NEXT: nop 1814; CHECK-P8-NEXT: xxswapd vs0, v2 1815; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1816; CHECK-P8-NEXT: addi r1, r1, 48 1817; CHECK-P8-NEXT: ld r0, 16(r1) 1818; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1819; CHECK-P8-NEXT: mtlr r0 1820; CHECK-P8-NEXT: blr 1821entry: 1822 %conv = fpext float %a to fp128 1823 store fp128 %conv, fp128* %res, align 16 1824 ret void 1825} 1826 1827 1828; Function Attrs: norecurse nounwind 1829define void @cvdp2sw2qp(double %val, fp128* nocapture %res) { 1830; CHECK-LABEL: cvdp2sw2qp: 1831; CHECK: # %bb.0: # %entry 1832; CHECK-NEXT: xscvdpsxws v2, f1 1833; CHECK-NEXT: vextsw2d v2, v2 1834; CHECK-NEXT: xscvsdqp v2, v2 1835; CHECK-NEXT: stxv v2, 0(r4) 1836; CHECK-NEXT: blr 1837; 1838; CHECK-P8-LABEL: cvdp2sw2qp: 1839; CHECK-P8: # %bb.0: # %entry 1840; CHECK-P8-NEXT: mflr r0 1841; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1842; CHECK-P8-NEXT: .cfi_offset lr, 16 1843; CHECK-P8-NEXT: .cfi_offset r30, -16 1844; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1845; CHECK-P8-NEXT: std r0, 16(r1) 1846; CHECK-P8-NEXT: stdu r1, -48(r1) 1847; CHECK-P8-NEXT: xscvdpsxws f0, f1 1848; CHECK-P8-NEXT: mr r30, r4 1849; CHECK-P8-NEXT: mffprwz r3, f0 1850; CHECK-P8-NEXT: extsw r3, r3 1851; CHECK-P8-NEXT: bl __floatsikf 1852; CHECK-P8-NEXT: nop 1853; CHECK-P8-NEXT: xxswapd vs0, v2 1854; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1855; CHECK-P8-NEXT: addi r1, r1, 48 1856; CHECK-P8-NEXT: ld r0, 16(r1) 1857; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1858; CHECK-P8-NEXT: mtlr r0 1859; CHECK-P8-NEXT: blr 1860entry: 1861 %conv = fptosi double %val to i32 1862 %conv1 = sitofp i32 %conv to fp128 1863 store fp128 %conv1, fp128* %res, align 16 1864 ret void 1865} 1866 1867; Function Attrs: norecurse nounwind 1868define void @cvdp2sdw2qp(double %val, fp128* nocapture %res) { 1869; CHECK-LABEL: cvdp2sdw2qp: 1870; CHECK: # %bb.0: # %entry 1871; CHECK-NEXT: xscvdpsxds v2, f1 1872; CHECK-NEXT: xscvsdqp v2, v2 1873; CHECK-NEXT: stxv v2, 0(r4) 1874; CHECK-NEXT: blr 1875; 1876; CHECK-P8-LABEL: cvdp2sdw2qp: 1877; CHECK-P8: # %bb.0: # %entry 1878; CHECK-P8-NEXT: mflr r0 1879; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1880; CHECK-P8-NEXT: .cfi_offset lr, 16 1881; CHECK-P8-NEXT: .cfi_offset r30, -16 1882; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1883; CHECK-P8-NEXT: std r0, 16(r1) 1884; CHECK-P8-NEXT: stdu r1, -48(r1) 1885; CHECK-P8-NEXT: xscvdpsxds f0, f1 1886; CHECK-P8-NEXT: mr r30, r4 1887; CHECK-P8-NEXT: mffprd r3, f0 1888; CHECK-P8-NEXT: bl __floatdikf 1889; CHECK-P8-NEXT: nop 1890; CHECK-P8-NEXT: xxswapd vs0, v2 1891; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1892; CHECK-P8-NEXT: addi r1, r1, 48 1893; CHECK-P8-NEXT: ld r0, 16(r1) 1894; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1895; CHECK-P8-NEXT: mtlr r0 1896; CHECK-P8-NEXT: blr 1897entry: 1898 %conv = fptosi double %val to i64 1899 %conv1 = sitofp i64 %conv to fp128 1900 store fp128 %conv1, fp128* %res, align 16 1901 ret void 1902} 1903 1904; Function Attrs: norecurse nounwind 1905define void @cvsp2sw2qp(float %val, fp128* nocapture %res) { 1906; CHECK-LABEL: cvsp2sw2qp: 1907; CHECK: # %bb.0: # %entry 1908; CHECK-NEXT: xscvdpsxws v2, f1 1909; CHECK-NEXT: vextsw2d v2, v2 1910; CHECK-NEXT: xscvsdqp v2, v2 1911; CHECK-NEXT: stxv v2, 0(r4) 1912; CHECK-NEXT: blr 1913; 1914; CHECK-P8-LABEL: cvsp2sw2qp: 1915; CHECK-P8: # %bb.0: # %entry 1916; CHECK-P8-NEXT: mflr r0 1917; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1918; CHECK-P8-NEXT: .cfi_offset lr, 16 1919; CHECK-P8-NEXT: .cfi_offset r30, -16 1920; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1921; CHECK-P8-NEXT: std r0, 16(r1) 1922; CHECK-P8-NEXT: stdu r1, -48(r1) 1923; CHECK-P8-NEXT: xscvdpsxws f0, f1 1924; CHECK-P8-NEXT: mr r30, r4 1925; CHECK-P8-NEXT: mffprwz r3, f0 1926; CHECK-P8-NEXT: extsw r3, r3 1927; CHECK-P8-NEXT: bl __floatsikf 1928; CHECK-P8-NEXT: nop 1929; CHECK-P8-NEXT: xxswapd vs0, v2 1930; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1931; CHECK-P8-NEXT: addi r1, r1, 48 1932; CHECK-P8-NEXT: ld r0, 16(r1) 1933; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1934; CHECK-P8-NEXT: mtlr r0 1935; CHECK-P8-NEXT: blr 1936entry: 1937 %conv = fptosi float %val to i32 1938 %conv1 = sitofp i32 %conv to fp128 1939 store fp128 %conv1, fp128* %res, align 16 1940 ret void 1941} 1942 1943; Function Attrs: norecurse nounwind 1944define void @cvsp2sdw2qp(float %val, fp128* nocapture %res) { 1945; CHECK-LABEL: cvsp2sdw2qp: 1946; CHECK: # %bb.0: # %entry 1947; CHECK-NEXT: xscvdpsxds v2, f1 1948; CHECK-NEXT: xscvsdqp v2, v2 1949; CHECK-NEXT: stxv v2, 0(r4) 1950; CHECK-NEXT: blr 1951; 1952; CHECK-P8-LABEL: cvsp2sdw2qp: 1953; CHECK-P8: # %bb.0: # %entry 1954; CHECK-P8-NEXT: mflr r0 1955; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1956; CHECK-P8-NEXT: .cfi_offset lr, 16 1957; CHECK-P8-NEXT: .cfi_offset r30, -16 1958; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1959; CHECK-P8-NEXT: std r0, 16(r1) 1960; CHECK-P8-NEXT: stdu r1, -48(r1) 1961; CHECK-P8-NEXT: xscvdpsxds f0, f1 1962; CHECK-P8-NEXT: mr r30, r4 1963; CHECK-P8-NEXT: mffprd r3, f0 1964; CHECK-P8-NEXT: bl __floatdikf 1965; CHECK-P8-NEXT: nop 1966; CHECK-P8-NEXT: xxswapd vs0, v2 1967; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 1968; CHECK-P8-NEXT: addi r1, r1, 48 1969; CHECK-P8-NEXT: ld r0, 16(r1) 1970; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1971; CHECK-P8-NEXT: mtlr r0 1972; CHECK-P8-NEXT: blr 1973entry: 1974 %conv = fptosi float %val to i64 1975 %conv1 = sitofp i64 %conv to fp128 1976 store fp128 %conv1, fp128* %res, align 16 1977 ret void 1978} 1979 1980; Function Attrs: norecurse nounwind 1981define void @cvdp2uw2qp(double %val, fp128* nocapture %res) { 1982; CHECK-LABEL: cvdp2uw2qp: 1983; CHECK: # %bb.0: # %entry 1984; CHECK-NEXT: xscvdpuxws f0, f1 1985; CHECK-NEXT: xxextractuw v2, vs0, 8 1986; CHECK-NEXT: xscvudqp v2, v2 1987; CHECK-NEXT: stxv v2, 0(r4) 1988; CHECK-NEXT: blr 1989; 1990; CHECK-P8-LABEL: cvdp2uw2qp: 1991; CHECK-P8: # %bb.0: # %entry 1992; CHECK-P8-NEXT: mflr r0 1993; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 1994; CHECK-P8-NEXT: .cfi_offset lr, 16 1995; CHECK-P8-NEXT: .cfi_offset r30, -16 1996; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 1997; CHECK-P8-NEXT: std r0, 16(r1) 1998; CHECK-P8-NEXT: stdu r1, -48(r1) 1999; CHECK-P8-NEXT: xscvdpuxws f0, f1 2000; CHECK-P8-NEXT: mr r30, r4 2001; CHECK-P8-NEXT: mffprwz r3, f0 2002; CHECK-P8-NEXT: clrldi r3, r3, 32 2003; CHECK-P8-NEXT: bl __floatunsikf 2004; CHECK-P8-NEXT: nop 2005; CHECK-P8-NEXT: xxswapd vs0, v2 2006; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 2007; CHECK-P8-NEXT: addi r1, r1, 48 2008; CHECK-P8-NEXT: ld r0, 16(r1) 2009; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 2010; CHECK-P8-NEXT: mtlr r0 2011; CHECK-P8-NEXT: blr 2012entry: 2013 %conv = fptoui double %val to i32 2014 %conv1 = uitofp i32 %conv to fp128 2015 store fp128 %conv1, fp128* %res, align 16 2016 ret void 2017} 2018 2019; Function Attrs: norecurse nounwind 2020define void @cvdp2udw2qp(double %val, fp128* nocapture %res) { 2021; CHECK-LABEL: cvdp2udw2qp: 2022; CHECK: # %bb.0: # %entry 2023; CHECK-NEXT: xscvdpuxds v2, f1 2024; CHECK-NEXT: xscvudqp v2, v2 2025; CHECK-NEXT: stxv v2, 0(r4) 2026; CHECK-NEXT: blr 2027; 2028; CHECK-P8-LABEL: cvdp2udw2qp: 2029; CHECK-P8: # %bb.0: # %entry 2030; CHECK-P8-NEXT: mflr r0 2031; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 2032; CHECK-P8-NEXT: .cfi_offset lr, 16 2033; CHECK-P8-NEXT: .cfi_offset r30, -16 2034; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 2035; CHECK-P8-NEXT: std r0, 16(r1) 2036; CHECK-P8-NEXT: stdu r1, -48(r1) 2037; CHECK-P8-NEXT: xscvdpuxds f0, f1 2038; CHECK-P8-NEXT: mr r30, r4 2039; CHECK-P8-NEXT: mffprd r3, f0 2040; CHECK-P8-NEXT: bl __floatundikf 2041; CHECK-P8-NEXT: nop 2042; CHECK-P8-NEXT: xxswapd vs0, v2 2043; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 2044; CHECK-P8-NEXT: addi r1, r1, 48 2045; CHECK-P8-NEXT: ld r0, 16(r1) 2046; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 2047; CHECK-P8-NEXT: mtlr r0 2048; CHECK-P8-NEXT: blr 2049entry: 2050 %conv = fptoui double %val to i64 2051 %conv1 = uitofp i64 %conv to fp128 2052 store fp128 %conv1, fp128* %res, align 16 2053 ret void 2054} 2055 2056; Function Attrs: norecurse nounwind 2057define void @cvsp2uw2qp(float %val, fp128* nocapture %res) { 2058; CHECK-LABEL: cvsp2uw2qp: 2059; CHECK: # %bb.0: # %entry 2060; CHECK-NEXT: xscvdpuxws f0, f1 2061; CHECK-NEXT: xxextractuw v2, vs0, 8 2062; CHECK-NEXT: xscvudqp v2, v2 2063; CHECK-NEXT: stxv v2, 0(r4) 2064; CHECK-NEXT: blr 2065; 2066; CHECK-P8-LABEL: cvsp2uw2qp: 2067; CHECK-P8: # %bb.0: # %entry 2068; CHECK-P8-NEXT: mflr r0 2069; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 2070; CHECK-P8-NEXT: .cfi_offset lr, 16 2071; CHECK-P8-NEXT: .cfi_offset r30, -16 2072; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 2073; CHECK-P8-NEXT: std r0, 16(r1) 2074; CHECK-P8-NEXT: stdu r1, -48(r1) 2075; CHECK-P8-NEXT: xscvdpuxws f0, f1 2076; CHECK-P8-NEXT: mr r30, r4 2077; CHECK-P8-NEXT: mffprwz r3, f0 2078; CHECK-P8-NEXT: clrldi r3, r3, 32 2079; CHECK-P8-NEXT: bl __floatunsikf 2080; CHECK-P8-NEXT: nop 2081; CHECK-P8-NEXT: xxswapd vs0, v2 2082; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 2083; CHECK-P8-NEXT: addi r1, r1, 48 2084; CHECK-P8-NEXT: ld r0, 16(r1) 2085; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 2086; CHECK-P8-NEXT: mtlr r0 2087; CHECK-P8-NEXT: blr 2088entry: 2089 %conv = fptoui float %val to i32 2090 %conv1 = uitofp i32 %conv to fp128 2091 store fp128 %conv1, fp128* %res, align 16 2092 ret void 2093} 2094 2095; Function Attrs: norecurse nounwind 2096define void @cvsp2udw2qp(float %val, fp128* nocapture %res) { 2097; CHECK-LABEL: cvsp2udw2qp: 2098; CHECK: # %bb.0: # %entry 2099; CHECK-NEXT: xscvdpuxds v2, f1 2100; CHECK-NEXT: xscvudqp v2, v2 2101; CHECK-NEXT: stxv v2, 0(r4) 2102; CHECK-NEXT: blr 2103; 2104; CHECK-P8-LABEL: cvsp2udw2qp: 2105; CHECK-P8: # %bb.0: # %entry 2106; CHECK-P8-NEXT: mflr r0 2107; CHECK-P8-NEXT: .cfi_def_cfa_offset 48 2108; CHECK-P8-NEXT: .cfi_offset lr, 16 2109; CHECK-P8-NEXT: .cfi_offset r30, -16 2110; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill 2111; CHECK-P8-NEXT: std r0, 16(r1) 2112; CHECK-P8-NEXT: stdu r1, -48(r1) 2113; CHECK-P8-NEXT: xscvdpuxds f0, f1 2114; CHECK-P8-NEXT: mr r30, r4 2115; CHECK-P8-NEXT: mffprd r3, f0 2116; CHECK-P8-NEXT: bl __floatundikf 2117; CHECK-P8-NEXT: nop 2118; CHECK-P8-NEXT: xxswapd vs0, v2 2119; CHECK-P8-NEXT: stxvd2x vs0, 0, r30 2120; CHECK-P8-NEXT: addi r1, r1, 48 2121; CHECK-P8-NEXT: ld r0, 16(r1) 2122; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 2123; CHECK-P8-NEXT: mtlr r0 2124; CHECK-P8-NEXT: blr 2125entry: 2126 %conv = fptoui float %val to i64 2127 %conv1 = uitofp i64 %conv to fp128 2128 store fp128 %conv1, fp128* %res, align 16 2129 ret void 2130} 2131 2132; Function Attrs: norecurse nounwind readonly 2133define i128 @qpConv2i128(fp128* nocapture readonly %a) { 2134; CHECK-LABEL: qpConv2i128: 2135; CHECK: # %bb.0: # %entry 2136; CHECK-NEXT: mflr r0 2137; CHECK-NEXT: std r0, 16(r1) 2138; CHECK-NEXT: stdu r1, -32(r1) 2139; CHECK-NEXT: .cfi_def_cfa_offset 32 2140; CHECK-NEXT: .cfi_offset lr, 16 2141; CHECK-NEXT: lxv v2, 0(r3) 2142; CHECK-NEXT: bl __fixkfti 2143; CHECK-NEXT: nop 2144; CHECK-NEXT: addi r1, r1, 32 2145; CHECK-NEXT: ld r0, 16(r1) 2146; CHECK-NEXT: mtlr r0 2147; CHECK-NEXT: blr 2148; 2149; CHECK-P8-LABEL: qpConv2i128: 2150; CHECK-P8: # %bb.0: # %entry 2151; CHECK-P8-NEXT: mflr r0 2152; CHECK-P8-NEXT: std r0, 16(r1) 2153; CHECK-P8-NEXT: stdu r1, -32(r1) 2154; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2155; CHECK-P8-NEXT: .cfi_offset lr, 16 2156; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 2157; CHECK-P8-NEXT: xxswapd v2, vs0 2158; CHECK-P8-NEXT: bl __fixkfti 2159; CHECK-P8-NEXT: nop 2160; CHECK-P8-NEXT: addi r1, r1, 32 2161; CHECK-P8-NEXT: ld r0, 16(r1) 2162; CHECK-P8-NEXT: mtlr r0 2163; CHECK-P8-NEXT: blr 2164entry: 2165 %0 = load fp128, fp128* %a, align 16 2166 %conv = fptosi fp128 %0 to i128 2167 ret i128 %conv 2168} 2169 2170; Function Attrs: norecurse nounwind readonly 2171define i128 @qpConv2ui128(fp128* nocapture readonly %a) { 2172; CHECK-LABEL: qpConv2ui128: 2173; CHECK: # %bb.0: # %entry 2174; CHECK-NEXT: mflr r0 2175; CHECK-NEXT: std r0, 16(r1) 2176; CHECK-NEXT: stdu r1, -32(r1) 2177; CHECK-NEXT: .cfi_def_cfa_offset 32 2178; CHECK-NEXT: .cfi_offset lr, 16 2179; CHECK-NEXT: lxv v2, 0(r3) 2180; CHECK-NEXT: bl __fixunskfti 2181; CHECK-NEXT: nop 2182; CHECK-NEXT: addi r1, r1, 32 2183; CHECK-NEXT: ld r0, 16(r1) 2184; CHECK-NEXT: mtlr r0 2185; CHECK-NEXT: blr 2186; 2187; CHECK-P8-LABEL: qpConv2ui128: 2188; CHECK-P8: # %bb.0: # %entry 2189; CHECK-P8-NEXT: mflr r0 2190; CHECK-P8-NEXT: std r0, 16(r1) 2191; CHECK-P8-NEXT: stdu r1, -32(r1) 2192; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2193; CHECK-P8-NEXT: .cfi_offset lr, 16 2194; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 2195; CHECK-P8-NEXT: xxswapd v2, vs0 2196; CHECK-P8-NEXT: bl __fixunskfti 2197; CHECK-P8-NEXT: nop 2198; CHECK-P8-NEXT: addi r1, r1, 32 2199; CHECK-P8-NEXT: ld r0, 16(r1) 2200; CHECK-P8-NEXT: mtlr r0 2201; CHECK-P8-NEXT: blr 2202entry: 2203 %0 = load fp128, fp128* %a, align 16 2204 %conv = fptoui fp128 %0 to i128 2205 ret i128 %conv 2206} 2207 2208; Function Attrs: norecurse nounwind readonly 2209define i1 @qpConv2ui1(fp128* nocapture readonly %a) { 2210; CHECK-LABEL: qpConv2ui1: 2211; CHECK: # %bb.0: # %entry 2212; CHECK-NEXT: lxv v2, 0(r3) 2213; CHECK-NEXT: xscvqpswz v2, v2 2214; CHECK-NEXT: mfvsrwz r3, v2 2215; CHECK-NEXT: blr 2216; 2217; CHECK-P8-LABEL: qpConv2ui1: 2218; CHECK-P8: # %bb.0: # %entry 2219; CHECK-P8-NEXT: mflr r0 2220; CHECK-P8-NEXT: std r0, 16(r1) 2221; CHECK-P8-NEXT: stdu r1, -32(r1) 2222; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2223; CHECK-P8-NEXT: .cfi_offset lr, 16 2224; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 2225; CHECK-P8-NEXT: xxswapd v2, vs0 2226; CHECK-P8-NEXT: bl __fixkfsi 2227; CHECK-P8-NEXT: nop 2228; CHECK-P8-NEXT: addi r1, r1, 32 2229; CHECK-P8-NEXT: ld r0, 16(r1) 2230; CHECK-P8-NEXT: mtlr r0 2231; CHECK-P8-NEXT: blr 2232entry: 2233 %0 = load fp128, fp128* %a, align 16 2234 %conv = fptoui fp128 %0 to i1 2235 ret i1 %conv 2236} 2237 2238; Function Attrs: norecurse nounwind readonly 2239define i1 @qpConv2si1(fp128* nocapture readonly %a) { 2240; CHECK-LABEL: qpConv2si1: 2241; CHECK: # %bb.0: # %entry 2242; CHECK-NEXT: lxv v2, 0(r3) 2243; CHECK-NEXT: xscvqpswz v2, v2 2244; CHECK-NEXT: mfvsrwz r3, v2 2245; CHECK-NEXT: blr 2246; 2247; CHECK-P8-LABEL: qpConv2si1: 2248; CHECK-P8: # %bb.0: # %entry 2249; CHECK-P8-NEXT: mflr r0 2250; CHECK-P8-NEXT: std r0, 16(r1) 2251; CHECK-P8-NEXT: stdu r1, -32(r1) 2252; CHECK-P8-NEXT: .cfi_def_cfa_offset 32 2253; CHECK-P8-NEXT: .cfi_offset lr, 16 2254; CHECK-P8-NEXT: lxvd2x vs0, 0, r3 2255; CHECK-P8-NEXT: xxswapd v2, vs0 2256; CHECK-P8-NEXT: bl __fixkfsi 2257; CHECK-P8-NEXT: nop 2258; CHECK-P8-NEXT: addi r1, r1, 32 2259; CHECK-P8-NEXT: ld r0, 16(r1) 2260; CHECK-P8-NEXT: mtlr r0 2261; CHECK-P8-NEXT: blr 2262entry: 2263 %0 = load fp128, fp128* %a, align 16 2264 %conv = fptosi fp128 %0 to i1 2265 ret i1 %conv 2266} 2267