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