brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.5 KiB · 4be855e Raw
664 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; 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 %s5; RUN: llc -relocation-model=pic -mcpu=pwr9 -mtriple=powerpc64-unknown-unknown \6; RUN:   -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s \7; RUN:   | FileCheck -check-prefix=CHECK-BE %s8; RUN: llc -relocation-model=pic -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \9; RUN:   -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s \10; RUN:   | FileCheck %s -check-prefix=CHECK-P811 12; Testing homogeneous aggregates.13 14%struct.With9fp128params = type { fp128, fp128, fp128, fp128, fp128, fp128,15                                  fp128, fp128, fp128 }16 17@a1 = local_unnamed_addr global [3 x fp128] zeroinitializer, align 1618 19; Function Attrs: norecurse nounwind readonly20define fp128 @testArray_01(ptr nocapture readonly %sa) {21; CHECK-LABEL: testArray_01:22; CHECK:       # %bb.0: # %entry23; CHECK-NEXT:    lxv v2, 32(r3)24; CHECK-NEXT:    blr25;26; CHECK-BE-LABEL: testArray_01:27; CHECK-BE:       # %bb.0: # %entry28; CHECK-BE-NEXT:    lxv v2, 32(r3)29; CHECK-BE-NEXT:    blr30;31; CHECK-P8-LABEL: testArray_01:32; CHECK-P8:       # %bb.0: # %entry33; CHECK-P8-NEXT:    addi r3, r3, 3234; CHECK-P8-NEXT:    lxvd2x vs0, 0, r335; CHECK-P8-NEXT:    xxswapd v2, vs036; CHECK-P8-NEXT:    blr37 38entry:39  %arrayidx = getelementptr inbounds fp128, ptr %sa, i64 240  %0 = load fp128, ptr %arrayidx, align 1641  ret fp128 %042}43 44; Function Attrs: norecurse nounwind readonly45define fp128 @testArray_02() {46; CHECK-LABEL: testArray_02:47; CHECK:       # %bb.0: # %entry48; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha49; CHECK-NEXT:    ld r3, .LC0@toc@l(r3)50; CHECK-NEXT:    lxv v2, 32(r3)51; CHECK-NEXT:    blr52;53; CHECK-BE-LABEL: testArray_02:54; CHECK-BE:       # %bb.0: # %entry55; CHECK-BE-NEXT:    addis r3, r2, .LC0@toc@ha56; CHECK-BE-NEXT:    ld r3, .LC0@toc@l(r3)57; CHECK-BE-NEXT:    lxv v2, 32(r3)58; CHECK-BE-NEXT:    blr59;60; CHECK-P8-LABEL: testArray_02:61; CHECK-P8:       # %bb.0: # %entry62; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha63; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3)64; CHECK-P8-NEXT:    addi r3, r3, 3265; CHECK-P8-NEXT:    lxvd2x vs0, 0, r366; CHECK-P8-NEXT:    xxswapd v2, vs067; CHECK-P8-NEXT:    blr68 69entry:70  %0 = load fp128, ptr getelementptr inbounds ([3 x fp128], ptr @a1,71                                                  i64 0, i64 2), align 1672  ret fp128 %073}74 75; Function Attrs: norecurse nounwind readnone76define fp128 @testStruct_01(fp128 inreg returned %a.coerce) {77; CHECK-LABEL: testStruct_01:78; CHECK:       # %bb.0: # %entry79; CHECK-NEXT:    blr80;81; CHECK-BE-LABEL: testStruct_01:82; CHECK-BE:       # %bb.0: # %entry83; CHECK-BE-NEXT:    blr84;85; CHECK-P8-LABEL: testStruct_01:86; CHECK-P8:       # %bb.0: # %entry87; CHECK-P8-NEXT:    blr88 89entry:90  ret fp128 %a.coerce91}92 93; Function Attrs: norecurse nounwind readnone94define fp128 @testStruct_02([8 x fp128] %a.coerce) {95; CHECK-LABEL: testStruct_02:96; CHECK:       # %bb.0: # %entry97; CHECK-NEXT:    vmr v2, v998; CHECK-NEXT:    blr99;100; CHECK-BE-LABEL: testStruct_02:101; CHECK-BE:       # %bb.0: # %entry102; CHECK-BE-NEXT:    vmr v2, v9103; CHECK-BE-NEXT:    blr104;105; CHECK-P8-LABEL: testStruct_02:106; CHECK-P8:       # %bb.0: # %entry107; CHECK-P8-NEXT:    vmr v2, v9108; CHECK-P8-NEXT:    blr109 110entry:111  %a.coerce.fca.7.extract = extractvalue [8 x fp128] %a.coerce, 7112  ret fp128 %a.coerce.fca.7.extract113}114 115; Since we can only pass a max of 8 float128 value in VSX registers, ensure we116; store to stack if passing more.117; Function Attrs: norecurse nounwind readonly118define fp128 @testStruct_03(ptr byval(%struct.With9fp128params) nocapture readonly align 16 %a) {119; CHECK-LABEL: testStruct_03:120; CHECK:       # %bb.0: # %entry121; CHECK-NEXT:    lxv v2, 128(r1)122; CHECK-NEXT:    std r3, 32(r1)123; CHECK-NEXT:    std r4, 40(r1)124; CHECK-NEXT:    std r5, 48(r1)125; CHECK-NEXT:    std r6, 56(r1)126; CHECK-NEXT:    std r7, 64(r1)127; CHECK-NEXT:    std r8, 72(r1)128; CHECK-NEXT:    std r9, 80(r1)129; CHECK-NEXT:    std r10, 88(r1)130; CHECK-NEXT:    blr131;132; CHECK-BE-LABEL: testStruct_03:133; CHECK-BE:       # %bb.0: # %entry134; CHECK-BE-NEXT:    lxv v2, 144(r1)135; CHECK-BE-NEXT:    std r3, 48(r1)136; CHECK-BE-NEXT:    std r4, 56(r1)137; CHECK-BE-NEXT:    std r5, 64(r1)138; CHECK-BE-NEXT:    std r6, 72(r1)139; CHECK-BE-NEXT:    std r7, 80(r1)140; CHECK-BE-NEXT:    std r8, 88(r1)141; CHECK-BE-NEXT:    std r9, 96(r1)142; CHECK-BE-NEXT:    std r10, 104(r1)143; CHECK-BE-NEXT:    blr144;145; CHECK-P8-LABEL: testStruct_03:146; CHECK-P8:       # %bb.0: # %entry147; CHECK-P8-NEXT:    li r11, 96148; CHECK-P8-NEXT:    addi r12, r1, 32149; CHECK-P8-NEXT:    std r3, 32(r1)150; CHECK-P8-NEXT:    std r4, 40(r1)151; CHECK-P8-NEXT:    std r5, 48(r1)152; CHECK-P8-NEXT:    std r6, 56(r1)153; CHECK-P8-NEXT:    lxvd2x vs0, r12, r11154; CHECK-P8-NEXT:    std r7, 64(r1)155; CHECK-P8-NEXT:    std r8, 72(r1)156; CHECK-P8-NEXT:    std r9, 80(r1)157; CHECK-P8-NEXT:    std r10, 88(r1)158; CHECK-P8-NEXT:    xxswapd v2, vs0159; CHECK-P8-NEXT:    blr160 161entry:162  %a7 = getelementptr inbounds %struct.With9fp128params,163                               ptr %a, i64 0, i32 6164  %0 = load fp128, ptr %a7, align 16165  ret fp128 %0166}167 168; Function Attrs: norecurse nounwind readnone169define fp128 @testStruct_04([8 x fp128] %a.coerce) {170; CHECK-LABEL: testStruct_04:171; CHECK:       # %bb.0: # %entry172; CHECK-NEXT:    vmr v2, v5173; CHECK-NEXT:    blr174;175; CHECK-BE-LABEL: testStruct_04:176; CHECK-BE:       # %bb.0: # %entry177; CHECK-BE-NEXT:    vmr v2, v5178; CHECK-BE-NEXT:    blr179;180; CHECK-P8-LABEL: testStruct_04:181; CHECK-P8:       # %bb.0: # %entry182; CHECK-P8-NEXT:    vmr v2, v5183; CHECK-P8-NEXT:    blr184 185entry:186  %a.coerce.fca.3.extract = extractvalue [8 x fp128] %a.coerce, 3187  ret fp128 %a.coerce.fca.3.extract188}189 190; Function Attrs: norecurse nounwind readnone191define fp128 @testHUnion_01([1 x fp128] %a.coerce) {192; CHECK-LABEL: testHUnion_01:193; CHECK:       # %bb.0: # %entry194; CHECK-NEXT:    blr195;196; CHECK-BE-LABEL: testHUnion_01:197; CHECK-BE:       # %bb.0: # %entry198; CHECK-BE-NEXT:    blr199;200; CHECK-P8-LABEL: testHUnion_01:201; CHECK-P8:       # %bb.0: # %entry202; CHECK-P8-NEXT:    blr203 204entry:205  %a.coerce.fca.0.extract = extractvalue [1 x fp128] %a.coerce, 0206  ret fp128 %a.coerce.fca.0.extract207}208 209; Function Attrs: norecurse nounwind readnone210define fp128 @testHUnion_02([3 x fp128] %a.coerce) {211; CHECK-LABEL: testHUnion_02:212; CHECK:       # %bb.0: # %entry213; CHECK-NEXT:    blr214;215; CHECK-BE-LABEL: testHUnion_02:216; CHECK-BE:       # %bb.0: # %entry217; CHECK-BE-NEXT:    blr218;219; CHECK-P8-LABEL: testHUnion_02:220; CHECK-P8:       # %bb.0: # %entry221; CHECK-P8-NEXT:    blr222 223entry:224  %a.coerce.fca.0.extract = extractvalue [3 x fp128] %a.coerce, 0225  ret fp128 %a.coerce.fca.0.extract226}227 228; Function Attrs: norecurse nounwind readnone229define fp128 @testHUnion_03([3 x fp128] %a.coerce) {230; CHECK-LABEL: testHUnion_03:231; CHECK:       # %bb.0: # %entry232; CHECK-NEXT:    vmr v2, v3233; CHECK-NEXT:    blr234;235; CHECK-BE-LABEL: testHUnion_03:236; CHECK-BE:       # %bb.0: # %entry237; CHECK-BE-NEXT:    vmr v2, v3238; CHECK-BE-NEXT:    blr239;240; CHECK-P8-LABEL: testHUnion_03:241; CHECK-P8:       # %bb.0: # %entry242; CHECK-P8-NEXT:    vmr v2, v3243; CHECK-P8-NEXT:    blr244 245entry:246  %a.coerce.fca.1.extract = extractvalue [3 x fp128] %a.coerce, 1247  ret fp128 %a.coerce.fca.1.extract248}249 250; Function Attrs: norecurse nounwind readnone251define fp128 @testHUnion_04([3 x fp128] %a.coerce) {252; CHECK-LABEL: testHUnion_04:253; CHECK:       # %bb.0: # %entry254; CHECK-NEXT:    vmr v2, v4255; CHECK-NEXT:    blr256;257; CHECK-BE-LABEL: testHUnion_04:258; CHECK-BE:       # %bb.0: # %entry259; CHECK-BE-NEXT:    vmr v2, v4260; CHECK-BE-NEXT:    blr261;262; CHECK-P8-LABEL: testHUnion_04:263; CHECK-P8:       # %bb.0: # %entry264; CHECK-P8-NEXT:    vmr v2, v4265; CHECK-P8-NEXT:    blr266 267entry:268  %a.coerce.fca.2.extract = extractvalue [3 x fp128] %a.coerce, 2269  ret fp128 %a.coerce.fca.2.extract270}271 272; Testing mixed member aggregates.273 274%struct.MixedC = type { i32, %struct.SA, float, [12 x i8] }275%struct.SA = type { double, fp128, <4 x float> }276 277; Function Attrs: norecurse nounwind readnone278define fp128 @testMixedAggregate([3 x i128] %a.coerce) {279; CHECK-LABEL: testMixedAggregate:280; CHECK:       # %bb.0: # %entry281; CHECK-NEXT:    mtvsrdd v2, r8, r7282; CHECK-NEXT:    blr283;284; CHECK-BE-LABEL: testMixedAggregate:285; CHECK-BE:       # %bb.0: # %entry286; CHECK-BE-NEXT:    mtvsrdd v2, r7, r8287; CHECK-BE-NEXT:    blr288;289; CHECK-P8-LABEL: testMixedAggregate:290; CHECK-P8:       # %bb.0: # %entry291; CHECK-P8-NEXT:    addi r3, r1, -16292; CHECK-P8-NEXT:    std r8, -8(r1)293; CHECK-P8-NEXT:    std r7, -16(r1)294; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3295; CHECK-P8-NEXT:    xxswapd v2, vs0296; CHECK-P8-NEXT:    blr297 298entry:299  %a.coerce.fca.2.extract = extractvalue [3 x i128] %a.coerce, 2300  %0 = bitcast i128 %a.coerce.fca.2.extract to fp128301  ret fp128 %0302}303 304; Function Attrs: norecurse nounwind readnone305define fp128 @testMixedAggregate_02([4 x i128] %a.coerce) {306; CHECK-LABEL: testMixedAggregate_02:307; CHECK:       # %bb.0: # %entry308; CHECK-NEXT:    mtvsrdd v2, r6, r5309; CHECK-NEXT:    blr310;311; CHECK-BE-LABEL: testMixedAggregate_02:312; CHECK-BE:       # %bb.0: # %entry313; CHECK-BE-NEXT:    mtvsrdd v2, r5, r6314; CHECK-BE-NEXT:    blr315;316; CHECK-P8-LABEL: testMixedAggregate_02:317; CHECK-P8:       # %bb.0: # %entry318; CHECK-P8-NEXT:    addi r3, r1, -16319; CHECK-P8-NEXT:    std r6, -8(r1)320; CHECK-P8-NEXT:    std r5, -16(r1)321; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3322; CHECK-P8-NEXT:    xxswapd v2, vs0323; CHECK-P8-NEXT:    blr324 325entry:326  %a.coerce.fca.1.extract = extractvalue [4 x i128] %a.coerce, 1327  %0 = bitcast i128 %a.coerce.fca.1.extract to fp128328  ret fp128 %0329}330 331; Function Attrs: norecurse nounwind readnone332define fp128 @testMixedAggregate_03([4 x i128] %sa.coerce) {333; CHECK-LABEL: testMixedAggregate_03:334; CHECK:       # %bb.0: # %entry335; CHECK-NEXT:    mtvsrwa v2, r3336; CHECK-NEXT:    mtvsrdd v3, r6, r5337; CHECK-NEXT:    xscvsdqp v2, v2338; CHECK-NEXT:    xsaddqp v2, v3, v2339; CHECK-NEXT:    mtvsrd v3, r10340; CHECK-NEXT:    xscvsdqp v3, v3341; CHECK-NEXT:    xsaddqp v2, v2, v3342; CHECK-NEXT:    blr343;344; CHECK-BE-LABEL: testMixedAggregate_03:345; CHECK-BE:       # %bb.0: # %entry346; CHECK-BE-NEXT:    mtvsrwa v2, r4347; CHECK-BE-NEXT:    mtvsrdd v3, r5, r6348; CHECK-BE-NEXT:    xscvsdqp v2, v2349; CHECK-BE-NEXT:    xsaddqp v2, v3, v2350; CHECK-BE-NEXT:    mtvsrd v3, r9351; CHECK-BE-NEXT:    xscvsdqp v3, v3352; CHECK-BE-NEXT:    xsaddqp v2, v2, v3353; CHECK-BE-NEXT:    blr354;355; CHECK-P8-LABEL: testMixedAggregate_03:356; CHECK-P8:       # %bb.0: # %entry357; CHECK-P8-NEXT:    mflr r0358; CHECK-P8-NEXT:    stdu r1, -96(r1)359; CHECK-P8-NEXT:    std r0, 112(r1)360; CHECK-P8-NEXT:    .cfi_def_cfa_offset 96361; CHECK-P8-NEXT:    .cfi_offset lr, 16362; CHECK-P8-NEXT:    .cfi_offset r30, -16363; CHECK-P8-NEXT:    .cfi_offset v31, -32364; CHECK-P8-NEXT:    li r4, 64365; CHECK-P8-NEXT:    std r30, 80(r1) # 8-byte Folded Spill366; CHECK-P8-NEXT:    extsw r3, r3367; CHECK-P8-NEXT:    mr r30, r10368; CHECK-P8-NEXT:    stvx v31, r1, r4 # 16-byte Folded Spill369; CHECK-P8-NEXT:    addi r4, r1, 48370; CHECK-P8-NEXT:    std r6, 56(r1)371; CHECK-P8-NEXT:    std r5, 48(r1)372; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4373; CHECK-P8-NEXT:    xxswapd v31, vs0374; CHECK-P8-NEXT:    bl __floatsikf375; CHECK-P8-NEXT:    nop376; CHECK-P8-NEXT:    vmr v3, v2377; CHECK-P8-NEXT:    vmr v2, v31378; CHECK-P8-NEXT:    bl __addkf3379; CHECK-P8-NEXT:    nop380; CHECK-P8-NEXT:    mr r3, r30381; CHECK-P8-NEXT:    vmr v31, v2382; CHECK-P8-NEXT:    bl __floatdikf383; CHECK-P8-NEXT:    nop384; CHECK-P8-NEXT:    vmr v3, v2385; CHECK-P8-NEXT:    vmr v2, v31386; CHECK-P8-NEXT:    bl __addkf3387; CHECK-P8-NEXT:    nop388; CHECK-P8-NEXT:    li r3, 64389; CHECK-P8-NEXT:    ld r30, 80(r1) # 8-byte Folded Reload390; CHECK-P8-NEXT:    lvx v31, r1, r3 # 16-byte Folded Reload391; CHECK-P8-NEXT:    addi r1, r1, 96392; CHECK-P8-NEXT:    ld r0, 16(r1)393; CHECK-P8-NEXT:    mtlr r0394; CHECK-P8-NEXT:    blr395entry:396  %sa.coerce.fca.0.extract = extractvalue [4 x i128] %sa.coerce, 0397  %sa.sroa.0.0.extract.trunc = trunc i128 %sa.coerce.fca.0.extract to i32398  %sa.coerce.fca.1.extract = extractvalue [4 x i128] %sa.coerce, 1399  %sa.coerce.fca.3.extract = extractvalue [4 x i128] %sa.coerce, 3400  %sa.sroa.6.48.extract.shift = lshr i128 %sa.coerce.fca.3.extract, 64401  %sa.sroa.6.48.extract.trunc = trunc i128 %sa.sroa.6.48.extract.shift to i64402  %conv = sitofp i32 %sa.sroa.0.0.extract.trunc to fp128403  %0 = bitcast i128 %sa.coerce.fca.1.extract to fp128404  %add = fadd fp128 %0, %conv405  %conv2 = sitofp i64 %sa.sroa.6.48.extract.trunc to fp128406  %add3 = fadd fp128 %add, %conv2407  ret fp128 %add3408}409 410 411; Function Attrs: norecurse nounwind readonly412define fp128 @testNestedAggregate(ptr byval(%struct.MixedC) nocapture readonly align 16 %a) {413; CHECK-LABEL: testNestedAggregate:414; CHECK:       # %bb.0: # %entry415; CHECK-NEXT:    std r8, 72(r1)416; CHECK-NEXT:    std r7, 64(r1)417; CHECK-NEXT:    lxv v2, 64(r1)418; CHECK-NEXT:    std r3, 32(r1)419; CHECK-NEXT:    std r4, 40(r1)420; CHECK-NEXT:    std r5, 48(r1)421; CHECK-NEXT:    std r6, 56(r1)422; CHECK-NEXT:    std r9, 80(r1)423; CHECK-NEXT:    std r10, 88(r1)424; CHECK-NEXT:    blr425;426; CHECK-BE-LABEL: testNestedAggregate:427; CHECK-BE:       # %bb.0: # %entry428; CHECK-BE-NEXT:    std r8, 88(r1)429; CHECK-BE-NEXT:    std r7, 80(r1)430; CHECK-BE-NEXT:    lxv v2, 80(r1)431; CHECK-BE-NEXT:    std r3, 48(r1)432; CHECK-BE-NEXT:    std r4, 56(r1)433; CHECK-BE-NEXT:    std r5, 64(r1)434; CHECK-BE-NEXT:    std r6, 72(r1)435; CHECK-BE-NEXT:    std r9, 96(r1)436; CHECK-BE-NEXT:    std r10, 104(r1)437; CHECK-BE-NEXT:    blr438;439; CHECK-P8-LABEL: testNestedAggregate:440; CHECK-P8:       # %bb.0: # %entry441; CHECK-P8-NEXT:    std r8, 72(r1)442; CHECK-P8-NEXT:    std r7, 64(r1)443; CHECK-P8-NEXT:    li r7, 32444; CHECK-P8-NEXT:    addi r8, r1, 32445; CHECK-P8-NEXT:    std r9, 80(r1)446; CHECK-P8-NEXT:    std r10, 88(r1)447; CHECK-P8-NEXT:    lxvd2x vs0, r8, r7448; CHECK-P8-NEXT:    std r3, 32(r1)449; CHECK-P8-NEXT:    std r4, 40(r1)450; CHECK-P8-NEXT:    std r5, 48(r1)451; CHECK-P8-NEXT:    std r6, 56(r1)452; CHECK-P8-NEXT:    xxswapd v2, vs0453; CHECK-P8-NEXT:    blr454 455entry:456  %c = getelementptr inbounds %struct.MixedC, ptr %a, i64 0, i32 1, i32 1457  %0 = load fp128, ptr %c, align 16458  ret fp128 %0459}460 461; Function Attrs: norecurse nounwind readnone462define fp128 @testUnion_01([1 x i128] %a.coerce) {463; CHECK-LABEL: testUnion_01:464; CHECK:       # %bb.0: # %entry465; CHECK-NEXT:    mtvsrdd v2, r4, r3466; CHECK-NEXT:    blr467;468; CHECK-BE-LABEL: testUnion_01:469; CHECK-BE:       # %bb.0: # %entry470; CHECK-BE-NEXT:    mtvsrdd v2, r3, r4471; CHECK-BE-NEXT:    blr472;473; CHECK-P8-LABEL: testUnion_01:474; CHECK-P8:       # %bb.0: # %entry475; CHECK-P8-NEXT:    std r3, -16(r1)476; CHECK-P8-NEXT:    addi r3, r1, -16477; CHECK-P8-NEXT:    std r4, -8(r1)478; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3479; CHECK-P8-NEXT:    xxswapd v2, vs0480; CHECK-P8-NEXT:    blr481 482entry:483  %a.coerce.fca.0.extract = extractvalue [1 x i128] %a.coerce, 0484  %0 = bitcast i128 %a.coerce.fca.0.extract to fp128485  ret fp128 %0486}487 488; Function Attrs: norecurse nounwind readnone489define fp128 @testUnion_02([1 x i128] %a.coerce) {490; CHECK-LABEL: testUnion_02:491; CHECK:       # %bb.0: # %entry492; CHECK-NEXT:    mtvsrdd v2, r4, r3493; CHECK-NEXT:    blr494;495; CHECK-BE-LABEL: testUnion_02:496; CHECK-BE:       # %bb.0: # %entry497; CHECK-BE-NEXT:    mtvsrdd v2, r3, r4498; CHECK-BE-NEXT:    blr499;500; CHECK-P8-LABEL: testUnion_02:501; CHECK-P8:       # %bb.0: # %entry502; CHECK-P8-NEXT:    std r3, -16(r1)503; CHECK-P8-NEXT:    addi r3, r1, -16504; CHECK-P8-NEXT:    std r4, -8(r1)505; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3506; CHECK-P8-NEXT:    xxswapd v2, vs0507; CHECK-P8-NEXT:    blr508 509entry:510  %a.coerce.fca.0.extract = extractvalue [1 x i128] %a.coerce, 0511  %0 = bitcast i128 %a.coerce.fca.0.extract to fp128512  ret fp128 %0513}514 515; Function Attrs: norecurse nounwind readnone516define fp128 @testUnion_03([4 x i128] %a.coerce) {517; CHECK-LABEL: testUnion_03:518; CHECK:       # %bb.0: # %entry519; CHECK-NEXT:    mtvsrdd v2, r8, r7520; CHECK-NEXT:    blr521;522; CHECK-BE-LABEL: testUnion_03:523; CHECK-BE:       # %bb.0: # %entry524; CHECK-BE-NEXT:    mtvsrdd v2, r7, r8525; CHECK-BE-NEXT:    blr526;527; CHECK-P8-LABEL: testUnion_03:528; CHECK-P8:       # %bb.0: # %entry529; CHECK-P8-NEXT:    addi r3, r1, -16530; CHECK-P8-NEXT:    std r8, -8(r1)531; CHECK-P8-NEXT:    std r7, -16(r1)532; CHECK-P8-NEXT:    lxvd2x vs0, 0, r3533; CHECK-P8-NEXT:    xxswapd v2, vs0534; CHECK-P8-NEXT:    blr535 536entry:537  %a.coerce.fca.2.extract = extractvalue [4 x i128] %a.coerce, 2538  %0 = bitcast i128 %a.coerce.fca.2.extract to fp128539  ret fp128 %0540}541 542; Function Attrs: nounwind543define fp128 @sum_float128(i32 signext %count, ...) {544; CHECK-LABEL: sum_float128:545; CHECK:       # %bb.0: # %entry546; CHECK-NEXT:    std r4, 40(r1)547; CHECK-NEXT:    addis r4, r2, .LCPI17_0@toc@ha548; CHECK-NEXT:    cmpwi r3, 0549; CHECK-NEXT:    std r5, 48(r1)550; CHECK-NEXT:    addi r4, r4, .LCPI17_0@toc@l551; CHECK-NEXT:    std r6, 56(r1)552; CHECK-NEXT:    std r7, 64(r1)553; CHECK-NEXT:    std r8, 72(r1)554; CHECK-NEXT:    lxv v2, 0(r4)555; CHECK-NEXT:    std r9, 80(r1)556; CHECK-NEXT:    std r10, 88(r1)557; CHECK-NEXT:    blelr cr0558; CHECK-NEXT:  # %bb.1: # %if.end559; CHECK-NEXT:    addi r3, r1, 40560; CHECK-NEXT:    addi r4, r1, 72561; CHECK-NEXT:    lxvx v3, 0, r3562; CHECK-NEXT:    std r4, -8(r1)563; CHECK-NEXT:    xsaddqp v2, v3, v2564; CHECK-NEXT:    lxv v3, 16(r3)565; CHECK-NEXT:    xsaddqp v2, v2, v3566; CHECK-NEXT:    blr567;568; CHECK-BE-LABEL: sum_float128:569; CHECK-BE:       # %bb.0: # %entry570; CHECK-BE-NEXT:    std r4, 56(r1)571; CHECK-BE-NEXT:    addis r4, r2, .LCPI17_0@toc@ha572; CHECK-BE-NEXT:    cmpwi r3, 0573; CHECK-BE-NEXT:    std r5, 64(r1)574; CHECK-BE-NEXT:    addi r4, r4, .LCPI17_0@toc@l575; CHECK-BE-NEXT:    std r6, 72(r1)576; CHECK-BE-NEXT:    std r7, 80(r1)577; CHECK-BE-NEXT:    std r8, 88(r1)578; CHECK-BE-NEXT:    lxv v2, 0(r4)579; CHECK-BE-NEXT:    std r9, 96(r1)580; CHECK-BE-NEXT:    std r10, 104(r1)581; CHECK-BE-NEXT:    blelr cr0582; CHECK-BE-NEXT:  # %bb.1: # %if.end583; CHECK-BE-NEXT:    addi r3, r1, 56584; CHECK-BE-NEXT:    addi r4, r1, 88585; CHECK-BE-NEXT:    lxvx v3, 0, r3586; CHECK-BE-NEXT:    std r4, -8(r1)587; CHECK-BE-NEXT:    xsaddqp v2, v3, v2588; CHECK-BE-NEXT:    lxv v3, 16(r3)589; CHECK-BE-NEXT:    xsaddqp v2, v2, v3590; CHECK-BE-NEXT:    blr591;592; CHECK-P8-LABEL: sum_float128:593; CHECK-P8:       # %bb.0: # %entry594; CHECK-P8-NEXT:    mflr r0595; CHECK-P8-NEXT:    .cfi_def_cfa_offset 64596; CHECK-P8-NEXT:    .cfi_offset lr, 16597; CHECK-P8-NEXT:    .cfi_offset r30, -16598; CHECK-P8-NEXT:    std r30, -16(r1) # 8-byte Folded Spill599; CHECK-P8-NEXT:    stdu r1, -64(r1)600; CHECK-P8-NEXT:    std r0, 80(r1)601; CHECK-P8-NEXT:    std r4, 104(r1)602; CHECK-P8-NEXT:    addis r4, r2, .LCPI17_0@toc@ha603; CHECK-P8-NEXT:    cmpwi r3, 0604; CHECK-P8-NEXT:    std r5, 112(r1)605; CHECK-P8-NEXT:    std r6, 120(r1)606; CHECK-P8-NEXT:    addi r4, r4, .LCPI17_0@toc@l607; CHECK-P8-NEXT:    std r7, 128(r1)608; CHECK-P8-NEXT:    std r8, 136(r1)609; CHECK-P8-NEXT:    lxvd2x vs0, 0, r4610; CHECK-P8-NEXT:    std r9, 144(r1)611; CHECK-P8-NEXT:    std r10, 152(r1)612; CHECK-P8-NEXT:    xxswapd v3, vs0613; CHECK-P8-NEXT:    ble cr0, .LBB17_2614; CHECK-P8-NEXT:  # %bb.1: # %if.end615; CHECK-P8-NEXT:    addi r30, r1, 104616; CHECK-P8-NEXT:    lxvd2x vs0, 0, r30617; CHECK-P8-NEXT:    xxswapd v2, vs0618; CHECK-P8-NEXT:    bl __addkf3619; CHECK-P8-NEXT:    nop620; CHECK-P8-NEXT:    li r3, 16621; CHECK-P8-NEXT:    lxvd2x vs0, r30, r3622; CHECK-P8-NEXT:    addi r3, r1, 136623; CHECK-P8-NEXT:    std r3, 40(r1)624; CHECK-P8-NEXT:    xxswapd v3, vs0625; CHECK-P8-NEXT:    bl __addkf3626; CHECK-P8-NEXT:    nop627; CHECK-P8-NEXT:    vmr v3, v2628; CHECK-P8-NEXT:  .LBB17_2: # %cleanup629; CHECK-P8-NEXT:    vmr v2, v3630; CHECK-P8-NEXT:    addi r1, r1, 64631; CHECK-P8-NEXT:    ld r0, 16(r1)632; CHECK-P8-NEXT:    ld r30, -16(r1) # 8-byte Folded Reload633; CHECK-P8-NEXT:    mtlr r0634; CHECK-P8-NEXT:    blr635entry:636  %ap = alloca ptr, align 8637  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %ap) #2638  %cmp = icmp slt i32 %count, 1639  br i1 %cmp, label %cleanup, label %if.end640 641if.end:                                           ; preds = %entry642  call void @llvm.va_start(ptr nonnull %ap)643  %argp.cur = load ptr, ptr %ap, align 8644  %argp.next = getelementptr inbounds i8, ptr %argp.cur, i64 16645  %0 = load fp128, ptr %argp.cur, align 8646  %add = fadd fp128 %0, 0xL00000000000000000000000000000000647  %argp.next3 = getelementptr inbounds i8, ptr %argp.cur, i64 32648  store ptr %argp.next3, ptr %ap, align 8649  %1 = load fp128, ptr %argp.next, align 8650  %add4 = fadd fp128 %add, %1651  call void @llvm.va_end(ptr nonnull %ap)652  br label %cleanup653 654cleanup:                                          ; preds = %entry, %if.end655  %retval.0 = phi fp128 [ %add4, %if.end ], [ 0xL00000000000000000000000000000000, %entry ]656  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %ap) #2657  ret fp128 %retval.0658}659 660declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1661declare void @llvm.va_start(ptr) #2662declare void @llvm.va_end(ptr) #2663declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1664