1851 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \3; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs \5; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s \6; RUN: -check-prefix=CHECK-P87 8; Function Attrs: norecurse nounwind9define dso_local void @qpAdd(ptr nocapture readonly %a, ptr nocapture %res) {10; CHECK-LABEL: qpAdd:11; CHECK: # %bb.0: # %entry12; CHECK-NEXT: lxv v2, 0(r3)13; CHECK-NEXT: xsaddqp v2, v2, v214; CHECK-NEXT: stxv v2, 0(r4)15; CHECK-NEXT: blr16;17; CHECK-P8-LABEL: qpAdd:18; CHECK-P8: # %bb.0: # %entry19; CHECK-P8-NEXT: mflr r020; CHECK-P8-NEXT: .cfi_def_cfa_offset 4821; CHECK-P8-NEXT: .cfi_offset lr, 1622; CHECK-P8-NEXT: .cfi_offset r30, -1623; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill24; CHECK-P8-NEXT: stdu r1, -48(r1)25; CHECK-P8-NEXT: std r0, 64(r1)26; CHECK-P8-NEXT: mr r30, r427; CHECK-P8-NEXT: lxvd2x vs0, 0, r328; CHECK-P8-NEXT: xxswapd v2, vs029; CHECK-P8-NEXT: vmr v3, v230; CHECK-P8-NEXT: bl __addkf331; CHECK-P8-NEXT: nop32; CHECK-P8-NEXT: xxswapd vs0, v233; CHECK-P8-NEXT: stxvd2x vs0, 0, r3034; CHECK-P8-NEXT: addi r1, r1, 4835; CHECK-P8-NEXT: ld r0, 16(r1)36; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload37; CHECK-P8-NEXT: mtlr r038; CHECK-P8-NEXT: blr39entry:40 %0 = load fp128, ptr %a, align 1641 %add = fadd fp128 %0, %042 store fp128 %add, ptr %res, align 1643 ret void44}45 46; Function Attrs: norecurse nounwind47define dso_local void @qpSub(ptr nocapture readonly %a, ptr nocapture %res) {48; CHECK-LABEL: qpSub:49; CHECK: # %bb.0: # %entry50; CHECK-NEXT: lxv v2, 0(r3)51; CHECK-NEXT: xssubqp v2, v2, v252; CHECK-NEXT: stxv v2, 0(r4)53; CHECK-NEXT: blr54;55; CHECK-P8-LABEL: qpSub:56; CHECK-P8: # %bb.0: # %entry57; CHECK-P8-NEXT: mflr r058; CHECK-P8-NEXT: .cfi_def_cfa_offset 4859; CHECK-P8-NEXT: .cfi_offset lr, 1660; CHECK-P8-NEXT: .cfi_offset r30, -1661; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill62; CHECK-P8-NEXT: stdu r1, -48(r1)63; CHECK-P8-NEXT: std r0, 64(r1)64; CHECK-P8-NEXT: mr r30, r465; CHECK-P8-NEXT: lxvd2x vs0, 0, r366; CHECK-P8-NEXT: xxswapd v2, vs067; CHECK-P8-NEXT: vmr v3, v268; CHECK-P8-NEXT: bl __subkf369; CHECK-P8-NEXT: nop70; CHECK-P8-NEXT: xxswapd vs0, v271; CHECK-P8-NEXT: stxvd2x vs0, 0, r3072; CHECK-P8-NEXT: addi r1, r1, 4873; CHECK-P8-NEXT: ld r0, 16(r1)74; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload75; CHECK-P8-NEXT: mtlr r076; CHECK-P8-NEXT: blr77entry:78 %0 = load fp128, ptr %a, align 1679 %sub = fsub fp128 %0, %080 store fp128 %sub, ptr %res, align 1681 ret void82}83 84; Function Attrs: norecurse nounwind85define dso_local void @qpMul(ptr nocapture readonly %a, ptr nocapture %res) {86; CHECK-LABEL: qpMul:87; CHECK: # %bb.0: # %entry88; CHECK-NEXT: lxv v2, 0(r3)89; CHECK-NEXT: xsmulqp v2, v2, v290; CHECK-NEXT: stxv v2, 0(r4)91; CHECK-NEXT: blr92;93; CHECK-P8-LABEL: qpMul:94; CHECK-P8: # %bb.0: # %entry95; CHECK-P8-NEXT: mflr r096; CHECK-P8-NEXT: .cfi_def_cfa_offset 4897; CHECK-P8-NEXT: .cfi_offset lr, 1698; CHECK-P8-NEXT: .cfi_offset r30, -1699; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill100; CHECK-P8-NEXT: stdu r1, -48(r1)101; CHECK-P8-NEXT: std r0, 64(r1)102; CHECK-P8-NEXT: mr r30, r4103; CHECK-P8-NEXT: lxvd2x vs0, 0, r3104; CHECK-P8-NEXT: xxswapd v2, vs0105; CHECK-P8-NEXT: vmr v3, v2106; CHECK-P8-NEXT: bl __mulkf3107; CHECK-P8-NEXT: nop108; CHECK-P8-NEXT: xxswapd vs0, v2109; CHECK-P8-NEXT: stxvd2x vs0, 0, r30110; CHECK-P8-NEXT: addi r1, r1, 48111; CHECK-P8-NEXT: ld r0, 16(r1)112; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload113; CHECK-P8-NEXT: mtlr r0114; CHECK-P8-NEXT: blr115entry:116 %0 = load fp128, ptr %a, align 16117 %mul = fmul fp128 %0, %0118 store fp128 %mul, ptr %res, align 16119 ret void120}121 122; Function Attrs: norecurse nounwind123define dso_local void @qpDiv(ptr nocapture readonly %a, ptr nocapture %res) {124; CHECK-LABEL: qpDiv:125; CHECK: # %bb.0: # %entry126; CHECK-NEXT: lxv v2, 0(r3)127; CHECK-NEXT: xsdivqp v2, v2, v2128; CHECK-NEXT: stxv v2, 0(r4)129; CHECK-NEXT: blr130;131; CHECK-P8-LABEL: qpDiv:132; CHECK-P8: # %bb.0: # %entry133; CHECK-P8-NEXT: mflr r0134; CHECK-P8-NEXT: .cfi_def_cfa_offset 48135; CHECK-P8-NEXT: .cfi_offset lr, 16136; CHECK-P8-NEXT: .cfi_offset r30, -16137; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill138; CHECK-P8-NEXT: stdu r1, -48(r1)139; CHECK-P8-NEXT: std r0, 64(r1)140; CHECK-P8-NEXT: mr r30, r4141; CHECK-P8-NEXT: lxvd2x vs0, 0, r3142; CHECK-P8-NEXT: xxswapd v2, vs0143; CHECK-P8-NEXT: vmr v3, v2144; CHECK-P8-NEXT: bl __divkf3145; CHECK-P8-NEXT: nop146; CHECK-P8-NEXT: xxswapd vs0, v2147; CHECK-P8-NEXT: stxvd2x vs0, 0, r30148; CHECK-P8-NEXT: addi r1, r1, 48149; CHECK-P8-NEXT: ld r0, 16(r1)150; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload151; CHECK-P8-NEXT: mtlr r0152; CHECK-P8-NEXT: blr153entry:154 %0 = load fp128, ptr %a, align 16155 %div = fdiv fp128 %0, %0156 store fp128 %div, ptr %res, align 16157 ret void158}159 160define dso_local void @testLdNSt(ptr nocapture readonly %PtrC, ptr nocapture %PtrF) {161; CHECK-LABEL: testLdNSt:162; CHECK: # %bb.0: # %entry163; CHECK-NEXT: li r5, 4164; CHECK-NEXT: lxvx vs0, r3, r5165; CHECK-NEXT: li r3, 8166; CHECK-NEXT: stxvx vs0, r4, r3167; CHECK-NEXT: blr168;169; CHECK-P8-LABEL: testLdNSt:170; CHECK-P8: # %bb.0: # %entry171; CHECK-P8-NEXT: addi r3, r3, 4172; CHECK-P8-NEXT: lxvd2x vs0, 0, r3173; CHECK-P8-NEXT: addi r3, r4, 8174; CHECK-P8-NEXT: stxvd2x vs0, 0, r3175; CHECK-P8-NEXT: blr176entry:177 %add.ptr = getelementptr inbounds i8, ptr %PtrC, i64 4178 %0 = load fp128, ptr %add.ptr, align 16179 %add.ptr1 = getelementptr inbounds i8, ptr %PtrF, i64 8180 store fp128 %0, ptr %add.ptr1, align 16181 ret void182}183 184define dso_local void @qpSqrt(ptr nocapture readonly %a, ptr nocapture %res) {185; CHECK-LABEL: qpSqrt:186; CHECK: # %bb.0: # %entry187; CHECK-NEXT: lxv v2, 0(r3)188; CHECK-NEXT: xssqrtqp v2, v2189; CHECK-NEXT: stxv v2, 0(r4)190; CHECK-NEXT: blr191;192; CHECK-P8-LABEL: qpSqrt:193; CHECK-P8: # %bb.0: # %entry194; CHECK-P8-NEXT: mflr r0195; CHECK-P8-NEXT: .cfi_def_cfa_offset 48196; CHECK-P8-NEXT: .cfi_offset lr, 16197; CHECK-P8-NEXT: .cfi_offset r30, -16198; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill199; CHECK-P8-NEXT: stdu r1, -48(r1)200; CHECK-P8-NEXT: std r0, 64(r1)201; CHECK-P8-NEXT: mr r30, r4202; CHECK-P8-NEXT: lxvd2x vs0, 0, r3203; CHECK-P8-NEXT: xxswapd v2, vs0204; CHECK-P8-NEXT: bl sqrtf128205; CHECK-P8-NEXT: nop206; CHECK-P8-NEXT: xxswapd vs0, v2207; CHECK-P8-NEXT: stxvd2x vs0, 0, r30208; CHECK-P8-NEXT: addi r1, r1, 48209; CHECK-P8-NEXT: ld r0, 16(r1)210; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload211; CHECK-P8-NEXT: mtlr r0212; CHECK-P8-NEXT: blr213entry:214 %0 = load fp128, ptr %a, align 16215 %1 = tail call fp128 @llvm.sqrt.f128(fp128 %0)216 store fp128 %1, ptr %res, align 16217 ret void218 219}220declare fp128 @llvm.sqrt.f128(fp128 %Val)221 222define dso_local void @qpCpsgn(ptr nocapture readonly %a, ptr nocapture readonly %b,223; CHECK-LABEL: qpCpsgn:224; CHECK: # %bb.0: # %entry225; CHECK-NEXT: lxv v2, 0(r3)226; CHECK-NEXT: lxv v3, 0(r4)227; CHECK-NEXT: xscpsgnqp v2, v3, v2228; CHECK-NEXT: stxv v2, 0(r5)229; CHECK-NEXT: blr230;231; CHECK-P8-LABEL: qpCpsgn:232; CHECK-P8: # %bb.0: # %entry233; CHECK-P8-NEXT: lxvd2x vs0, 0, r4234; CHECK-P8-NEXT: addi r4, r1, -16235; CHECK-P8-NEXT: stxvd2x vs0, 0, r4236; CHECK-P8-NEXT: lxvd2x vs0, 0, r3237; CHECK-P8-NEXT: addi r3, r1, -32238; CHECK-P8-NEXT: stxvd2x vs0, 0, r3239; CHECK-P8-NEXT: lbz r4, -1(r1)240; CHECK-P8-NEXT: lbz r6, -17(r1)241; CHECK-P8-NEXT: rlwimi r6, r4, 0, 0, 24242; CHECK-P8-NEXT: stb r6, -17(r1)243; CHECK-P8-NEXT: lxvd2x vs0, 0, r3244; CHECK-P8-NEXT: stxvd2x vs0, 0, r5245; CHECK-P8-NEXT: blr246 ptr nocapture %res) {247entry:248 %0 = load fp128, ptr %a, align 16249 %1 = load fp128, ptr %b, align 16250 %2 = tail call fp128 @llvm.copysign.f128(fp128 %0, fp128 %1)251 store fp128 %2, ptr %res, align 16252 ret void253 254}255declare fp128 @llvm.copysign.f128(fp128 %Mag, fp128 %Sgn)256 257define dso_local void @qpAbs(ptr nocapture readonly %a, ptr nocapture %res) {258; CHECK-LABEL: qpAbs:259; CHECK: # %bb.0: # %entry260; CHECK-NEXT: lxv v2, 0(r3)261; CHECK-NEXT: xsabsqp v2, v2262; CHECK-NEXT: stxv v2, 0(r4)263; CHECK-NEXT: blr264;265; CHECK-P8-LABEL: qpAbs:266; CHECK-P8: # %bb.0: # %entry267; CHECK-P8-NEXT: lxvd2x vs0, 0, r3268; CHECK-P8-NEXT: addi r3, r1, -16269; CHECK-P8-NEXT: stxvd2x vs0, 0, r3270; CHECK-P8-NEXT: lbz r5, -1(r1)271; CHECK-P8-NEXT: clrlwi r5, r5, 25272; CHECK-P8-NEXT: stb r5, -1(r1)273; CHECK-P8-NEXT: lxvd2x vs0, 0, r3274; CHECK-P8-NEXT: stxvd2x vs0, 0, r4275; CHECK-P8-NEXT: blr276entry:277 %0 = load fp128, ptr %a, align 16278 %1 = tail call fp128 @llvm.fabs.f128(fp128 %0)279 store fp128 %1, ptr %res, align 16280 ret void281 282}283declare fp128 @llvm.fabs.f128(fp128 %Val)284 285define dso_local void @qpNAbs(ptr nocapture readonly %a, ptr nocapture %res) {286; CHECK-LABEL: qpNAbs:287; CHECK: # %bb.0: # %entry288; CHECK-NEXT: lxv v2, 0(r3)289; CHECK-NEXT: xsnabsqp v2, v2290; CHECK-NEXT: stxv v2, 0(r4)291; CHECK-NEXT: blr292;293; CHECK-P8-LABEL: qpNAbs:294; CHECK-P8: # %bb.0: # %entry295; CHECK-P8-NEXT: lxvd2x vs0, 0, r3296; CHECK-P8-NEXT: addi r3, r1, -32297; CHECK-P8-NEXT: stxvd2x vs0, 0, r3298; CHECK-P8-NEXT: lbz r5, -17(r1)299; CHECK-P8-NEXT: clrlwi r5, r5, 25300; CHECK-P8-NEXT: stb r5, -17(r1)301; CHECK-P8-NEXT: lxvd2x vs0, 0, r3302; CHECK-P8-NEXT: addi r3, r1, -16303; CHECK-P8-NEXT: stxvd2x vs0, 0, r3304; CHECK-P8-NEXT: lbz r5, -1(r1)305; CHECK-P8-NEXT: xori r5, r5, 128306; CHECK-P8-NEXT: stb r5, -1(r1)307; CHECK-P8-NEXT: lxvd2x vs0, 0, r3308; CHECK-P8-NEXT: stxvd2x vs0, 0, r4309; CHECK-P8-NEXT: blr310entry:311 %0 = load fp128, ptr %a, align 16312 %1 = tail call fp128 @llvm.fabs.f128(fp128 %0)313 %neg = fsub fp128 0xL00000000000000008000000000000000, %1314 store fp128 %neg, ptr %res, align 16315 ret void316 317}318 319define dso_local void @qpNeg(ptr nocapture readonly %a, ptr nocapture %res) {320; CHECK-LABEL: qpNeg:321; CHECK: # %bb.0: # %entry322; CHECK-NEXT: lxv v2, 0(r3)323; CHECK-NEXT: xsnegqp v2, v2324; CHECK-NEXT: stxv v2, 0(r4)325; CHECK-NEXT: blr326;327; CHECK-P8-LABEL: qpNeg:328; CHECK-P8: # %bb.0: # %entry329; CHECK-P8-NEXT: lxvd2x vs0, 0, r3330; CHECK-P8-NEXT: addi r3, r1, -16331; CHECK-P8-NEXT: stxvd2x vs0, 0, r3332; CHECK-P8-NEXT: lbz r5, -1(r1)333; CHECK-P8-NEXT: xori r5, r5, 128334; CHECK-P8-NEXT: stb r5, -1(r1)335; CHECK-P8-NEXT: lxvd2x vs0, 0, r3336; CHECK-P8-NEXT: stxvd2x vs0, 0, r4337; CHECK-P8-NEXT: blr338entry:339 %0 = load fp128, ptr %a, align 16340 %sub = fsub fp128 0xL00000000000000008000000000000000, %0341 store fp128 %sub, ptr %res, align 16342 ret void343 344}345 346define fp128 @qp_sin(ptr nocapture readonly %a) {347; CHECK-LABEL: qp_sin:348; CHECK: # %bb.0: # %entry349; CHECK-NEXT: mflr r0350; CHECK-NEXT: stdu r1, -32(r1)351; CHECK-NEXT: std r0, 48(r1)352; CHECK-NEXT: .cfi_def_cfa_offset 32353; CHECK-NEXT: .cfi_offset lr, 16354; CHECK-NEXT: lxv v2, 0(r3)355; CHECK-NEXT: bl sinf128356; CHECK-NEXT: nop357; CHECK-NEXT: addi r1, r1, 32358; CHECK-NEXT: ld r0, 16(r1)359; CHECK-NEXT: mtlr r0360; CHECK-NEXT: blr361;362; CHECK-P8-LABEL: qp_sin:363; CHECK-P8: # %bb.0: # %entry364; CHECK-P8-NEXT: mflr r0365; CHECK-P8-NEXT: stdu r1, -32(r1)366; CHECK-P8-NEXT: std r0, 48(r1)367; CHECK-P8-NEXT: .cfi_def_cfa_offset 32368; CHECK-P8-NEXT: .cfi_offset lr, 16369; CHECK-P8-NEXT: lxvd2x vs0, 0, r3370; CHECK-P8-NEXT: xxswapd v2, vs0371; CHECK-P8-NEXT: bl sinf128372; CHECK-P8-NEXT: nop373; CHECK-P8-NEXT: addi r1, r1, 32374; CHECK-P8-NEXT: ld r0, 16(r1)375; CHECK-P8-NEXT: mtlr r0376; CHECK-P8-NEXT: blr377entry:378 %0 = load fp128, ptr %a, align 16379 %1 = tail call fp128 @llvm.sin.f128(fp128 %0)380 ret fp128 %1381}382declare fp128 @llvm.sin.f128(fp128 %Val)383 384define fp128 @qp_cos(ptr nocapture readonly %a) {385; CHECK-LABEL: qp_cos:386; CHECK: # %bb.0: # %entry387; CHECK-NEXT: mflr r0388; CHECK-NEXT: stdu r1, -32(r1)389; CHECK-NEXT: std r0, 48(r1)390; CHECK-NEXT: .cfi_def_cfa_offset 32391; CHECK-NEXT: .cfi_offset lr, 16392; CHECK-NEXT: lxv v2, 0(r3)393; CHECK-NEXT: bl cosf128394; CHECK-NEXT: nop395; CHECK-NEXT: addi r1, r1, 32396; CHECK-NEXT: ld r0, 16(r1)397; CHECK-NEXT: mtlr r0398; CHECK-NEXT: blr399;400; CHECK-P8-LABEL: qp_cos:401; CHECK-P8: # %bb.0: # %entry402; CHECK-P8-NEXT: mflr r0403; CHECK-P8-NEXT: stdu r1, -32(r1)404; CHECK-P8-NEXT: std r0, 48(r1)405; CHECK-P8-NEXT: .cfi_def_cfa_offset 32406; CHECK-P8-NEXT: .cfi_offset lr, 16407; CHECK-P8-NEXT: lxvd2x vs0, 0, r3408; CHECK-P8-NEXT: xxswapd v2, vs0409; CHECK-P8-NEXT: bl cosf128410; CHECK-P8-NEXT: nop411; CHECK-P8-NEXT: addi r1, r1, 32412; CHECK-P8-NEXT: ld r0, 16(r1)413; CHECK-P8-NEXT: mtlr r0414; CHECK-P8-NEXT: blr415entry:416 %0 = load fp128, ptr %a, align 16417 %1 = tail call fp128 @llvm.cos.f128(fp128 %0)418 ret fp128 %1419}420declare fp128 @llvm.cos.f128(fp128 %Val)421 422define fp128 @qp_sincos(ptr nocapture readonly %a) nounwind {423; CHECK-LABEL: qp_sincos:424; CHECK: # %bb.0: # %entry425; CHECK-NEXT: mflr r0426; CHECK-NEXT: stdu r1, -64(r1)427; CHECK-NEXT: std r0, 80(r1)428; CHECK-NEXT: addi r5, r1, 48429; CHECK-NEXT: addi r6, r1, 32430; CHECK-NEXT: lxv v2, 0(r3)431; CHECK-NEXT: bl sincosf128432; CHECK-NEXT: nop433; CHECK-NEXT: lxv v2, 48(r1)434; CHECK-NEXT: lxv v3, 32(r1)435; CHECK-NEXT: xsmulqp v2, v3, v2436; CHECK-NEXT: addi r1, r1, 64437; CHECK-NEXT: ld r0, 16(r1)438; CHECK-NEXT: mtlr r0439; CHECK-NEXT: blr440;441; CHECK-P8-LABEL: qp_sincos:442; CHECK-P8: # %bb.0: # %entry443; CHECK-P8-NEXT: mflr r0444; CHECK-P8-NEXT: std r29, -24(r1) # 8-byte Folded Spill445; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill446; CHECK-P8-NEXT: stdu r1, -96(r1)447; CHECK-P8-NEXT: std r0, 112(r1)448; CHECK-P8-NEXT: addi r30, r1, 48449; CHECK-P8-NEXT: addi r29, r1, 32450; CHECK-P8-NEXT: lxvd2x vs0, 0, r3451; CHECK-P8-NEXT: mr r5, r30452; CHECK-P8-NEXT: mr r6, r29453; CHECK-P8-NEXT: xxswapd v2, vs0454; CHECK-P8-NEXT: bl sincosf128455; CHECK-P8-NEXT: nop456; CHECK-P8-NEXT: lxvd2x vs0, 0, r29457; CHECK-P8-NEXT: xxswapd v2, vs0458; CHECK-P8-NEXT: lxvd2x vs0, 0, r30459; CHECK-P8-NEXT: xxswapd v3, vs0460; CHECK-P8-NEXT: bl __mulkf3461; CHECK-P8-NEXT: nop462; CHECK-P8-NEXT: addi r1, r1, 96463; CHECK-P8-NEXT: ld r0, 16(r1)464; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload465; CHECK-P8-NEXT: ld r29, -24(r1) # 8-byte Folded Reload466; CHECK-P8-NEXT: mtlr r0467; CHECK-P8-NEXT: blr468entry:469 %0 = load fp128, ptr %a, align 16470 %1 = tail call fp128 @llvm.cos.f128(fp128 %0)471 %2 = tail call fp128 @llvm.sin.f128(fp128 %0)472 %3 = fmul fp128 %1, %2473 ret fp128 %3474}475 476define fp128 @qp_log(ptr nocapture readonly %a) {477; CHECK-LABEL: qp_log:478; CHECK: # %bb.0: # %entry479; CHECK-NEXT: mflr r0480; CHECK-NEXT: stdu r1, -32(r1)481; CHECK-NEXT: std r0, 48(r1)482; CHECK-NEXT: .cfi_def_cfa_offset 32483; CHECK-NEXT: .cfi_offset lr, 16484; CHECK-NEXT: lxv v2, 0(r3)485; CHECK-NEXT: bl logf128486; CHECK-NEXT: nop487; CHECK-NEXT: addi r1, r1, 32488; CHECK-NEXT: ld r0, 16(r1)489; CHECK-NEXT: mtlr r0490; CHECK-NEXT: blr491;492; CHECK-P8-LABEL: qp_log:493; CHECK-P8: # %bb.0: # %entry494; CHECK-P8-NEXT: mflr r0495; CHECK-P8-NEXT: stdu r1, -32(r1)496; CHECK-P8-NEXT: std r0, 48(r1)497; CHECK-P8-NEXT: .cfi_def_cfa_offset 32498; CHECK-P8-NEXT: .cfi_offset lr, 16499; CHECK-P8-NEXT: lxvd2x vs0, 0, r3500; CHECK-P8-NEXT: xxswapd v2, vs0501; CHECK-P8-NEXT: bl logf128502; CHECK-P8-NEXT: nop503; CHECK-P8-NEXT: addi r1, r1, 32504; CHECK-P8-NEXT: ld r0, 16(r1)505; CHECK-P8-NEXT: mtlr r0506; CHECK-P8-NEXT: blr507entry:508 %0 = load fp128, ptr %a, align 16509 %1 = tail call fp128 @llvm.log.f128(fp128 %0)510 ret fp128 %1511}512declare fp128 @llvm.log.f128(fp128 %Val)513 514define fp128 @qp_log10(ptr nocapture readonly %a) {515; CHECK-LABEL: qp_log10:516; CHECK: # %bb.0: # %entry517; CHECK-NEXT: mflr r0518; CHECK-NEXT: stdu r1, -32(r1)519; CHECK-NEXT: std r0, 48(r1)520; CHECK-NEXT: .cfi_def_cfa_offset 32521; CHECK-NEXT: .cfi_offset lr, 16522; CHECK-NEXT: lxv v2, 0(r3)523; CHECK-NEXT: bl log10f128524; CHECK-NEXT: nop525; CHECK-NEXT: addi r1, r1, 32526; CHECK-NEXT: ld r0, 16(r1)527; CHECK-NEXT: mtlr r0528; CHECK-NEXT: blr529;530; CHECK-P8-LABEL: qp_log10:531; CHECK-P8: # %bb.0: # %entry532; CHECK-P8-NEXT: mflr r0533; CHECK-P8-NEXT: stdu r1, -32(r1)534; CHECK-P8-NEXT: std r0, 48(r1)535; CHECK-P8-NEXT: .cfi_def_cfa_offset 32536; CHECK-P8-NEXT: .cfi_offset lr, 16537; CHECK-P8-NEXT: lxvd2x vs0, 0, r3538; CHECK-P8-NEXT: xxswapd v2, vs0539; CHECK-P8-NEXT: bl log10f128540; CHECK-P8-NEXT: nop541; CHECK-P8-NEXT: addi r1, r1, 32542; CHECK-P8-NEXT: ld r0, 16(r1)543; CHECK-P8-NEXT: mtlr r0544; CHECK-P8-NEXT: blr545entry:546 %0 = load fp128, ptr %a, align 16547 %1 = tail call fp128 @llvm.log10.f128(fp128 %0)548 ret fp128 %1549}550declare fp128 @llvm.log10.f128(fp128 %Val)551 552define fp128 @qp_log2(ptr nocapture readonly %a) {553; CHECK-LABEL: qp_log2:554; CHECK: # %bb.0: # %entry555; CHECK-NEXT: mflr r0556; CHECK-NEXT: stdu r1, -32(r1)557; CHECK-NEXT: std r0, 48(r1)558; CHECK-NEXT: .cfi_def_cfa_offset 32559; CHECK-NEXT: .cfi_offset lr, 16560; CHECK-NEXT: lxv v2, 0(r3)561; CHECK-NEXT: bl log2f128562; CHECK-NEXT: nop563; CHECK-NEXT: addi r1, r1, 32564; CHECK-NEXT: ld r0, 16(r1)565; CHECK-NEXT: mtlr r0566; CHECK-NEXT: blr567;568; CHECK-P8-LABEL: qp_log2:569; CHECK-P8: # %bb.0: # %entry570; CHECK-P8-NEXT: mflr r0571; CHECK-P8-NEXT: stdu r1, -32(r1)572; CHECK-P8-NEXT: std r0, 48(r1)573; CHECK-P8-NEXT: .cfi_def_cfa_offset 32574; CHECK-P8-NEXT: .cfi_offset lr, 16575; CHECK-P8-NEXT: lxvd2x vs0, 0, r3576; CHECK-P8-NEXT: xxswapd v2, vs0577; CHECK-P8-NEXT: bl log2f128578; CHECK-P8-NEXT: nop579; CHECK-P8-NEXT: addi r1, r1, 32580; CHECK-P8-NEXT: ld r0, 16(r1)581; CHECK-P8-NEXT: mtlr r0582; CHECK-P8-NEXT: blr583entry:584 %0 = load fp128, ptr %a, align 16585 %1 = tail call fp128 @llvm.log2.f128(fp128 %0)586 ret fp128 %1587}588declare fp128 @llvm.log2.f128(fp128 %Val)589 590define fp128 @qp_minnum(ptr nocapture readonly %a,591; CHECK-LABEL: qp_minnum:592; CHECK: # %bb.0: # %entry593; CHECK-NEXT: mflr r0594; CHECK-NEXT: stdu r1, -32(r1)595; CHECK-NEXT: std r0, 48(r1)596; CHECK-NEXT: .cfi_def_cfa_offset 32597; CHECK-NEXT: .cfi_offset lr, 16598; CHECK-NEXT: lxv v2, 0(r3)599; CHECK-NEXT: lxv v3, 0(r4)600; CHECK-NEXT: bl fminf128601; CHECK-NEXT: nop602; CHECK-NEXT: addi r1, r1, 32603; CHECK-NEXT: ld r0, 16(r1)604; CHECK-NEXT: mtlr r0605; CHECK-NEXT: blr606;607; CHECK-P8-LABEL: qp_minnum:608; CHECK-P8: # %bb.0: # %entry609; CHECK-P8-NEXT: mflr r0610; CHECK-P8-NEXT: stdu r1, -32(r1)611; CHECK-P8-NEXT: std r0, 48(r1)612; CHECK-P8-NEXT: .cfi_def_cfa_offset 32613; CHECK-P8-NEXT: .cfi_offset lr, 16614; CHECK-P8-NEXT: lxvd2x vs0, 0, r3615; CHECK-P8-NEXT: xxswapd v2, vs0616; CHECK-P8-NEXT: lxvd2x vs0, 0, r4617; CHECK-P8-NEXT: xxswapd v3, vs0618; CHECK-P8-NEXT: bl fminf128619; CHECK-P8-NEXT: nop620; CHECK-P8-NEXT: addi r1, r1, 32621; CHECK-P8-NEXT: ld r0, 16(r1)622; CHECK-P8-NEXT: mtlr r0623; CHECK-P8-NEXT: blr624 ptr nocapture readonly %b) {625entry:626 %0 = load fp128, ptr %a, align 16627 %1 = load fp128, ptr %b, align 16628 %2 = tail call fp128 @llvm.minnum.f128(fp128 %0, fp128 %1)629 ret fp128 %2630}631declare fp128 @llvm.minnum.f128(fp128 %Val0, fp128 %Val1)632 633define fp128 @qp_maxnum(ptr nocapture readonly %a,634; CHECK-LABEL: qp_maxnum:635; CHECK: # %bb.0: # %entry636; CHECK-NEXT: mflr r0637; CHECK-NEXT: stdu r1, -32(r1)638; CHECK-NEXT: std r0, 48(r1)639; CHECK-NEXT: .cfi_def_cfa_offset 32640; CHECK-NEXT: .cfi_offset lr, 16641; CHECK-NEXT: lxv v2, 0(r3)642; CHECK-NEXT: lxv v3, 0(r4)643; CHECK-NEXT: bl fmaxf128644; CHECK-NEXT: nop645; CHECK-NEXT: addi r1, r1, 32646; CHECK-NEXT: ld r0, 16(r1)647; CHECK-NEXT: mtlr r0648; CHECK-NEXT: blr649;650; CHECK-P8-LABEL: qp_maxnum:651; CHECK-P8: # %bb.0: # %entry652; CHECK-P8-NEXT: mflr r0653; CHECK-P8-NEXT: stdu r1, -32(r1)654; CHECK-P8-NEXT: std r0, 48(r1)655; CHECK-P8-NEXT: .cfi_def_cfa_offset 32656; CHECK-P8-NEXT: .cfi_offset lr, 16657; CHECK-P8-NEXT: lxvd2x vs0, 0, r3658; CHECK-P8-NEXT: xxswapd v2, vs0659; CHECK-P8-NEXT: lxvd2x vs0, 0, r4660; CHECK-P8-NEXT: xxswapd v3, vs0661; CHECK-P8-NEXT: bl fmaxf128662; CHECK-P8-NEXT: nop663; CHECK-P8-NEXT: addi r1, r1, 32664; CHECK-P8-NEXT: ld r0, 16(r1)665; CHECK-P8-NEXT: mtlr r0666; CHECK-P8-NEXT: blr667 ptr nocapture readonly %b) {668entry:669 %0 = load fp128, ptr %a, align 16670 %1 = load fp128, ptr %b, align 16671 %2 = tail call fp128 @llvm.maxnum.f128(fp128 %0, fp128 %1)672 ret fp128 %2673}674declare fp128 @llvm.maxnum.f128(fp128 %Val0, fp128 %Val1)675 676define fp128 @qp_pow(ptr nocapture readonly %a,677; CHECK-LABEL: qp_pow:678; CHECK: # %bb.0: # %entry679; CHECK-NEXT: mflr r0680; CHECK-NEXT: stdu r1, -32(r1)681; CHECK-NEXT: std r0, 48(r1)682; CHECK-NEXT: .cfi_def_cfa_offset 32683; CHECK-NEXT: .cfi_offset lr, 16684; CHECK-NEXT: lxv v2, 0(r3)685; CHECK-NEXT: lxv v3, 0(r4)686; CHECK-NEXT: bl powf128687; CHECK-NEXT: nop688; CHECK-NEXT: addi r1, r1, 32689; CHECK-NEXT: ld r0, 16(r1)690; CHECK-NEXT: mtlr r0691; CHECK-NEXT: blr692;693; CHECK-P8-LABEL: qp_pow:694; CHECK-P8: # %bb.0: # %entry695; CHECK-P8-NEXT: mflr r0696; CHECK-P8-NEXT: stdu r1, -32(r1)697; CHECK-P8-NEXT: std r0, 48(r1)698; CHECK-P8-NEXT: .cfi_def_cfa_offset 32699; CHECK-P8-NEXT: .cfi_offset lr, 16700; CHECK-P8-NEXT: lxvd2x vs0, 0, r3701; CHECK-P8-NEXT: xxswapd v2, vs0702; CHECK-P8-NEXT: lxvd2x vs0, 0, r4703; CHECK-P8-NEXT: xxswapd v3, vs0704; CHECK-P8-NEXT: bl powf128705; CHECK-P8-NEXT: nop706; CHECK-P8-NEXT: addi r1, r1, 32707; CHECK-P8-NEXT: ld r0, 16(r1)708; CHECK-P8-NEXT: mtlr r0709; CHECK-P8-NEXT: blr710 ptr nocapture readonly %b) {711entry:712 %0 = load fp128, ptr %a, align 16713 %1 = load fp128, ptr %b, align 16714 %2 = tail call fp128 @llvm.pow.f128(fp128 %0, fp128 %1)715 ret fp128 %2716}717declare fp128 @llvm.pow.f128(fp128 %Val, fp128 %Power)718 719define fp128 @qp_exp(ptr nocapture readonly %a) {720; CHECK-LABEL: qp_exp:721; CHECK: # %bb.0: # %entry722; CHECK-NEXT: mflr r0723; CHECK-NEXT: stdu r1, -32(r1)724; CHECK-NEXT: std r0, 48(r1)725; CHECK-NEXT: .cfi_def_cfa_offset 32726; CHECK-NEXT: .cfi_offset lr, 16727; CHECK-NEXT: lxv v2, 0(r3)728; CHECK-NEXT: bl expf128729; CHECK-NEXT: nop730; CHECK-NEXT: addi r1, r1, 32731; CHECK-NEXT: ld r0, 16(r1)732; CHECK-NEXT: mtlr r0733; CHECK-NEXT: blr734;735; CHECK-P8-LABEL: qp_exp:736; CHECK-P8: # %bb.0: # %entry737; CHECK-P8-NEXT: mflr r0738; CHECK-P8-NEXT: stdu r1, -32(r1)739; CHECK-P8-NEXT: std r0, 48(r1)740; CHECK-P8-NEXT: .cfi_def_cfa_offset 32741; CHECK-P8-NEXT: .cfi_offset lr, 16742; CHECK-P8-NEXT: lxvd2x vs0, 0, r3743; CHECK-P8-NEXT: xxswapd v2, vs0744; CHECK-P8-NEXT: bl expf128745; CHECK-P8-NEXT: nop746; CHECK-P8-NEXT: addi r1, r1, 32747; CHECK-P8-NEXT: ld r0, 16(r1)748; CHECK-P8-NEXT: mtlr r0749; CHECK-P8-NEXT: blr750entry:751 %0 = load fp128, ptr %a, align 16752 %1 = tail call fp128 @llvm.exp.f128(fp128 %0)753 ret fp128 %1754}755declare fp128 @llvm.exp.f128(fp128 %Val)756 757define fp128 @qp_exp2(ptr nocapture readonly %a) {758; CHECK-LABEL: qp_exp2:759; CHECK: # %bb.0: # %entry760; CHECK-NEXT: mflr r0761; CHECK-NEXT: stdu r1, -32(r1)762; CHECK-NEXT: std r0, 48(r1)763; CHECK-NEXT: .cfi_def_cfa_offset 32764; CHECK-NEXT: .cfi_offset lr, 16765; CHECK-NEXT: lxv v2, 0(r3)766; CHECK-NEXT: bl exp2f128767; CHECK-NEXT: nop768; CHECK-NEXT: addi r1, r1, 32769; CHECK-NEXT: ld r0, 16(r1)770; CHECK-NEXT: mtlr r0771; CHECK-NEXT: blr772;773; CHECK-P8-LABEL: qp_exp2:774; CHECK-P8: # %bb.0: # %entry775; CHECK-P8-NEXT: mflr r0776; CHECK-P8-NEXT: stdu r1, -32(r1)777; CHECK-P8-NEXT: std r0, 48(r1)778; CHECK-P8-NEXT: .cfi_def_cfa_offset 32779; CHECK-P8-NEXT: .cfi_offset lr, 16780; CHECK-P8-NEXT: lxvd2x vs0, 0, r3781; CHECK-P8-NEXT: xxswapd v2, vs0782; CHECK-P8-NEXT: bl exp2f128783; CHECK-P8-NEXT: nop784; CHECK-P8-NEXT: addi r1, r1, 32785; CHECK-P8-NEXT: ld r0, 16(r1)786; CHECK-P8-NEXT: mtlr r0787; CHECK-P8-NEXT: blr788entry:789 %0 = load fp128, ptr %a, align 16790 %1 = tail call fp128 @llvm.exp2.f128(fp128 %0)791 ret fp128 %1792}793declare fp128 @llvm.exp2.f128(fp128 %Val)794 795define dso_local void @qp_powi(ptr nocapture readonly %a, ptr nocapture readonly %b,796; CHECK-LABEL: qp_powi:797; CHECK: # %bb.0: # %entry798; CHECK-NEXT: mflr r0799; CHECK-NEXT: .cfi_def_cfa_offset 48800; CHECK-NEXT: .cfi_offset lr, 16801; CHECK-NEXT: .cfi_offset r30, -16802; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill803; CHECK-NEXT: stdu r1, -48(r1)804; CHECK-NEXT: std r0, 64(r1)805; CHECK-NEXT: mr r30, r5806; CHECK-NEXT: lxv v2, 0(r3)807; CHECK-NEXT: lwz r5, 0(r4)808; CHECK-NEXT: bl __powikf2809; CHECK-NEXT: nop810; CHECK-NEXT: stxv v2, 0(r30)811; CHECK-NEXT: addi r1, r1, 48812; CHECK-NEXT: ld r0, 16(r1)813; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload814; CHECK-NEXT: mtlr r0815; CHECK-NEXT: blr816;817; CHECK-P8-LABEL: qp_powi:818; CHECK-P8: # %bb.0: # %entry819; CHECK-P8-NEXT: mflr r0820; CHECK-P8-NEXT: .cfi_def_cfa_offset 48821; CHECK-P8-NEXT: .cfi_offset lr, 16822; CHECK-P8-NEXT: .cfi_offset r30, -16823; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill824; CHECK-P8-NEXT: stdu r1, -48(r1)825; CHECK-P8-NEXT: std r0, 64(r1)826; CHECK-P8-NEXT: mr r30, r5827; CHECK-P8-NEXT: lxvd2x vs0, 0, r3828; CHECK-P8-NEXT: lwz r5, 0(r4)829; CHECK-P8-NEXT: xxswapd v2, vs0830; CHECK-P8-NEXT: bl __powikf2831; CHECK-P8-NEXT: nop832; CHECK-P8-NEXT: xxswapd vs0, v2833; CHECK-P8-NEXT: stxvd2x vs0, 0, r30834; CHECK-P8-NEXT: addi r1, r1, 48835; CHECK-P8-NEXT: ld r0, 16(r1)836; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload837; CHECK-P8-NEXT: mtlr r0838; CHECK-P8-NEXT: blr839 ptr nocapture %res) {840entry:841 %0 = load fp128, ptr %a, align 16842 %1 = load i32, ptr %b, align 8843 %2 = tail call fp128 @llvm.powi.f128.i32(fp128 %0, i32 %1)844 store fp128 %2, ptr %res, align 16845 ret void846}847declare fp128 @llvm.powi.f128.i32(fp128 %Val, i32 %power)848 849@a = common dso_local global fp128 0xL00000000000000000000000000000000, align 16850@b = common dso_local global fp128 0xL00000000000000000000000000000000, align 16851 852define fp128 @qp_frem() #0 {853; CHECK-LABEL: qp_frem:854; CHECK: # %bb.0: # %entry855; CHECK-NEXT: mflr r0856; CHECK-NEXT: stdu r1, -32(r1)857; CHECK-NEXT: std r0, 48(r1)858; CHECK-NEXT: .cfi_def_cfa_offset 32859; CHECK-NEXT: .cfi_offset lr, 16860; CHECK-NEXT: addis r3, r2, a@toc@ha861; CHECK-NEXT: addi r3, r3, a@toc@l862; CHECK-NEXT: lxv v2, 0(r3)863; CHECK-NEXT: addis r3, r2, b@toc@ha864; CHECK-NEXT: addi r3, r3, b@toc@l865; CHECK-NEXT: lxv v3, 0(r3)866; CHECK-NEXT: bl fmodf128867; CHECK-NEXT: nop868; CHECK-NEXT: addi r1, r1, 32869; CHECK-NEXT: ld r0, 16(r1)870; CHECK-NEXT: mtlr r0871; CHECK-NEXT: blr872;873; CHECK-P8-LABEL: qp_frem:874; CHECK-P8: # %bb.0: # %entry875; CHECK-P8-NEXT: mflr r0876; CHECK-P8-NEXT: stdu r1, -32(r1)877; CHECK-P8-NEXT: std r0, 48(r1)878; CHECK-P8-NEXT: .cfi_def_cfa_offset 32879; CHECK-P8-NEXT: .cfi_offset lr, 16880; CHECK-P8-NEXT: addis r3, r2, a@toc@ha881; CHECK-P8-NEXT: addi r3, r3, a@toc@l882; CHECK-P8-NEXT: lxvd2x vs0, 0, r3883; CHECK-P8-NEXT: addis r3, r2, b@toc@ha884; CHECK-P8-NEXT: addi r3, r3, b@toc@l885; CHECK-P8-NEXT: xxswapd v2, vs0886; CHECK-P8-NEXT: lxvd2x vs0, 0, r3887; CHECK-P8-NEXT: xxswapd v3, vs0888; CHECK-P8-NEXT: bl fmodf128889; CHECK-P8-NEXT: nop890; CHECK-P8-NEXT: addi r1, r1, 32891; CHECK-P8-NEXT: ld r0, 16(r1)892; CHECK-P8-NEXT: mtlr r0893; CHECK-P8-NEXT: blr894entry:895 %0 = load fp128, ptr @a, align 16896 %1 = load fp128, ptr @b, align 16897 %rem = frem fp128 %0, %1898 ret fp128 %rem899}900 901define dso_local void @qpCeil(ptr nocapture readonly %a, ptr nocapture %res) {902; CHECK-LABEL: qpCeil:903; CHECK: # %bb.0: # %entry904; CHECK-NEXT: lxv v2, 0(r3)905; CHECK-NEXT: xsrqpi 1, v2, v2, 2906; CHECK-NEXT: stxv v2, 0(r4)907; CHECK-NEXT: blr908;909; CHECK-P8-LABEL: qpCeil:910; CHECK-P8: # %bb.0: # %entry911; CHECK-P8-NEXT: mflr r0912; CHECK-P8-NEXT: .cfi_def_cfa_offset 48913; CHECK-P8-NEXT: .cfi_offset lr, 16914; CHECK-P8-NEXT: .cfi_offset r30, -16915; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill916; CHECK-P8-NEXT: stdu r1, -48(r1)917; CHECK-P8-NEXT: std r0, 64(r1)918; CHECK-P8-NEXT: mr r30, r4919; CHECK-P8-NEXT: lxvd2x vs0, 0, r3920; CHECK-P8-NEXT: xxswapd v2, vs0921; CHECK-P8-NEXT: bl ceilf128922; CHECK-P8-NEXT: nop923; CHECK-P8-NEXT: xxswapd vs0, v2924; CHECK-P8-NEXT: stxvd2x vs0, 0, r30925; CHECK-P8-NEXT: addi r1, r1, 48926; CHECK-P8-NEXT: ld r0, 16(r1)927; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload928; CHECK-P8-NEXT: mtlr r0929; CHECK-P8-NEXT: blr930entry:931 %0 = load fp128, ptr %a, align 16932 %1 = tail call fp128 @llvm.ceil.f128(fp128 %0)933 store fp128 %1, ptr %res, align 16934 ret void935}936declare fp128 @llvm.ceil.f128(fp128 %Val)937 938define dso_local void @qpFloor(ptr nocapture readonly %a, ptr nocapture %res) {939; CHECK-LABEL: qpFloor:940; CHECK: # %bb.0: # %entry941; CHECK-NEXT: lxv v2, 0(r3)942; CHECK-NEXT: xsrqpi 1, v2, v2, 3943; CHECK-NEXT: stxv v2, 0(r4)944; CHECK-NEXT: blr945;946; CHECK-P8-LABEL: qpFloor:947; CHECK-P8: # %bb.0: # %entry948; CHECK-P8-NEXT: mflr r0949; CHECK-P8-NEXT: .cfi_def_cfa_offset 48950; CHECK-P8-NEXT: .cfi_offset lr, 16951; CHECK-P8-NEXT: .cfi_offset r30, -16952; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill953; CHECK-P8-NEXT: stdu r1, -48(r1)954; CHECK-P8-NEXT: std r0, 64(r1)955; CHECK-P8-NEXT: mr r30, r4956; CHECK-P8-NEXT: lxvd2x vs0, 0, r3957; CHECK-P8-NEXT: xxswapd v2, vs0958; CHECK-P8-NEXT: bl floorf128959; CHECK-P8-NEXT: nop960; CHECK-P8-NEXT: xxswapd vs0, v2961; CHECK-P8-NEXT: stxvd2x vs0, 0, r30962; CHECK-P8-NEXT: addi r1, r1, 48963; CHECK-P8-NEXT: ld r0, 16(r1)964; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload965; CHECK-P8-NEXT: mtlr r0966; CHECK-P8-NEXT: blr967entry:968 %0 = load fp128, ptr %a, align 16969 %1 = tail call fp128 @llvm.floor.f128(fp128 %0)970 store fp128 %1, ptr %res, align 16971 ret void972}973declare fp128 @llvm.floor.f128(fp128 %Val)974 975define dso_local void @qpTrunc(ptr nocapture readonly %a, ptr nocapture %res) {976; CHECK-LABEL: qpTrunc:977; CHECK: # %bb.0: # %entry978; CHECK-NEXT: lxv v2, 0(r3)979; CHECK-NEXT: xsrqpi 1, v2, v2, 1980; CHECK-NEXT: stxv v2, 0(r4)981; CHECK-NEXT: blr982;983; CHECK-P8-LABEL: qpTrunc:984; CHECK-P8: # %bb.0: # %entry985; CHECK-P8-NEXT: mflr r0986; CHECK-P8-NEXT: .cfi_def_cfa_offset 48987; CHECK-P8-NEXT: .cfi_offset lr, 16988; CHECK-P8-NEXT: .cfi_offset r30, -16989; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill990; CHECK-P8-NEXT: stdu r1, -48(r1)991; CHECK-P8-NEXT: std r0, 64(r1)992; CHECK-P8-NEXT: mr r30, r4993; CHECK-P8-NEXT: lxvd2x vs0, 0, r3994; CHECK-P8-NEXT: xxswapd v2, vs0995; CHECK-P8-NEXT: bl truncf128996; CHECK-P8-NEXT: nop997; CHECK-P8-NEXT: xxswapd vs0, v2998; CHECK-P8-NEXT: stxvd2x vs0, 0, r30999; CHECK-P8-NEXT: addi r1, r1, 481000; CHECK-P8-NEXT: ld r0, 16(r1)1001; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1002; CHECK-P8-NEXT: mtlr r01003; CHECK-P8-NEXT: blr1004entry:1005 %0 = load fp128, ptr %a, align 161006 %1 = tail call fp128 @llvm.trunc.f128(fp128 %0)1007 store fp128 %1, ptr %res, align 161008 ret void1009}1010declare fp128 @llvm.trunc.f128(fp128 %Val)1011 1012define dso_local void @qpRound(ptr nocapture readonly %a, ptr nocapture %res) {1013; CHECK-LABEL: qpRound:1014; CHECK: # %bb.0: # %entry1015; CHECK-NEXT: lxv v2, 0(r3)1016; CHECK-NEXT: xsrqpi 0, v2, v2, 01017; CHECK-NEXT: stxv v2, 0(r4)1018; CHECK-NEXT: blr1019;1020; CHECK-P8-LABEL: qpRound:1021; CHECK-P8: # %bb.0: # %entry1022; CHECK-P8-NEXT: mflr r01023; CHECK-P8-NEXT: .cfi_def_cfa_offset 481024; CHECK-P8-NEXT: .cfi_offset lr, 161025; CHECK-P8-NEXT: .cfi_offset r30, -161026; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1027; CHECK-P8-NEXT: stdu r1, -48(r1)1028; CHECK-P8-NEXT: std r0, 64(r1)1029; CHECK-P8-NEXT: mr r30, r41030; CHECK-P8-NEXT: lxvd2x vs0, 0, r31031; CHECK-P8-NEXT: xxswapd v2, vs01032; CHECK-P8-NEXT: bl roundf1281033; CHECK-P8-NEXT: nop1034; CHECK-P8-NEXT: xxswapd vs0, v21035; CHECK-P8-NEXT: stxvd2x vs0, 0, r301036; CHECK-P8-NEXT: addi r1, r1, 481037; CHECK-P8-NEXT: ld r0, 16(r1)1038; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1039; CHECK-P8-NEXT: mtlr r01040; CHECK-P8-NEXT: blr1041entry:1042 %0 = load fp128, ptr %a, align 161043 %1 = tail call fp128 @llvm.round.f128(fp128 %0)1044 store fp128 %1, ptr %res, align 161045 ret void1046}1047declare fp128 @llvm.round.f128(fp128 %Val)1048 1049define dso_local void @qpLRound(ptr nocapture readonly %a, ptr nocapture %res) {1050; CHECK-LABEL: qpLRound:1051; CHECK: # %bb.0: # %entry1052; CHECK-NEXT: mflr r01053; CHECK-NEXT: .cfi_def_cfa_offset 481054; CHECK-NEXT: .cfi_offset lr, 161055; CHECK-NEXT: .cfi_offset r30, -161056; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill1057; CHECK-NEXT: stdu r1, -48(r1)1058; CHECK-NEXT: std r0, 64(r1)1059; CHECK-NEXT: mr r30, r41060; CHECK-NEXT: lxv v2, 0(r3)1061; CHECK-NEXT: bl lroundf1281062; CHECK-NEXT: nop1063; CHECK-NEXT: stw r3, 0(r30)1064; CHECK-NEXT: addi r1, r1, 481065; CHECK-NEXT: ld r0, 16(r1)1066; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1067; CHECK-NEXT: mtlr r01068; CHECK-NEXT: blr1069;1070; CHECK-P8-LABEL: qpLRound:1071; CHECK-P8: # %bb.0: # %entry1072; CHECK-P8-NEXT: mflr r01073; CHECK-P8-NEXT: .cfi_def_cfa_offset 481074; CHECK-P8-NEXT: .cfi_offset lr, 161075; CHECK-P8-NEXT: .cfi_offset r30, -161076; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1077; CHECK-P8-NEXT: stdu r1, -48(r1)1078; CHECK-P8-NEXT: std r0, 64(r1)1079; CHECK-P8-NEXT: mr r30, r41080; CHECK-P8-NEXT: lxvd2x vs0, 0, r31081; CHECK-P8-NEXT: xxswapd v2, vs01082; CHECK-P8-NEXT: bl lroundf1281083; CHECK-P8-NEXT: nop1084; CHECK-P8-NEXT: stw r3, 0(r30)1085; CHECK-P8-NEXT: addi r1, r1, 481086; CHECK-P8-NEXT: ld r0, 16(r1)1087; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1088; CHECK-P8-NEXT: mtlr r01089; CHECK-P8-NEXT: blr1090entry:1091 %0 = load fp128, ptr %a, align 161092 %1 = tail call i32 @llvm.lround.f128(fp128 %0)1093 store i32 %1, ptr %res, align 161094 ret void1095}1096declare i32 @llvm.lround.f128(fp128 %Val)1097 1098define dso_local void @qpLLRound(ptr nocapture readonly %a, ptr nocapture %res) {1099; CHECK-LABEL: qpLLRound:1100; CHECK: # %bb.0: # %entry1101; CHECK-NEXT: mflr r01102; CHECK-NEXT: .cfi_def_cfa_offset 481103; CHECK-NEXT: .cfi_offset lr, 161104; CHECK-NEXT: .cfi_offset r30, -161105; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill1106; CHECK-NEXT: stdu r1, -48(r1)1107; CHECK-NEXT: std r0, 64(r1)1108; CHECK-NEXT: mr r30, r41109; CHECK-NEXT: lxv v2, 0(r3)1110; CHECK-NEXT: bl llroundf1281111; CHECK-NEXT: nop1112; CHECK-NEXT: std r3, 0(r30)1113; CHECK-NEXT: addi r1, r1, 481114; CHECK-NEXT: ld r0, 16(r1)1115; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1116; CHECK-NEXT: mtlr r01117; CHECK-NEXT: blr1118;1119; CHECK-P8-LABEL: qpLLRound:1120; CHECK-P8: # %bb.0: # %entry1121; CHECK-P8-NEXT: mflr r01122; CHECK-P8-NEXT: .cfi_def_cfa_offset 481123; CHECK-P8-NEXT: .cfi_offset lr, 161124; CHECK-P8-NEXT: .cfi_offset r30, -161125; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1126; CHECK-P8-NEXT: stdu r1, -48(r1)1127; CHECK-P8-NEXT: std r0, 64(r1)1128; CHECK-P8-NEXT: mr r30, r41129; CHECK-P8-NEXT: lxvd2x vs0, 0, r31130; CHECK-P8-NEXT: xxswapd v2, vs01131; CHECK-P8-NEXT: bl llroundf1281132; CHECK-P8-NEXT: nop1133; CHECK-P8-NEXT: std r3, 0(r30)1134; CHECK-P8-NEXT: addi r1, r1, 481135; CHECK-P8-NEXT: ld r0, 16(r1)1136; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1137; CHECK-P8-NEXT: mtlr r01138; CHECK-P8-NEXT: blr1139entry:1140 %0 = load fp128, ptr %a, align 161141 %1 = tail call i64 @llvm.llround.f128(fp128 %0)1142 store i64 %1, ptr %res, align 161143 ret void1144}1145declare i64 @llvm.llround.f128(fp128 %Val)1146 1147define dso_local void @qpRint(ptr nocapture readonly %a, ptr nocapture %res) {1148; CHECK-LABEL: qpRint:1149; CHECK: # %bb.0: # %entry1150; CHECK-NEXT: lxv v2, 0(r3)1151; CHECK-NEXT: xsrqpix 0, v2, v2, 31152; CHECK-NEXT: stxv v2, 0(r4)1153; CHECK-NEXT: blr1154;1155; CHECK-P8-LABEL: qpRint:1156; CHECK-P8: # %bb.0: # %entry1157; CHECK-P8-NEXT: mflr r01158; CHECK-P8-NEXT: .cfi_def_cfa_offset 481159; CHECK-P8-NEXT: .cfi_offset lr, 161160; CHECK-P8-NEXT: .cfi_offset r30, -161161; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1162; CHECK-P8-NEXT: stdu r1, -48(r1)1163; CHECK-P8-NEXT: std r0, 64(r1)1164; CHECK-P8-NEXT: mr r30, r41165; CHECK-P8-NEXT: lxvd2x vs0, 0, r31166; CHECK-P8-NEXT: xxswapd v2, vs01167; CHECK-P8-NEXT: bl rintf1281168; CHECK-P8-NEXT: nop1169; CHECK-P8-NEXT: xxswapd vs0, v21170; CHECK-P8-NEXT: stxvd2x vs0, 0, r301171; CHECK-P8-NEXT: addi r1, r1, 481172; CHECK-P8-NEXT: ld r0, 16(r1)1173; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1174; CHECK-P8-NEXT: mtlr r01175; CHECK-P8-NEXT: blr1176entry:1177 %0 = load fp128, ptr %a, align 161178 %1 = tail call fp128 @llvm.rint.f128(fp128 %0)1179 store fp128 %1, ptr %res, align 161180 ret void1181}1182declare fp128 @llvm.rint.f128(fp128 %Val)1183 1184define dso_local void @qpLRint(ptr nocapture readonly %a, ptr nocapture %res) {1185; CHECK-LABEL: qpLRint:1186; CHECK: # %bb.0: # %entry1187; CHECK-NEXT: mflr r01188; CHECK-NEXT: .cfi_def_cfa_offset 481189; CHECK-NEXT: .cfi_offset lr, 161190; CHECK-NEXT: .cfi_offset r30, -161191; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill1192; CHECK-NEXT: stdu r1, -48(r1)1193; CHECK-NEXT: std r0, 64(r1)1194; CHECK-NEXT: mr r30, r41195; CHECK-NEXT: lxv v2, 0(r3)1196; CHECK-NEXT: bl lrintf1281197; CHECK-NEXT: nop1198; CHECK-NEXT: stw r3, 0(r30)1199; CHECK-NEXT: addi r1, r1, 481200; CHECK-NEXT: ld r0, 16(r1)1201; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1202; CHECK-NEXT: mtlr r01203; CHECK-NEXT: blr1204;1205; CHECK-P8-LABEL: qpLRint:1206; CHECK-P8: # %bb.0: # %entry1207; CHECK-P8-NEXT: mflr r01208; CHECK-P8-NEXT: .cfi_def_cfa_offset 481209; CHECK-P8-NEXT: .cfi_offset lr, 161210; CHECK-P8-NEXT: .cfi_offset r30, -161211; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1212; CHECK-P8-NEXT: stdu r1, -48(r1)1213; CHECK-P8-NEXT: std r0, 64(r1)1214; CHECK-P8-NEXT: mr r30, r41215; CHECK-P8-NEXT: lxvd2x vs0, 0, r31216; CHECK-P8-NEXT: xxswapd v2, vs01217; CHECK-P8-NEXT: bl lrintf1281218; CHECK-P8-NEXT: nop1219; CHECK-P8-NEXT: stw r3, 0(r30)1220; CHECK-P8-NEXT: addi r1, r1, 481221; CHECK-P8-NEXT: ld r0, 16(r1)1222; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1223; CHECK-P8-NEXT: mtlr r01224; CHECK-P8-NEXT: blr1225entry:1226 %0 = load fp128, ptr %a, align 161227 %1 = tail call i32 @llvm.lrint.f128(fp128 %0)1228 store i32 %1, ptr %res, align 161229 ret void1230}1231declare i32 @llvm.lrint.f128(fp128 %Val)1232 1233define dso_local void @qpLLRint(ptr nocapture readonly %a, ptr nocapture %res) {1234; CHECK-LABEL: qpLLRint:1235; CHECK: # %bb.0: # %entry1236; CHECK-NEXT: mflr r01237; CHECK-NEXT: .cfi_def_cfa_offset 481238; CHECK-NEXT: .cfi_offset lr, 161239; CHECK-NEXT: .cfi_offset r30, -161240; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill1241; CHECK-NEXT: stdu r1, -48(r1)1242; CHECK-NEXT: std r0, 64(r1)1243; CHECK-NEXT: mr r30, r41244; CHECK-NEXT: lxv v2, 0(r3)1245; CHECK-NEXT: bl llrintf1281246; CHECK-NEXT: nop1247; CHECK-NEXT: std r3, 0(r30)1248; CHECK-NEXT: addi r1, r1, 481249; CHECK-NEXT: ld r0, 16(r1)1250; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1251; CHECK-NEXT: mtlr r01252; CHECK-NEXT: blr1253;1254; CHECK-P8-LABEL: qpLLRint:1255; CHECK-P8: # %bb.0: # %entry1256; CHECK-P8-NEXT: mflr r01257; CHECK-P8-NEXT: .cfi_def_cfa_offset 481258; CHECK-P8-NEXT: .cfi_offset lr, 161259; CHECK-P8-NEXT: .cfi_offset r30, -161260; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1261; CHECK-P8-NEXT: stdu r1, -48(r1)1262; CHECK-P8-NEXT: std r0, 64(r1)1263; CHECK-P8-NEXT: mr r30, r41264; CHECK-P8-NEXT: lxvd2x vs0, 0, r31265; CHECK-P8-NEXT: xxswapd v2, vs01266; CHECK-P8-NEXT: bl llrintf1281267; CHECK-P8-NEXT: nop1268; CHECK-P8-NEXT: std r3, 0(r30)1269; CHECK-P8-NEXT: addi r1, r1, 481270; CHECK-P8-NEXT: ld r0, 16(r1)1271; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1272; CHECK-P8-NEXT: mtlr r01273; CHECK-P8-NEXT: blr1274entry:1275 %0 = load fp128, ptr %a, align 161276 %1 = tail call i64 @llvm.llrint.f128(fp128 %0)1277 store i64 %1, ptr %res, align 161278 ret void1279}1280declare i64 @llvm.llrint.f128(fp128 %Val)1281 1282define dso_local void @qpNearByInt(ptr nocapture readonly %a, ptr nocapture %res) {1283; CHECK-LABEL: qpNearByInt:1284; CHECK: # %bb.0: # %entry1285; CHECK-NEXT: lxv v2, 0(r3)1286; CHECK-NEXT: xsrqpi 0, v2, v2, 31287; CHECK-NEXT: stxv v2, 0(r4)1288; CHECK-NEXT: blr1289;1290; CHECK-P8-LABEL: qpNearByInt:1291; CHECK-P8: # %bb.0: # %entry1292; CHECK-P8-NEXT: mflr r01293; CHECK-P8-NEXT: .cfi_def_cfa_offset 481294; CHECK-P8-NEXT: .cfi_offset lr, 161295; CHECK-P8-NEXT: .cfi_offset r30, -161296; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1297; CHECK-P8-NEXT: stdu r1, -48(r1)1298; CHECK-P8-NEXT: std r0, 64(r1)1299; CHECK-P8-NEXT: mr r30, r41300; CHECK-P8-NEXT: lxvd2x vs0, 0, r31301; CHECK-P8-NEXT: xxswapd v2, vs01302; CHECK-P8-NEXT: bl nearbyintf1281303; CHECK-P8-NEXT: nop1304; CHECK-P8-NEXT: xxswapd vs0, v21305; CHECK-P8-NEXT: stxvd2x vs0, 0, r301306; CHECK-P8-NEXT: addi r1, r1, 481307; CHECK-P8-NEXT: ld r0, 16(r1)1308; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1309; CHECK-P8-NEXT: mtlr r01310; CHECK-P8-NEXT: blr1311entry:1312 %0 = load fp128, ptr %a, align 161313 %1 = tail call fp128 @llvm.nearbyint.f128(fp128 %0)1314 store fp128 %1, ptr %res, align 161315 ret void1316}1317declare fp128 @llvm.nearbyint.f128(fp128 %Val)1318 1319define dso_local void @qpFMA(ptr %a, ptr %b, ptr %c, ptr %res) {1320; CHECK-LABEL: qpFMA:1321; CHECK: # %bb.0: # %entry1322; CHECK-NEXT: lxv v2, 0(r3)1323; CHECK-NEXT: lxv v3, 0(r4)1324; CHECK-NEXT: lxv v4, 0(r5)1325; CHECK-NEXT: xsmaddqp v4, v2, v31326; CHECK-NEXT: stxv v4, 0(r6)1327; CHECK-NEXT: blr1328;1329; CHECK-P8-LABEL: qpFMA:1330; CHECK-P8: # %bb.0: # %entry1331; CHECK-P8-NEXT: mflr r01332; CHECK-P8-NEXT: .cfi_def_cfa_offset 481333; CHECK-P8-NEXT: .cfi_offset lr, 161334; CHECK-P8-NEXT: .cfi_offset r30, -161335; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1336; CHECK-P8-NEXT: stdu r1, -48(r1)1337; CHECK-P8-NEXT: std r0, 64(r1)1338; CHECK-P8-NEXT: mr r30, r61339; CHECK-P8-NEXT: lxvd2x vs0, 0, r31340; CHECK-P8-NEXT: xxswapd v2, vs01341; CHECK-P8-NEXT: lxvd2x vs0, 0, r41342; CHECK-P8-NEXT: xxswapd v3, vs01343; CHECK-P8-NEXT: lxvd2x vs0, 0, r51344; CHECK-P8-NEXT: xxswapd v4, vs01345; CHECK-P8-NEXT: bl fmaf1281346; CHECK-P8-NEXT: nop1347; CHECK-P8-NEXT: xxswapd vs0, v21348; CHECK-P8-NEXT: stxvd2x vs0, 0, r301349; CHECK-P8-NEXT: addi r1, r1, 481350; CHECK-P8-NEXT: ld r0, 16(r1)1351; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1352; CHECK-P8-NEXT: mtlr r01353; CHECK-P8-NEXT: blr1354entry:1355 %0 = load fp128, ptr %a, align 161356 %1 = load fp128, ptr %b, align 161357 %2 = load fp128, ptr %c, align 161358 %3 = tail call fp128 @llvm.fma.f128(fp128 %0, fp128 %1, fp128 %2)1359 store fp128 %3, ptr %res, align 161360 ret void1361}1362declare fp128 @llvm.fma.f128(fp128, fp128, fp128)1363 1364define dso_local fp128 @qpFREXP(ptr %a, ptr %b) {1365; CHECK-LABEL: qpFREXP:1366; CHECK: # %bb.0: # %entry1367; CHECK-NEXT: mflr r01368; CHECK-NEXT: stdu r1, -32(r1)1369; CHECK-NEXT: std r0, 48(r1)1370; CHECK-NEXT: .cfi_def_cfa_offset 321371; CHECK-NEXT: .cfi_offset lr, 161372; CHECK-NEXT: lxv v2, 0(r3)1373; CHECK-NEXT: mr r5, r41374; CHECK-NEXT: bl frexpf1281375; CHECK-NEXT: nop1376; CHECK-NEXT: addi r1, r1, 321377; CHECK-NEXT: ld r0, 16(r1)1378; CHECK-NEXT: mtlr r01379; CHECK-NEXT: blr1380;1381; CHECK-P8-LABEL: qpFREXP:1382; CHECK-P8: # %bb.0: # %entry1383; CHECK-P8-NEXT: mflr r01384; CHECK-P8-NEXT: stdu r1, -32(r1)1385; CHECK-P8-NEXT: std r0, 48(r1)1386; CHECK-P8-NEXT: .cfi_def_cfa_offset 321387; CHECK-P8-NEXT: .cfi_offset lr, 161388; CHECK-P8-NEXT: lxvd2x vs0, 0, r31389; CHECK-P8-NEXT: mr r5, r41390; CHECK-P8-NEXT: xxswapd v2, vs01391; CHECK-P8-NEXT: bl frexpf1281392; CHECK-P8-NEXT: nop1393; CHECK-P8-NEXT: addi r1, r1, 321394; CHECK-P8-NEXT: ld r0, 16(r1)1395; CHECK-P8-NEXT: mtlr r01396; CHECK-P8-NEXT: blr1397entry:1398 %0 = load fp128, ptr %a, align 161399 %1 = tail call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %0)1400 %2 = extractvalue { fp128, i32 } %1, 11401 store i32 %2, ptr %b, align 41402 %3 = extractvalue { fp128, i32 } %1, 01403 ret fp128 %31404}1405declare { fp128, i32 } @llvm.frexp.f128.i32(fp128)1406 1407 1408define dso_local fp128 @acos_f128(fp128 %x) {1409; CHECK-LABEL: acos_f128:1410; CHECK: # %bb.0:1411; CHECK-NEXT: mflr r01412; CHECK-NEXT: stdu r1, -32(r1)1413; CHECK-NEXT: std r0, 48(r1)1414; CHECK-NEXT: .cfi_def_cfa_offset 321415; CHECK-NEXT: .cfi_offset lr, 161416; CHECK-NEXT: bl acosf1281417; CHECK-NEXT: nop1418; CHECK-NEXT: addi r1, r1, 321419; CHECK-NEXT: ld r0, 16(r1)1420; CHECK-NEXT: mtlr r01421; CHECK-NEXT: blr1422;1423; CHECK-P8-LABEL: acos_f128:1424; CHECK-P8: # %bb.0:1425; CHECK-P8-NEXT: mflr r01426; CHECK-P8-NEXT: stdu r1, -32(r1)1427; CHECK-P8-NEXT: std r0, 48(r1)1428; CHECK-P8-NEXT: .cfi_def_cfa_offset 321429; CHECK-P8-NEXT: .cfi_offset lr, 161430; CHECK-P8-NEXT: bl acosf1281431; CHECK-P8-NEXT: nop1432; CHECK-P8-NEXT: addi r1, r1, 321433; CHECK-P8-NEXT: ld r0, 16(r1)1434; CHECK-P8-NEXT: mtlr r01435; CHECK-P8-NEXT: blr1436 %result = call fp128 @llvm.acos.f128(fp128 %x)1437 ret fp128 %result1438}1439 1440define dso_local fp128 @asin_f128(fp128 %x) {1441; CHECK-LABEL: asin_f128:1442; CHECK: # %bb.0:1443; CHECK-NEXT: mflr r01444; CHECK-NEXT: stdu r1, -32(r1)1445; CHECK-NEXT: std r0, 48(r1)1446; CHECK-NEXT: .cfi_def_cfa_offset 321447; CHECK-NEXT: .cfi_offset lr, 161448; CHECK-NEXT: bl asinf1281449; CHECK-NEXT: nop1450; CHECK-NEXT: addi r1, r1, 321451; CHECK-NEXT: ld r0, 16(r1)1452; CHECK-NEXT: mtlr r01453; CHECK-NEXT: blr1454;1455; CHECK-P8-LABEL: asin_f128:1456; CHECK-P8: # %bb.0:1457; CHECK-P8-NEXT: mflr r01458; CHECK-P8-NEXT: stdu r1, -32(r1)1459; CHECK-P8-NEXT: std r0, 48(r1)1460; CHECK-P8-NEXT: .cfi_def_cfa_offset 321461; CHECK-P8-NEXT: .cfi_offset lr, 161462; CHECK-P8-NEXT: bl asinf1281463; CHECK-P8-NEXT: nop1464; CHECK-P8-NEXT: addi r1, r1, 321465; CHECK-P8-NEXT: ld r0, 16(r1)1466; CHECK-P8-NEXT: mtlr r01467; CHECK-P8-NEXT: blr1468 %result = call fp128 @llvm.asin.f128(fp128 %x)1469 ret fp128 %result1470}1471 1472define dso_local fp128 @atan_f128(fp128 %x) {1473; CHECK-LABEL: atan_f128:1474; CHECK: # %bb.0:1475; CHECK-NEXT: mflr r01476; CHECK-NEXT: stdu r1, -32(r1)1477; CHECK-NEXT: std r0, 48(r1)1478; CHECK-NEXT: .cfi_def_cfa_offset 321479; CHECK-NEXT: .cfi_offset lr, 161480; CHECK-NEXT: bl atanf1281481; CHECK-NEXT: nop1482; CHECK-NEXT: addi r1, r1, 321483; CHECK-NEXT: ld r0, 16(r1)1484; CHECK-NEXT: mtlr r01485; CHECK-NEXT: blr1486;1487; CHECK-P8-LABEL: atan_f128:1488; CHECK-P8: # %bb.0:1489; CHECK-P8-NEXT: mflr r01490; CHECK-P8-NEXT: stdu r1, -32(r1)1491; CHECK-P8-NEXT: std r0, 48(r1)1492; CHECK-P8-NEXT: .cfi_def_cfa_offset 321493; CHECK-P8-NEXT: .cfi_offset lr, 161494; CHECK-P8-NEXT: bl atanf1281495; CHECK-P8-NEXT: nop1496; CHECK-P8-NEXT: addi r1, r1, 321497; CHECK-P8-NEXT: ld r0, 16(r1)1498; CHECK-P8-NEXT: mtlr r01499; CHECK-P8-NEXT: blr1500 %result = call fp128 @llvm.atan.f128(fp128 %x)1501 ret fp128 %result1502}1503 1504define dso_local fp128 @atan2_f128(fp128 %x, fp128 %y) {1505; CHECK-LABEL: atan2_f128:1506; CHECK: # %bb.0:1507; CHECK-NEXT: mflr r01508; CHECK-NEXT: stdu r1, -32(r1)1509; CHECK-NEXT: std r0, 48(r1)1510; CHECK-NEXT: .cfi_def_cfa_offset 321511; CHECK-NEXT: .cfi_offset lr, 161512; CHECK-NEXT: bl atan2f1281513; CHECK-NEXT: nop1514; CHECK-NEXT: addi r1, r1, 321515; CHECK-NEXT: ld r0, 16(r1)1516; CHECK-NEXT: mtlr r01517; CHECK-NEXT: blr1518;1519; CHECK-P8-LABEL: atan2_f128:1520; CHECK-P8: # %bb.0:1521; CHECK-P8-NEXT: mflr r01522; CHECK-P8-NEXT: stdu r1, -32(r1)1523; CHECK-P8-NEXT: std r0, 48(r1)1524; CHECK-P8-NEXT: .cfi_def_cfa_offset 321525; CHECK-P8-NEXT: .cfi_offset lr, 161526; CHECK-P8-NEXT: bl atan2f1281527; CHECK-P8-NEXT: nop1528; CHECK-P8-NEXT: addi r1, r1, 321529; CHECK-P8-NEXT: ld r0, 16(r1)1530; CHECK-P8-NEXT: mtlr r01531; CHECK-P8-NEXT: blr1532 %result = call fp128 @llvm.atan2.f128(fp128 %x, fp128 %y)1533 ret fp128 %result1534}1535 1536define dso_local fp128 @copysign_f128(fp128 %x, fp128 %y) {1537; CHECK-LABEL: copysign_f128:1538; CHECK: # %bb.0:1539; CHECK-NEXT: xscpsgnqp v2, v3, v21540; CHECK-NEXT: blr1541;1542; CHECK-P8-LABEL: copysign_f128:1543; CHECK-P8: # %bb.0:1544; CHECK-P8-NEXT: xxswapd vs0, v31545; CHECK-P8-NEXT: addi r3, r1, -161546; CHECK-P8-NEXT: xxswapd vs1, v21547; CHECK-P8-NEXT: stxvd2x vs0, 0, r31548; CHECK-P8-NEXT: addi r3, r1, -321549; CHECK-P8-NEXT: stxvd2x vs1, 0, r31550; CHECK-P8-NEXT: lbz r4, -1(r1)1551; CHECK-P8-NEXT: lbz r5, -17(r1)1552; CHECK-P8-NEXT: rlwimi r5, r4, 0, 0, 241553; CHECK-P8-NEXT: stb r5, -17(r1)1554; CHECK-P8-NEXT: lxvd2x vs0, 0, r31555; CHECK-P8-NEXT: xxswapd v2, vs01556; CHECK-P8-NEXT: blr1557 %result = call fp128 @llvm.copysign.f128(fp128 %x, fp128 %y)1558 ret fp128 %result1559}1560 1561define dso_local fp128 @cosh_f128(fp128 %x) {1562; CHECK-LABEL: cosh_f128:1563; CHECK: # %bb.0:1564; CHECK-NEXT: mflr r01565; CHECK-NEXT: stdu r1, -32(r1)1566; CHECK-NEXT: std r0, 48(r1)1567; CHECK-NEXT: .cfi_def_cfa_offset 321568; CHECK-NEXT: .cfi_offset lr, 161569; CHECK-NEXT: bl coshf1281570; CHECK-NEXT: nop1571; CHECK-NEXT: addi r1, r1, 321572; CHECK-NEXT: ld r0, 16(r1)1573; CHECK-NEXT: mtlr r01574; CHECK-NEXT: blr1575;1576; CHECK-P8-LABEL: cosh_f128:1577; CHECK-P8: # %bb.0:1578; CHECK-P8-NEXT: mflr r01579; CHECK-P8-NEXT: stdu r1, -32(r1)1580; CHECK-P8-NEXT: std r0, 48(r1)1581; CHECK-P8-NEXT: .cfi_def_cfa_offset 321582; CHECK-P8-NEXT: .cfi_offset lr, 161583; CHECK-P8-NEXT: bl coshf1281584; CHECK-P8-NEXT: nop1585; CHECK-P8-NEXT: addi r1, r1, 321586; CHECK-P8-NEXT: ld r0, 16(r1)1587; CHECK-P8-NEXT: mtlr r01588; CHECK-P8-NEXT: blr1589 %result = call fp128 @llvm.cosh.f128(fp128 %x)1590 ret fp128 %result1591}1592 1593define dso_local fp128 @exp10_f128(fp128 %x) {1594; CHECK-LABEL: exp10_f128:1595; CHECK: # %bb.0:1596; CHECK-NEXT: mflr r01597; CHECK-NEXT: stdu r1, -32(r1)1598; CHECK-NEXT: std r0, 48(r1)1599; CHECK-NEXT: .cfi_def_cfa_offset 321600; CHECK-NEXT: .cfi_offset lr, 161601; CHECK-NEXT: bl exp10f1281602; CHECK-NEXT: nop1603; CHECK-NEXT: addi r1, r1, 321604; CHECK-NEXT: ld r0, 16(r1)1605; CHECK-NEXT: mtlr r01606; CHECK-NEXT: blr1607;1608; CHECK-P8-LABEL: exp10_f128:1609; CHECK-P8: # %bb.0:1610; CHECK-P8-NEXT: mflr r01611; CHECK-P8-NEXT: stdu r1, -32(r1)1612; CHECK-P8-NEXT: std r0, 48(r1)1613; CHECK-P8-NEXT: .cfi_def_cfa_offset 321614; CHECK-P8-NEXT: .cfi_offset lr, 161615; CHECK-P8-NEXT: bl exp10f1281616; CHECK-P8-NEXT: nop1617; CHECK-P8-NEXT: addi r1, r1, 321618; CHECK-P8-NEXT: ld r0, 16(r1)1619; CHECK-P8-NEXT: mtlr r01620; CHECK-P8-NEXT: blr1621 %result = call fp128 @llvm.exp10.f128(fp128 %x)1622 ret fp128 %result1623}1624 1625; FIXME: Asserts1626; define dso_local fp128 @maximum_f128(fp128 %x, fp128 %y) {1627; %result = call fp128 @llvm.maximum.f128(fp128 %x, fp128 %y)1628; ret fp128 %result1629; }1630 1631; FIXME: Asserts1632; define dso_local fp128 @minimum_f128(fp128 %x, fp128 %y) {1633; %result = call fp128 @llvm.minimum.f128(fp128 %x, fp128 %y)1634; ret fp128 %result1635; }1636 1637; FIXME: Asserts1638; define dso_local fp128 @maximumnum_f128(fp128 %x, fp128 %y) {1639; %result = call fp128 @llvm.maximumnum.f128(fp128 %x, fp128 %y)1640; ret fp128 %result1641; }1642 1643; FIXME: Asserts1644; define dso_local fp128 @minimumnum_f128(fp128 %x, fp128 %y) {1645; %result = call fp128 @llvm.minimumnum.f128(fp128 %x, fp128 %y)1646; ret fp128 %result1647; }1648 1649define dso_local fp128 @ldexp_f128(fp128 %x, i32 %y) {1650; CHECK-LABEL: ldexp_f128:1651; CHECK: # %bb.0:1652; CHECK-NEXT: mflr r01653; CHECK-NEXT: stdu r1, -32(r1)1654; CHECK-NEXT: std r0, 48(r1)1655; CHECK-NEXT: .cfi_def_cfa_offset 321656; CHECK-NEXT: .cfi_offset lr, 161657; CHECK-NEXT: extsw r5, r51658; CHECK-NEXT: bl ldexpf1281659; CHECK-NEXT: nop1660; CHECK-NEXT: addi r1, r1, 321661; CHECK-NEXT: ld r0, 16(r1)1662; CHECK-NEXT: mtlr r01663; CHECK-NEXT: blr1664;1665; CHECK-P8-LABEL: ldexp_f128:1666; CHECK-P8: # %bb.0:1667; CHECK-P8-NEXT: mflr r01668; CHECK-P8-NEXT: stdu r1, -32(r1)1669; CHECK-P8-NEXT: std r0, 48(r1)1670; CHECK-P8-NEXT: .cfi_def_cfa_offset 321671; CHECK-P8-NEXT: .cfi_offset lr, 161672; CHECK-P8-NEXT: extsw r5, r51673; CHECK-P8-NEXT: bl ldexpf1281674; CHECK-P8-NEXT: nop1675; CHECK-P8-NEXT: addi r1, r1, 321676; CHECK-P8-NEXT: ld r0, 16(r1)1677; CHECK-P8-NEXT: mtlr r01678; CHECK-P8-NEXT: blr1679 %result = call fp128 @llvm.ldexp.f128.i32(fp128 %x, i32 %y)1680 ret fp128 %result1681}1682 1683define dso_local { fp128, fp128 } @modf_f128(fp128 %x) {1684; CHECK-LABEL: modf_f128:1685; CHECK: # %bb.0:1686; CHECK-NEXT: mflr r01687; CHECK-NEXT: stdu r1, -48(r1)1688; CHECK-NEXT: std r0, 64(r1)1689; CHECK-NEXT: .cfi_def_cfa_offset 481690; CHECK-NEXT: .cfi_offset lr, 161691; CHECK-NEXT: addi r5, r1, 321692; CHECK-NEXT: bl modff1281693; CHECK-NEXT: nop1694; CHECK-NEXT: lxv v3, 32(r1)1695; CHECK-NEXT: addi r1, r1, 481696; CHECK-NEXT: ld r0, 16(r1)1697; CHECK-NEXT: mtlr r01698; CHECK-NEXT: blr1699;1700; CHECK-P8-LABEL: modf_f128:1701; CHECK-P8: # %bb.0:1702; CHECK-P8-NEXT: mflr r01703; CHECK-P8-NEXT: .cfi_def_cfa_offset 641704; CHECK-P8-NEXT: .cfi_offset lr, 161705; CHECK-P8-NEXT: .cfi_offset r30, -161706; CHECK-P8-NEXT: std r30, -16(r1) # 8-byte Folded Spill1707; CHECK-P8-NEXT: stdu r1, -64(r1)1708; CHECK-P8-NEXT: addi r30, r1, 321709; CHECK-P8-NEXT: std r0, 80(r1)1710; CHECK-P8-NEXT: mr r5, r301711; CHECK-P8-NEXT: bl modff1281712; CHECK-P8-NEXT: nop1713; CHECK-P8-NEXT: lxvd2x vs0, 0, r301714; CHECK-P8-NEXT: xxswapd v3, vs01715; CHECK-P8-NEXT: addi r1, r1, 641716; CHECK-P8-NEXT: ld r0, 16(r1)1717; CHECK-P8-NEXT: ld r30, -16(r1) # 8-byte Folded Reload1718; CHECK-P8-NEXT: mtlr r01719; CHECK-P8-NEXT: blr1720 %result = call { fp128, fp128 } @llvm.modf.f128(fp128 %x)1721 ret { fp128, fp128 } %result1722}1723 1724define dso_local fp128 @roundeven_f128(fp128 %x) {1725; CHECK-LABEL: roundeven_f128:1726; CHECK: # %bb.0:1727; CHECK-NEXT: mflr r01728; CHECK-NEXT: stdu r1, -32(r1)1729; CHECK-NEXT: std r0, 48(r1)1730; CHECK-NEXT: .cfi_def_cfa_offset 321731; CHECK-NEXT: .cfi_offset lr, 161732; CHECK-NEXT: bl roundevenf1281733; CHECK-NEXT: nop1734; CHECK-NEXT: addi r1, r1, 321735; CHECK-NEXT: ld r0, 16(r1)1736; CHECK-NEXT: mtlr r01737; CHECK-NEXT: blr1738;1739; CHECK-P8-LABEL: roundeven_f128:1740; CHECK-P8: # %bb.0:1741; CHECK-P8-NEXT: mflr r01742; CHECK-P8-NEXT: stdu r1, -32(r1)1743; CHECK-P8-NEXT: std r0, 48(r1)1744; CHECK-P8-NEXT: .cfi_def_cfa_offset 321745; CHECK-P8-NEXT: .cfi_offset lr, 161746; CHECK-P8-NEXT: bl roundevenf1281747; CHECK-P8-NEXT: nop1748; CHECK-P8-NEXT: addi r1, r1, 321749; CHECK-P8-NEXT: ld r0, 16(r1)1750; CHECK-P8-NEXT: mtlr r01751; CHECK-P8-NEXT: blr1752 %result = call fp128 @llvm.roundeven.f128(fp128 %x)1753 ret fp128 %result1754}1755 1756define dso_local fp128 @sinh_f128(fp128 %x) {1757; CHECK-LABEL: sinh_f128:1758; CHECK: # %bb.0:1759; CHECK-NEXT: mflr r01760; CHECK-NEXT: stdu r1, -32(r1)1761; CHECK-NEXT: std r0, 48(r1)1762; CHECK-NEXT: .cfi_def_cfa_offset 321763; CHECK-NEXT: .cfi_offset lr, 161764; CHECK-NEXT: bl sinhf1281765; CHECK-NEXT: nop1766; CHECK-NEXT: addi r1, r1, 321767; CHECK-NEXT: ld r0, 16(r1)1768; CHECK-NEXT: mtlr r01769; CHECK-NEXT: blr1770;1771; CHECK-P8-LABEL: sinh_f128:1772; CHECK-P8: # %bb.0:1773; CHECK-P8-NEXT: mflr r01774; CHECK-P8-NEXT: stdu r1, -32(r1)1775; CHECK-P8-NEXT: std r0, 48(r1)1776; CHECK-P8-NEXT: .cfi_def_cfa_offset 321777; CHECK-P8-NEXT: .cfi_offset lr, 161778; CHECK-P8-NEXT: bl sinhf1281779; CHECK-P8-NEXT: nop1780; CHECK-P8-NEXT: addi r1, r1, 321781; CHECK-P8-NEXT: ld r0, 16(r1)1782; CHECK-P8-NEXT: mtlr r01783; CHECK-P8-NEXT: blr1784 %result = call fp128 @llvm.sinh.f128(fp128 %x)1785 ret fp128 %result1786}1787 1788define dso_local fp128 @tanh_f128(fp128 %x) {1789; CHECK-LABEL: tanh_f128:1790; CHECK: # %bb.0:1791; CHECK-NEXT: mflr r01792; CHECK-NEXT: stdu r1, -32(r1)1793; CHECK-NEXT: std r0, 48(r1)1794; CHECK-NEXT: .cfi_def_cfa_offset 321795; CHECK-NEXT: .cfi_offset lr, 161796; CHECK-NEXT: bl tanhf1281797; CHECK-NEXT: nop1798; CHECK-NEXT: addi r1, r1, 321799; CHECK-NEXT: ld r0, 16(r1)1800; CHECK-NEXT: mtlr r01801; CHECK-NEXT: blr1802;1803; CHECK-P8-LABEL: tanh_f128:1804; CHECK-P8: # %bb.0:1805; CHECK-P8-NEXT: mflr r01806; CHECK-P8-NEXT: stdu r1, -32(r1)1807; CHECK-P8-NEXT: std r0, 48(r1)1808; CHECK-P8-NEXT: .cfi_def_cfa_offset 321809; CHECK-P8-NEXT: .cfi_offset lr, 161810; CHECK-P8-NEXT: bl tanhf1281811; CHECK-P8-NEXT: nop1812; CHECK-P8-NEXT: addi r1, r1, 321813; CHECK-P8-NEXT: ld r0, 16(r1)1814; CHECK-P8-NEXT: mtlr r01815; CHECK-P8-NEXT: blr1816 %result = call fp128 @llvm.tanh.f128(fp128 %x)1817 ret fp128 %result1818}1819 1820define dso_local fp128 @tan_f128(fp128 %x) {1821; CHECK-LABEL: tan_f128:1822; CHECK: # %bb.0:1823; CHECK-NEXT: mflr r01824; CHECK-NEXT: stdu r1, -32(r1)1825; CHECK-NEXT: std r0, 48(r1)1826; CHECK-NEXT: .cfi_def_cfa_offset 321827; CHECK-NEXT: .cfi_offset lr, 161828; CHECK-NEXT: bl tanf1281829; CHECK-NEXT: nop1830; CHECK-NEXT: addi r1, r1, 321831; CHECK-NEXT: ld r0, 16(r1)1832; CHECK-NEXT: mtlr r01833; CHECK-NEXT: blr1834;1835; CHECK-P8-LABEL: tan_f128:1836; CHECK-P8: # %bb.0:1837; CHECK-P8-NEXT: mflr r01838; CHECK-P8-NEXT: stdu r1, -32(r1)1839; CHECK-P8-NEXT: std r0, 48(r1)1840; CHECK-P8-NEXT: .cfi_def_cfa_offset 321841; CHECK-P8-NEXT: .cfi_offset lr, 161842; CHECK-P8-NEXT: bl tanf1281843; CHECK-P8-NEXT: nop1844; CHECK-P8-NEXT: addi r1, r1, 321845; CHECK-P8-NEXT: ld r0, 16(r1)1846; CHECK-P8-NEXT: mtlr r01847; CHECK-P8-NEXT: blr1848 %result = call fp128 @llvm.tan.f128(fp128 %x)1849 ret fp128 %result1850}1851