534 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \3; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \5; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s \6; RUN: -check-prefix=CHECK-P87 8define void @qpFmadd(ptr nocapture readonly %a, ptr nocapture %b,9; CHECK-LABEL: qpFmadd:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: lxv v2, 0(r3)12; CHECK-NEXT: lxv v3, 0(r4)13; CHECK-NEXT: lxv v4, 0(r5)14; CHECK-NEXT: xsmaddqp v4, v2, v315; CHECK-NEXT: stxv v4, 0(r6)16; CHECK-NEXT: blr17;18; CHECK-P8-LABEL: qpFmadd:19; CHECK-P8: # %bb.0: # %entry20; CHECK-P8-NEXT: mflr r021; CHECK-P8-NEXT: stdu r1, -80(r1)22; CHECK-P8-NEXT: std r0, 96(r1)23; CHECK-P8-NEXT: .cfi_def_cfa_offset 8024; CHECK-P8-NEXT: .cfi_offset lr, 1625; CHECK-P8-NEXT: .cfi_offset r30, -1626; CHECK-P8-NEXT: .cfi_offset v31, -3227; CHECK-P8-NEXT: lxvd2x vs0, 0, r328; CHECK-P8-NEXT: li r7, 4829; CHECK-P8-NEXT: std r30, 64(r1) # 8-byte Folded Spill30; CHECK-P8-NEXT: mr r30, r631; CHECK-P8-NEXT: stvx v31, r1, r7 # 16-byte Folded Spill32; CHECK-P8-NEXT: xxswapd v2, vs033; CHECK-P8-NEXT: lxvd2x vs0, 0, r434; CHECK-P8-NEXT: xxswapd v3, vs035; CHECK-P8-NEXT: lxvd2x vs0, 0, r536; CHECK-P8-NEXT: xxswapd v31, vs037; CHECK-P8-NEXT: bl __mulkf338; CHECK-P8-NEXT: nop39; CHECK-P8-NEXT: vmr v3, v3140; CHECK-P8-NEXT: bl __addkf341; CHECK-P8-NEXT: nop42; CHECK-P8-NEXT: li r3, 4843; CHECK-P8-NEXT: xxswapd vs0, v244; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload45; CHECK-P8-NEXT: stxvd2x vs0, 0, r3046; CHECK-P8-NEXT: ld r30, 64(r1) # 8-byte Folded Reload47; CHECK-P8-NEXT: addi r1, r1, 8048; CHECK-P8-NEXT: ld r0, 16(r1)49; CHECK-P8-NEXT: mtlr r050; CHECK-P8-NEXT: blr51 ptr nocapture readonly %c, ptr nocapture %res) {52entry:53 %0 = load fp128, ptr %a, align 1654 %1 = load fp128, ptr %b, align 1655 %2 = load fp128, ptr %c, align 1656 %madd = tail call fp128 @llvm.fmuladd.f128(fp128 %0, fp128 %1, fp128 %2)57 store fp128 %madd, ptr %res, align 1658 ret void59}60declare fp128 @llvm.fmuladd.f128(fp128, fp128, fp128)61 62; Function Attrs: norecurse nounwind63define void @qpFmadd_02(ptr nocapture readonly %a,64; CHECK-LABEL: qpFmadd_02:65; CHECK: # %bb.0: # %entry66; CHECK-NEXT: lxv v2, 0(r3)67; CHECK-NEXT: lxv v3, 0(r4)68; CHECK-NEXT: lxv v4, 0(r5)69; CHECK-NEXT: xsmaddqp v2, v3, v470; CHECK-NEXT: stxv v2, 0(r6)71; CHECK-NEXT: blr72;73; CHECK-P8-LABEL: qpFmadd_02:74; CHECK-P8: # %bb.0: # %entry75; CHECK-P8-NEXT: mflr r076; CHECK-P8-NEXT: stdu r1, -80(r1)77; CHECK-P8-NEXT: std r0, 96(r1)78; CHECK-P8-NEXT: .cfi_def_cfa_offset 8079; CHECK-P8-NEXT: .cfi_offset lr, 1680; CHECK-P8-NEXT: .cfi_offset r30, -1681; CHECK-P8-NEXT: .cfi_offset v31, -3282; CHECK-P8-NEXT: lxvd2x vs0, 0, r383; CHECK-P8-NEXT: li r7, 4884; CHECK-P8-NEXT: std r30, 64(r1) # 8-byte Folded Spill85; CHECK-P8-NEXT: mr r30, r686; CHECK-P8-NEXT: stvx v31, r1, r7 # 16-byte Folded Spill87; CHECK-P8-NEXT: xxswapd v31, vs088; CHECK-P8-NEXT: lxvd2x vs0, 0, r489; CHECK-P8-NEXT: xxswapd v2, vs090; CHECK-P8-NEXT: lxvd2x vs0, 0, r591; CHECK-P8-NEXT: xxswapd v3, vs092; CHECK-P8-NEXT: bl __mulkf393; CHECK-P8-NEXT: nop94; CHECK-P8-NEXT: vmr v3, v295; CHECK-P8-NEXT: vmr v2, v3196; CHECK-P8-NEXT: bl __addkf397; CHECK-P8-NEXT: nop98; CHECK-P8-NEXT: li r3, 4899; CHECK-P8-NEXT: xxswapd vs0, v2100; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload101; CHECK-P8-NEXT: stxvd2x vs0, 0, r30102; CHECK-P8-NEXT: ld r30, 64(r1) # 8-byte Folded Reload103; CHECK-P8-NEXT: addi r1, r1, 80104; CHECK-P8-NEXT: ld r0, 16(r1)105; CHECK-P8-NEXT: mtlr r0106; CHECK-P8-NEXT: blr107 ptr nocapture readonly %b,108 ptr nocapture readonly %c, ptr nocapture %res) {109entry:110 %0 = load fp128, ptr %a, align 16111 %1 = load fp128, ptr %b, align 16112 %2 = load fp128, ptr %c, align 16113 %mul = fmul contract fp128 %1, %2114 %add = fadd contract fp128 %0, %mul115 store fp128 %add, ptr %res, align 16116 ret void117}118 119; Function Attrs: norecurse nounwind120define void @qpFmadd_03(ptr nocapture readonly %a,121; CHECK-LABEL: qpFmadd_03:122; CHECK: # %bb.0: # %entry123; CHECK-NEXT: lxv v2, 0(r3)124; CHECK-NEXT: lxv v3, 0(r4)125; CHECK-NEXT: lxv v4, 0(r5)126; CHECK-NEXT: xsmaddqp v4, v2, v3127; CHECK-NEXT: stxv v4, 0(r6)128; CHECK-NEXT: blr129;130; CHECK-P8-LABEL: qpFmadd_03:131; CHECK-P8: # %bb.0: # %entry132; CHECK-P8-NEXT: mflr r0133; CHECK-P8-NEXT: .cfi_def_cfa_offset 64134; CHECK-P8-NEXT: .cfi_offset lr, 16135; CHECK-P8-NEXT: .cfi_offset r29, -24136; CHECK-P8-NEXT: .cfi_offset r30, -16137; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill138; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill139; CHECK-P8-NEXT: stdu r1, -64(r1)140; CHECK-P8-NEXT: std r0, 80(r1)141; CHECK-P8-NEXT: mr r30, r6142; CHECK-P8-NEXT: mr r29, r5143; CHECK-P8-NEXT: lxvd2x vs0, 0, r3144; CHECK-P8-NEXT: xxswapd v2, vs0145; CHECK-P8-NEXT: lxvd2x vs0, 0, r4146; CHECK-P8-NEXT: xxswapd v3, vs0147; CHECK-P8-NEXT: bl __mulkf3148; CHECK-P8-NEXT: nop149; CHECK-P8-NEXT: lxvd2x vs0, 0, r29150; CHECK-P8-NEXT: xxswapd v3, vs0151; CHECK-P8-NEXT: bl __addkf3152; CHECK-P8-NEXT: nop153; CHECK-P8-NEXT: xxswapd vs0, v2154; CHECK-P8-NEXT: stxvd2x vs0, 0, r30155; CHECK-P8-NEXT: addi r1, r1, 64156; CHECK-P8-NEXT: ld r0, 16(r1)157; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload158; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload159; CHECK-P8-NEXT: mtlr r0160; CHECK-P8-NEXT: blr161 ptr nocapture readonly %b,162 ptr nocapture readonly %c, ptr nocapture %res) {163entry:164 %0 = load fp128, ptr %a, align 16165 %1 = load fp128, ptr %b, align 16166 %mul = fmul contract fp128 %0, %1167 %2 = load fp128, ptr %c, align 16168 %add = fadd contract fp128 %mul, %2169 store fp128 %add, ptr %res, align 16170 ret void171}172 173; Function Attrs: norecurse nounwind174define void @qpFnmadd(ptr nocapture readonly %a,175; CHECK-LABEL: qpFnmadd:176; CHECK: # %bb.0: # %entry177; CHECK-NEXT: lxv v2, 0(r3)178; CHECK-NEXT: lxv v3, 0(r4)179; CHECK-NEXT: lxv v4, 0(r5)180; CHECK-NEXT: xsnmaddqp v2, v3, v4181; CHECK-NEXT: stxv v2, 0(r6)182; CHECK-NEXT: blr183;184; CHECK-P8-LABEL: qpFnmadd:185; CHECK-P8: # %bb.0: # %entry186; CHECK-P8-NEXT: mflr r0187; CHECK-P8-NEXT: stdu r1, -96(r1)188; CHECK-P8-NEXT: std r0, 112(r1)189; CHECK-P8-NEXT: .cfi_def_cfa_offset 96190; CHECK-P8-NEXT: .cfi_offset lr, 16191; CHECK-P8-NEXT: .cfi_offset r30, -16192; CHECK-P8-NEXT: .cfi_offset v31, -32193; CHECK-P8-NEXT: lxvd2x vs0, 0, r3194; CHECK-P8-NEXT: li r7, 64195; CHECK-P8-NEXT: std r30, 80(r1) # 8-byte Folded Spill196; CHECK-P8-NEXT: mr r30, r6197; CHECK-P8-NEXT: stvx v31, r1, r7 # 16-byte Folded Spill198; CHECK-P8-NEXT: xxswapd v31, vs0199; CHECK-P8-NEXT: lxvd2x vs0, 0, r4200; CHECK-P8-NEXT: xxswapd v2, vs0201; CHECK-P8-NEXT: lxvd2x vs0, 0, r5202; CHECK-P8-NEXT: xxswapd v3, vs0203; CHECK-P8-NEXT: bl __mulkf3204; CHECK-P8-NEXT: nop205; CHECK-P8-NEXT: vmr v3, v2206; CHECK-P8-NEXT: vmr v2, v31207; CHECK-P8-NEXT: bl __addkf3208; CHECK-P8-NEXT: nop209; CHECK-P8-NEXT: xxswapd vs0, v2210; CHECK-P8-NEXT: addi r3, r1, 48211; CHECK-P8-NEXT: stxvd2x vs0, 0, r3212; CHECK-P8-NEXT: lbz r4, 63(r1)213; CHECK-P8-NEXT: xori r4, r4, 128214; CHECK-P8-NEXT: stb r4, 63(r1)215; CHECK-P8-NEXT: lxvd2x vs0, 0, r3216; CHECK-P8-NEXT: li r3, 64217; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload218; CHECK-P8-NEXT: stxvd2x vs0, 0, r30219; CHECK-P8-NEXT: ld r30, 80(r1) # 8-byte Folded Reload220; CHECK-P8-NEXT: addi r1, r1, 96221; CHECK-P8-NEXT: ld r0, 16(r1)222; CHECK-P8-NEXT: mtlr r0223; CHECK-P8-NEXT: blr224 ptr nocapture readonly %b,225 ptr nocapture readonly %c, ptr nocapture %res) {226entry:227 %0 = load fp128, ptr %a, align 16228 %1 = load fp128, ptr %b, align 16229 %2 = load fp128, ptr %c, align 16230 %mul = fmul contract fp128 %1, %2231 %add = fadd contract fp128 %0, %mul232 %sub = fsub fp128 0xL00000000000000008000000000000000, %add233 store fp128 %sub, ptr %res, align 16234 ret void235}236 237; Function Attrs: norecurse nounwind238define void @qpFnmadd_02(ptr nocapture readonly %a,239; CHECK-LABEL: qpFnmadd_02:240; CHECK: # %bb.0: # %entry241; CHECK-NEXT: lxv v2, 0(r3)242; CHECK-NEXT: lxv v3, 0(r4)243; CHECK-NEXT: lxv v4, 0(r5)244; CHECK-NEXT: xsnmaddqp v4, v2, v3245; CHECK-NEXT: stxv v4, 0(r6)246; CHECK-NEXT: blr247;248; CHECK-P8-LABEL: qpFnmadd_02:249; CHECK-P8: # %bb.0: # %entry250; CHECK-P8-NEXT: mflr r0251; CHECK-P8-NEXT: .cfi_def_cfa_offset 80252; CHECK-P8-NEXT: .cfi_offset lr, 16253; CHECK-P8-NEXT: .cfi_offset r29, -24254; CHECK-P8-NEXT: .cfi_offset r30, -16255; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill256; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill257; CHECK-P8-NEXT: stdu r1, -80(r1)258; CHECK-P8-NEXT: std r0, 96(r1)259; CHECK-P8-NEXT: mr r30, r6260; CHECK-P8-NEXT: mr r29, r5261; CHECK-P8-NEXT: lxvd2x vs0, 0, r3262; CHECK-P8-NEXT: xxswapd v2, vs0263; CHECK-P8-NEXT: lxvd2x vs0, 0, r4264; CHECK-P8-NEXT: xxswapd v3, vs0265; CHECK-P8-NEXT: bl __mulkf3266; CHECK-P8-NEXT: nop267; CHECK-P8-NEXT: lxvd2x vs0, 0, r29268; CHECK-P8-NEXT: xxswapd v3, vs0269; CHECK-P8-NEXT: bl __addkf3270; CHECK-P8-NEXT: nop271; CHECK-P8-NEXT: xxswapd vs0, v2272; CHECK-P8-NEXT: addi r3, r1, 32273; CHECK-P8-NEXT: stxvd2x vs0, 0, r3274; CHECK-P8-NEXT: lbz r4, 47(r1)275; CHECK-P8-NEXT: xori r4, r4, 128276; CHECK-P8-NEXT: stb r4, 47(r1)277; CHECK-P8-NEXT: lxvd2x vs0, 0, r3278; CHECK-P8-NEXT: stxvd2x vs0, 0, r30279; CHECK-P8-NEXT: addi r1, r1, 80280; CHECK-P8-NEXT: ld r0, 16(r1)281; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload282; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload283; CHECK-P8-NEXT: mtlr r0284; CHECK-P8-NEXT: blr285 ptr nocapture readonly %b,286 ptr nocapture readonly %c, ptr nocapture %res) {287entry:288 %0 = load fp128, ptr %a, align 16289 %1 = load fp128, ptr %b, align 16290 %mul = fmul contract fp128 %0, %1291 %2 = load fp128, ptr %c, align 16292 %add = fadd contract fp128 %mul, %2293 %sub = fsub fp128 0xL00000000000000008000000000000000, %add294 store fp128 %sub, ptr %res, align 16295 ret void296}297 298; Function Attrs: norecurse nounwind299define void @qpFmsub(ptr nocapture readonly %a,300; CHECK-LABEL: qpFmsub:301; CHECK: # %bb.0: # %entry302; CHECK-NEXT: lxv v2, 0(r3)303; CHECK-NEXT: lxv v3, 0(r4)304; CHECK-NEXT: lxv v4, 0(r5)305; CHECK-NEXT: xsnmsubqp v2, v3, v4306; CHECK-NEXT: stxv v2, 0(r6)307; CHECK-NEXT: blr308;309; CHECK-P8-LABEL: qpFmsub:310; CHECK-P8: # %bb.0: # %entry311; CHECK-P8-NEXT: mflr r0312; CHECK-P8-NEXT: stdu r1, -80(r1)313; CHECK-P8-NEXT: std r0, 96(r1)314; CHECK-P8-NEXT: .cfi_def_cfa_offset 80315; CHECK-P8-NEXT: .cfi_offset lr, 16316; CHECK-P8-NEXT: .cfi_offset r30, -16317; CHECK-P8-NEXT: .cfi_offset v31, -32318; CHECK-P8-NEXT: lxvd2x vs0, 0, r3319; CHECK-P8-NEXT: li r7, 48320; CHECK-P8-NEXT: std r30, 64(r1) # 8-byte Folded Spill321; CHECK-P8-NEXT: mr r30, r6322; CHECK-P8-NEXT: stvx v31, r1, r7 # 16-byte Folded Spill323; CHECK-P8-NEXT: xxswapd v31, vs0324; CHECK-P8-NEXT: lxvd2x vs0, 0, r4325; CHECK-P8-NEXT: xxswapd v2, vs0326; CHECK-P8-NEXT: lxvd2x vs0, 0, r5327; CHECK-P8-NEXT: xxswapd v3, vs0328; CHECK-P8-NEXT: bl __mulkf3329; CHECK-P8-NEXT: nop330; CHECK-P8-NEXT: vmr v3, v2331; CHECK-P8-NEXT: vmr v2, v31332; CHECK-P8-NEXT: bl __subkf3333; CHECK-P8-NEXT: nop334; CHECK-P8-NEXT: li r3, 48335; CHECK-P8-NEXT: xxswapd vs0, v2336; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload337; CHECK-P8-NEXT: stxvd2x vs0, 0, r30338; CHECK-P8-NEXT: ld r30, 64(r1) # 8-byte Folded Reload339; CHECK-P8-NEXT: addi r1, r1, 80340; CHECK-P8-NEXT: ld r0, 16(r1)341; CHECK-P8-NEXT: mtlr r0342; CHECK-P8-NEXT: blr343 ptr nocapture readonly %b,344 ptr nocapture readonly %c, ptr nocapture %res) {345entry:346 %0 = load fp128, ptr %a, align 16347 %1 = load fp128, ptr %b, align 16348 %2 = load fp128, ptr %c, align 16349 %mul = fmul contract fp128 %1, %2350 %sub = fsub contract nsz fp128 %0, %mul351 store fp128 %sub, ptr %res, align 16352 ret void353}354 355; Function Attrs: norecurse nounwind356define void @qpFmsub_02(ptr nocapture readonly %a,357; CHECK-LABEL: qpFmsub_02:358; CHECK: # %bb.0: # %entry359; CHECK-NEXT: lxv v2, 0(r3)360; CHECK-NEXT: lxv v3, 0(r4)361; CHECK-NEXT: lxv v4, 0(r5)362; CHECK-NEXT: xsmsubqp v4, v2, v3363; CHECK-NEXT: stxv v4, 0(r6)364; CHECK-NEXT: blr365;366; CHECK-P8-LABEL: qpFmsub_02:367; CHECK-P8: # %bb.0: # %entry368; CHECK-P8-NEXT: mflr r0369; CHECK-P8-NEXT: .cfi_def_cfa_offset 64370; CHECK-P8-NEXT: .cfi_offset lr, 16371; CHECK-P8-NEXT: .cfi_offset r29, -24372; CHECK-P8-NEXT: .cfi_offset r30, -16373; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill374; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill375; CHECK-P8-NEXT: stdu r1, -64(r1)376; CHECK-P8-NEXT: std r0, 80(r1)377; CHECK-P8-NEXT: mr r30, r6378; CHECK-P8-NEXT: mr r29, r5379; CHECK-P8-NEXT: lxvd2x vs0, 0, r3380; CHECK-P8-NEXT: xxswapd v2, vs0381; CHECK-P8-NEXT: lxvd2x vs0, 0, r4382; CHECK-P8-NEXT: xxswapd v3, vs0383; CHECK-P8-NEXT: bl __mulkf3384; CHECK-P8-NEXT: nop385; CHECK-P8-NEXT: lxvd2x vs0, 0, r29386; CHECK-P8-NEXT: xxswapd v3, vs0387; CHECK-P8-NEXT: bl __subkf3388; CHECK-P8-NEXT: nop389; CHECK-P8-NEXT: xxswapd vs0, v2390; CHECK-P8-NEXT: stxvd2x vs0, 0, r30391; CHECK-P8-NEXT: addi r1, r1, 64392; CHECK-P8-NEXT: ld r0, 16(r1)393; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload394; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload395; CHECK-P8-NEXT: mtlr r0396; CHECK-P8-NEXT: blr397 ptr nocapture readonly %b,398 ptr nocapture readonly %c, ptr nocapture %res) {399entry:400 %0 = load fp128, ptr %a, align 16401 %1 = load fp128, ptr %b, align 16402 %mul = fmul contract fp128 %0, %1403 %2 = load fp128, ptr %c, align 16404 %sub = fsub contract fp128 %mul, %2405 store fp128 %sub, ptr %res, align 16406 ret void407}408 409; Function Attrs: norecurse nounwind410define void @qpFnmsub(ptr nocapture readonly %a,411; CHECK-LABEL: qpFnmsub:412; CHECK: # %bb.0: # %entry413; CHECK-NEXT: lxv v3, 0(r4)414; CHECK-NEXT: lxv v2, 0(r3)415; CHECK-NEXT: lxv v4, 0(r5)416; CHECK-NEXT: xsnegqp v3, v3417; CHECK-NEXT: xsnmaddqp v2, v3, v4418; CHECK-NEXT: stxv v2, 0(r6)419; CHECK-NEXT: blr420;421; CHECK-P8-LABEL: qpFnmsub:422; CHECK-P8: # %bb.0: # %entry423; CHECK-P8-NEXT: mflr r0424; CHECK-P8-NEXT: stdu r1, -96(r1)425; CHECK-P8-NEXT: std r0, 112(r1)426; CHECK-P8-NEXT: .cfi_def_cfa_offset 96427; CHECK-P8-NEXT: .cfi_offset lr, 16428; CHECK-P8-NEXT: .cfi_offset r30, -16429; CHECK-P8-NEXT: .cfi_offset v31, -32430; CHECK-P8-NEXT: lxvd2x vs0, 0, r3431; CHECK-P8-NEXT: li r7, 64432; CHECK-P8-NEXT: std r30, 80(r1) # 8-byte Folded Spill433; CHECK-P8-NEXT: mr r30, r6434; CHECK-P8-NEXT: stvx v31, r1, r7 # 16-byte Folded Spill435; CHECK-P8-NEXT: xxswapd v31, vs0436; CHECK-P8-NEXT: lxvd2x vs0, 0, r4437; CHECK-P8-NEXT: xxswapd v2, vs0438; CHECK-P8-NEXT: lxvd2x vs0, 0, r5439; CHECK-P8-NEXT: xxswapd v3, vs0440; CHECK-P8-NEXT: bl __mulkf3441; CHECK-P8-NEXT: nop442; CHECK-P8-NEXT: vmr v3, v2443; CHECK-P8-NEXT: vmr v2, v31444; CHECK-P8-NEXT: bl __subkf3445; CHECK-P8-NEXT: nop446; CHECK-P8-NEXT: xxswapd vs0, v2447; CHECK-P8-NEXT: addi r3, r1, 48448; CHECK-P8-NEXT: stxvd2x vs0, 0, r3449; CHECK-P8-NEXT: lbz r4, 63(r1)450; CHECK-P8-NEXT: xori r4, r4, 128451; CHECK-P8-NEXT: stb r4, 63(r1)452; CHECK-P8-NEXT: lxvd2x vs0, 0, r3453; CHECK-P8-NEXT: li r3, 64454; CHECK-P8-NEXT: lvx v31, r1, r3 # 16-byte Folded Reload455; CHECK-P8-NEXT: stxvd2x vs0, 0, r30456; CHECK-P8-NEXT: ld r30, 80(r1) # 8-byte Folded Reload457; CHECK-P8-NEXT: addi r1, r1, 96458; CHECK-P8-NEXT: ld r0, 16(r1)459; CHECK-P8-NEXT: mtlr r0460; CHECK-P8-NEXT: blr461 ptr nocapture readonly %b,462 ptr nocapture readonly %c, ptr nocapture %res) {463entry:464 %0 = load fp128, ptr %a, align 16465 %1 = load fp128, ptr %b, align 16466 %2 = load fp128, ptr %c, align 16467 %mul = fmul contract fp128 %1, %2468 %sub = fsub contract fp128 %0, %mul469 %sub1 = fsub fp128 0xL00000000000000008000000000000000, %sub470 store fp128 %sub1, ptr %res, align 16471 ret void472}473 474; Function Attrs: norecurse nounwind475define void @qpFnmsub_02(ptr nocapture readonly %a,476; CHECK-LABEL: qpFnmsub_02:477; CHECK: # %bb.0: # %entry478; CHECK-NEXT: lxv v2, 0(r3)479; CHECK-NEXT: lxv v3, 0(r4)480; CHECK-NEXT: lxv v4, 0(r5)481; CHECK-NEXT: xsnmsubqp v4, v2, v3482; CHECK-NEXT: stxv v4, 0(r6)483; CHECK-NEXT: blr484;485; CHECK-P8-LABEL: qpFnmsub_02:486; CHECK-P8: # %bb.0: # %entry487; CHECK-P8-NEXT: mflr r0488; CHECK-P8-NEXT: .cfi_def_cfa_offset 80489; CHECK-P8-NEXT: .cfi_offset lr, 16490; CHECK-P8-NEXT: .cfi_offset r29, -24491; CHECK-P8-NEXT: .cfi_offset r30, -16492; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill493; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill494; CHECK-P8-NEXT: stdu r1, -80(r1)495; CHECK-P8-NEXT: std r0, 96(r1)496; CHECK-P8-NEXT: mr r30, r6497; CHECK-P8-NEXT: mr r29, r5498; CHECK-P8-NEXT: lxvd2x vs0, 0, r3499; CHECK-P8-NEXT: xxswapd v2, vs0500; CHECK-P8-NEXT: lxvd2x vs0, 0, r4501; CHECK-P8-NEXT: xxswapd v3, vs0502; CHECK-P8-NEXT: bl __mulkf3503; CHECK-P8-NEXT: nop504; CHECK-P8-NEXT: lxvd2x vs0, 0, r29505; CHECK-P8-NEXT: xxswapd v3, vs0506; CHECK-P8-NEXT: bl __subkf3507; CHECK-P8-NEXT: nop508; CHECK-P8-NEXT: xxswapd vs0, v2509; CHECK-P8-NEXT: addi r3, r1, 32510; CHECK-P8-NEXT: stxvd2x vs0, 0, r3511; CHECK-P8-NEXT: lbz r4, 47(r1)512; CHECK-P8-NEXT: xori r4, r4, 128513; CHECK-P8-NEXT: stb r4, 47(r1)514; CHECK-P8-NEXT: lxvd2x vs0, 0, r3515; CHECK-P8-NEXT: stxvd2x vs0, 0, r30516; CHECK-P8-NEXT: addi r1, r1, 80517; CHECK-P8-NEXT: ld r0, 16(r1)518; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload519; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload520; CHECK-P8-NEXT: mtlr r0521; CHECK-P8-NEXT: blr522 ptr nocapture readonly %b,523 ptr nocapture readonly %c, ptr nocapture %res) {524entry:525 %0 = load fp128, ptr %a, align 16526 %1 = load fp128, ptr %b, align 16527 %mul = fmul contract fp128 %0, %1528 %2 = load fp128, ptr %c, align 16529 %sub = fsub contract fp128 %mul, %2530 %sub1 = fsub fp128 0xL00000000000000008000000000000000, %sub531 store fp128 %sub1, ptr %res, align 16532 ret void533}534