|  | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
|  | ; RUN: llc -relocation-model=pic -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \ | 
|  | ; RUN:   -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s \ | 
|  | ; RUN:   | FileCheck %s | 
|  | ; RUN: llc -relocation-model=pic -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \ | 
|  | ; RUN:   -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s \ | 
|  | ; RUN:   | FileCheck %s -check-prefix=CHECK-P8 | 
|  |  | 
|  | @f128Array = global [4 x fp128] [fp128 0xL00000000000000004004C00000000000, | 
|  | fp128 0xLF000000000000000400808AB851EB851, | 
|  | fp128 0xL5000000000000000400E0C26324C8366, | 
|  | fp128 0xL8000000000000000400A24E2E147AE14], | 
|  | align 16 | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define i64 @qpConv2sdw(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2sdw: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrd r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sdw: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptosi fp128 %0 to i64 | 
|  | ret i64 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sdw_02(ptr nocapture %res) local_unnamed_addr #1 { | 
|  | ; CHECK-LABEL: qpConv2sdw_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsd v2, 0(r3) | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sdw_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    std r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 2), align 16 | 
|  | %conv = fptosi fp128 %0 to i64 | 
|  | store i64 %conv, ptr %res, align 8 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define i64 @qpConv2sdw_03(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2sdw_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrd r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sdw_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i64 | 
|  | ret i64 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sdw_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2sdw_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsd v2, 0(r5) | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sdw_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    std r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i64 | 
|  | store i64 %conv, ptr %res, align 8 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sdw_testXForm(ptr nocapture %res, i32 signext %idx) { | 
|  | ; CHECK-LABEL: qpConv2sdw_testXForm: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r5, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    sldi r4, r4, 3 | 
|  | ; CHECK-NEXT:    ld r5, .LC0@toc@l(r5) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r5) | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsdx v2, r3, r4 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sdw_testXForm: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 64 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r29, -24 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r29, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 80(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r4 | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    sldi r4, r30, 3 | 
|  | ; CHECK-P8-NEXT:    stdx r3, r29, r4 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 64 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 2), align 16 | 
|  | %conv = fptosi fp128 %0 to i64 | 
|  | %idxprom = sext i32 %idx to i64 | 
|  | %arrayidx = getelementptr inbounds i64, ptr %res, i64 %idxprom | 
|  | store i64 %conv, ptr %arrayidx, align 8 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define i64 @qpConv2udw(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2udw: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrd r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2udw: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptoui fp128 %0 to i64 | 
|  | ret i64 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2udw_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2udw_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsd v2, 0(r3) | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2udw_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    std r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 2), align 16 | 
|  | %conv = fptoui fp128 %0 to i64 | 
|  | store i64 %conv, ptr %res, align 8 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define i64 @qpConv2udw_03(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2udw_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrd r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2udw_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i64 | 
|  | ret i64 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2udw_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2udw_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsd v2, 0(r5) | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2udw_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    std r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i64 | 
|  | store i64 %conv, ptr %res, align 8 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2udw_testXForm(ptr nocapture %res, i32 signext %idx) { | 
|  | ; CHECK-LABEL: qpConv2udw_testXForm: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r5, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    sldi r4, r4, 3 | 
|  | ; CHECK-NEXT:    ld r5, .LC0@toc@l(r5) | 
|  | ; CHECK-NEXT:    lxv v2, 0(r5) | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsdx v2, r3, r4 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2udw_testXForm: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 64 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r29, -24 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r29, -24(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r29, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 80(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r4 | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfdi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    sldi r4, r30, 3 | 
|  | ; CHECK-P8-NEXT:    stdx r3, r29, r4 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 64 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    ld r29, -24(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr @f128Array, align 16 | 
|  | %conv = fptoui fp128 %0 to i64 | 
|  | %idxprom = sext i32 %idx to i64 | 
|  | %arrayidx = getelementptr inbounds i64, ptr %res, i64 %idxprom | 
|  | store i64 %conv, ptr %arrayidx, align 8 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define signext i32 @qpConv2sw(ptr nocapture readonly %a)  { | 
|  | ; CHECK-LABEL: qpConv2sw: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    extsw r3, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sw: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    extsw r3, r3 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptosi fp128 %0 to i32 | 
|  | ret i32 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sw_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2sw_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    stxsiwx v2, 0, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sw_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stw r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 2), align 16 | 
|  | %conv = fptosi fp128 %0 to i32 | 
|  | store i32 %conv, ptr %res, align 4 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define signext i32 @qpConv2sw_03(ptr nocapture readonly %a)  { | 
|  | ; CHECK-LABEL: qpConv2sw_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    extsw r3, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sw_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    extsw r3, r3 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i32 | 
|  | ret i32 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sw_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2sw_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    stxsiwx v2, 0, r5 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sw_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stw r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i32 | 
|  | store i32 %conv, ptr %res, align 4 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define zeroext i32 @qpConv2uw(ptr nocapture readonly %a)  { | 
|  | ; CHECK-LABEL: qpConv2uw: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpuwz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uw: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptoui fp128 %0 to i32 | 
|  | ret i32 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2uw_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2uw_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpuwz v2, v2 | 
|  | ; CHECK-NEXT:    stxsiwx v2, 0, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uw_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stw r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 2), align 16 | 
|  | %conv = fptoui fp128 %0 to i32 | 
|  | store i32 %conv, ptr %res, align 4 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define zeroext i32 @qpConv2uw_03(ptr nocapture readonly %a)  { | 
|  | ; CHECK-LABEL: qpConv2uw_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpuwz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uw_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, i64 0, | 
|  | i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i32 | 
|  | ret i32 %conv | 
|  |  | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2uw_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2uw_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpuwz v2, v2 | 
|  | ; CHECK-NEXT:    stxsiwx v2, 0, r5 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uw_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixunskfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stw r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i32 | 
|  | store i32 %conv, ptr %res, align 4 | 
|  | ret void | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define signext i16 @qpConv2shw(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2shw: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    extsw r3, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2shw: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    extsw r3, r3 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptosi fp128 %0 to i16 | 
|  | ret i16 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2shw_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2shw_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsihx v2, 0, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2shw_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    sth r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 2), align 16 | 
|  | %conv = fptosi fp128 %0 to i16 | 
|  | store i16 %conv, ptr %res, align 2 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define signext i16 @qpConv2shw_03(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2shw_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    extsw r3, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2shw_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    extsw r3, r3 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i16 | 
|  | ret i16 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2shw_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2shw_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsihx v2, 0, r5 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2shw_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    sth r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i16 | 
|  | store i16 %conv, ptr %res, align 2 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define zeroext i16 @qpConv2uhw(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2uhw: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uhw: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptoui fp128 %0 to i16 | 
|  | ret i16 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2uhw_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2uhw_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsihx v2, 0, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uhw_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    sth r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 2), align 16 | 
|  | %conv = fptoui fp128 %0 to i16 | 
|  | store i16 %conv, ptr %res, align 2 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define zeroext i16 @qpConv2uhw_03(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2uhw_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uhw_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i16 | 
|  | ret i16 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2uhw_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2uhw_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsihx v2, 0, r5 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2uhw_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    sth r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i16 | 
|  | store i16 %conv, ptr %res, align 2 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define signext i8 @qpConv2sb(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2sb: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    extsw r3, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sb: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    extsw r3, r3 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptosi fp128 %0 to i8 | 
|  | ret i8 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sb_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2sb_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsibx v2, 0, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sb_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stb r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 2), align 16 | 
|  | %conv = fptosi fp128 %0 to i8 | 
|  | store i8 %conv, ptr %res, align 1 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define signext i8 @qpConv2sb_03(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2sb_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    extsw r3, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sb_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    extsw r3, r3 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i8 | 
|  | ret i8 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2sb_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2sb_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpsdz v2, v2 | 
|  | ; CHECK-NEXT:    stxsibx v2, 0, r5 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2sb_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stb r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptosi fp128 %add to i8 | 
|  | store i8 %conv, ptr %res, align 1 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define zeroext i8 @qpConv2ub(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2ub: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2ub: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %conv = fptoui fp128 %0 to i8 | 
|  | ret i8 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2ub_02(ptr nocapture %res) { | 
|  | ; CHECK-LABEL: qpConv2ub_02: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    addis r4, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r4, .LC0@toc@l(r4) | 
|  | ; CHECK-NEXT:    lxv v2, 32(r4) | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsibx v2, 0, r3 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2ub_02: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 32 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stb r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 2), align 16 | 
|  | %conv = fptoui fp128 %0 to i8 | 
|  | store i8 %conv, ptr %res, align 1 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly | 
|  | define zeroext i8 @qpConv2ub_03(ptr nocapture readonly %a) { | 
|  | ; CHECK-LABEL: qpConv2ub_03: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 16(r3) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpswz v2, v2 | 
|  | ; CHECK-NEXT:    mfvsrwz r3, v2 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2ub_03: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    stdu r1, -32(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 48(r1) | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 32 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha | 
|  | ; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3) | 
|  | ; CHECK-P8-NEXT:    addi r3, r3, 16 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 32 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr getelementptr inbounds | 
|  | ([4 x fp128], ptr @f128Array, | 
|  | i64 0, i64 1), align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i8 | 
|  | ret i8 %conv | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind | 
|  | define void @qpConv2ub_04(ptr nocapture readonly %a, | 
|  | ; CHECK-LABEL: qpConv2ub_04: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lxv v2, 0(r3) | 
|  | ; CHECK-NEXT:    lxv v3, 0(r4) | 
|  | ; CHECK-NEXT:    xsaddqp v2, v2, v3 | 
|  | ; CHECK-NEXT:    xscvqpudz v2, v2 | 
|  | ; CHECK-NEXT:    stxsibx v2, 0, r5 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConv2ub_04: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3 | 
|  | ; CHECK-P8-NEXT:    xxswapd v2, vs0 | 
|  | ; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4 | 
|  | ; CHECK-P8-NEXT:    xxswapd v3, vs0 | 
|  | ; CHECK-P8-NEXT:    bl __addkf3 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    bl __fixkfsi | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stb r3, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | ptr nocapture readonly %b, ptr nocapture %res) { | 
|  | entry: | 
|  | %0 = load fp128, ptr %a, align 16 | 
|  | %1 = load fp128, ptr %b, align 16 | 
|  | %add = fadd fp128 %0, %1 | 
|  | %conv = fptoui fp128 %add to i8 | 
|  | store i8 %conv, ptr %res, align 1 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define void @qpConvppcf128(fp128 %src, ptr %dst) { | 
|  | ; CHECK-LABEL: qpConvppcf128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    mflr r0 | 
|  | ; CHECK-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-NEXT:    mr r30, r5 | 
|  | ; CHECK-NEXT:    bl __extendkftf2 | 
|  | ; CHECK-NEXT:    nop | 
|  | ; CHECK-NEXT:    stfd f2, 8(r30) | 
|  | ; CHECK-NEXT:    stfd f1, 0(r30) | 
|  | ; CHECK-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-NEXT:    mtlr r0 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: qpConvppcf128: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    bl __extendkftf2 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    stfd f2, 8(r30) | 
|  | ; CHECK-P8-NEXT:    stfd f1, 0(r30) | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %res = call ppc_fp128 @llvm.ppc.convert.f128.to.ppcf128(fp128 %src) | 
|  | store ppc_fp128 %res, ptr %dst, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define void @ppcf128Convqp(ppc_fp128 %src, ptr %dst) { | 
|  | ; CHECK-LABEL: ppcf128Convqp: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    mflr r0 | 
|  | ; CHECK-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-NEXT:    mr r30, r5 | 
|  | ; CHECK-NEXT:    bl __trunctfkf2 | 
|  | ; CHECK-NEXT:    nop | 
|  | ; CHECK-NEXT:    stxv v2, 0(r30) | 
|  | ; CHECK-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-NEXT:    mtlr r0 | 
|  | ; CHECK-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-P8-LABEL: ppcf128Convqp: | 
|  | ; CHECK-P8:       # %bb.0: # %entry | 
|  | ; CHECK-P8-NEXT:    mflr r0 | 
|  | ; CHECK-P8-NEXT:    .cfi_def_cfa_offset 48 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset lr, 16 | 
|  | ; CHECK-P8-NEXT:    .cfi_offset r30, -16 | 
|  | ; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill | 
|  | ; CHECK-P8-NEXT:    stdu r1, -48(r1) | 
|  | ; CHECK-P8-NEXT:    std r0, 64(r1) | 
|  | ; CHECK-P8-NEXT:    mr r30, r5 | 
|  | ; CHECK-P8-NEXT:    bl __trunctfkf2 | 
|  | ; CHECK-P8-NEXT:    nop | 
|  | ; CHECK-P8-NEXT:    xxswapd vs0, v2 | 
|  | ; CHECK-P8-NEXT:    stxvd2x vs0, 0, r30 | 
|  | ; CHECK-P8-NEXT:    addi r1, r1, 48 | 
|  | ; CHECK-P8-NEXT:    ld r0, 16(r1) | 
|  | ; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload | 
|  | ; CHECK-P8-NEXT:    mtlr r0 | 
|  | ; CHECK-P8-NEXT:    blr | 
|  | entry: | 
|  | %res = call fp128 @llvm.ppc.convert.ppcf128.to.f128(ppc_fp128 %src) | 
|  | store fp128 %res, ptr %dst, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | declare ppc_fp128 @llvm.ppc.convert.f128.to.ppcf128(fp128) | 
|  | declare fp128 @llvm.ppc.convert.ppcf128.to.f128(ppc_fp128) |