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