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