Skip to content

PowerPC: Fix using long double libm functions for f128 intrinsics #144382

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 67 additions & 76 deletions llvm/lib/IR/RuntimeLibcalls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,69 @@ void RuntimeLibcallsInfo::initSoftFloatCmpLibcallPredicates() {
SoftFloatCompareLibcallPredicates[RTLIB::UO_PPCF128] = CmpInst::ICMP_NE;
}

static void setLongDoubleIsF128Libm(RuntimeLibcallsInfo &Info,
bool FiniteOnlyFuncs = false) {
Info.setLibcallName(RTLIB::REM_F128, "fmodf128");
Info.setLibcallName(RTLIB::FMA_F128, "fmaf128");
Info.setLibcallName(RTLIB::SQRT_F128, "sqrtf128");
Info.setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
Info.setLibcallName(RTLIB::LOG_F128, "logf128");
Info.setLibcallName(RTLIB::LOG2_F128, "log2f128");
Info.setLibcallName(RTLIB::LOG10_F128, "log10f128");
Info.setLibcallName(RTLIB::EXP_F128, "expf128");
Info.setLibcallName(RTLIB::EXP2_F128, "exp2f128");
Info.setLibcallName(RTLIB::EXP10_F128, "exp10f128");
Info.setLibcallName(RTLIB::SIN_F128, "sinf128");
Info.setLibcallName(RTLIB::COS_F128, "cosf128");
Info.setLibcallName(RTLIB::TAN_F128, "tanf128");
Info.setLibcallName(RTLIB::SINCOS_F128, "sincosf128");
Info.setLibcallName(RTLIB::ASIN_F128, "asinf128");
Info.setLibcallName(RTLIB::ACOS_F128, "acosf128");
Info.setLibcallName(RTLIB::ATAN_F128, "atanf128");
Info.setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
Info.setLibcallName(RTLIB::SINH_F128, "sinhf128");
Info.setLibcallName(RTLIB::COSH_F128, "coshf128");
Info.setLibcallName(RTLIB::TANH_F128, "tanhf128");
Info.setLibcallName(RTLIB::POW_F128, "powf128");
Info.setLibcallName(RTLIB::CEIL_F128, "ceilf128");
Info.setLibcallName(RTLIB::TRUNC_F128, "truncf128");
Info.setLibcallName(RTLIB::RINT_F128, "rintf128");
Info.setLibcallName(RTLIB::NEARBYINT_F128, "nearbyintf128");
Info.setLibcallName(RTLIB::ROUND_F128, "roundf128");
Info.setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
Info.setLibcallName(RTLIB::FLOOR_F128, "floorf128");
Info.setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
Info.setLibcallName(RTLIB::FMIN_F128, "fminf128");
Info.setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
Info.setLibcallName(RTLIB::FMINIMUM_F128, "fminimumf128");
Info.setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximumf128");
Info.setLibcallName(RTLIB::FMINIMUM_NUM_F128, "fminimum_numf128");
Info.setLibcallName(RTLIB::FMAXIMUM_NUM_F128, "fmaximum_numf128");
Info.setLibcallName(RTLIB::LROUND_F128, "lroundf128");
Info.setLibcallName(RTLIB::LLROUND_F128, "llroundf128");
Info.setLibcallName(RTLIB::LRINT_F128, "lrintf128");
Info.setLibcallName(RTLIB::LLRINT_F128, "llrintf128");
Info.setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
Info.setLibcallName(RTLIB::FREXP_F128, "frexpf128");
Info.setLibcallName(RTLIB::MODF_F128, "modff128");

if (FiniteOnlyFuncs) {
Info.setLibcallName(RTLIB::LOG_FINITE_F128, "__logf128_finite");
Info.setLibcallName(RTLIB::LOG2_FINITE_F128, "__log2f128_finite");
Info.setLibcallName(RTLIB::LOG10_FINITE_F128, "__log10f128_finite");
Info.setLibcallName(RTLIB::EXP_FINITE_F128, "__expf128_finite");
Info.setLibcallName(RTLIB::EXP2_FINITE_F128, "__exp2f128_finite");
Info.setLibcallName(RTLIB::POW_FINITE_F128, "__powf128_finite");
} else {
Info.setLibcallName(RTLIB::LOG_FINITE_F128, nullptr);
Info.setLibcallName(RTLIB::LOG2_FINITE_F128, nullptr);
Info.setLibcallName(RTLIB::LOG10_FINITE_F128, nullptr);
Info.setLibcallName(RTLIB::EXP_FINITE_F128, nullptr);
Info.setLibcallName(RTLIB::EXP2_FINITE_F128, nullptr);
Info.setLibcallName(RTLIB::POW_FINITE_F128, nullptr);
}
}

/// Set default libcall names. If a target wants to opt-out of a libcall it
/// should be placed here.
void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
Expand All @@ -295,57 +358,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
#undef LIBCALL_NO_NAME

// Use the f128 variants of math functions on x86
if (TT.isX86() && TT.isGNUEnvironment()) {
setLibcallName(RTLIB::REM_F128, "fmodf128");
setLibcallName(RTLIB::FMA_F128, "fmaf128");
setLibcallName(RTLIB::SQRT_F128, "sqrtf128");
setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
setLibcallName(RTLIB::LOG_F128, "logf128");
setLibcallName(RTLIB::LOG_FINITE_F128, "__logf128_finite");
setLibcallName(RTLIB::LOG2_F128, "log2f128");
setLibcallName(RTLIB::LOG2_FINITE_F128, "__log2f128_finite");
setLibcallName(RTLIB::LOG10_F128, "log10f128");
setLibcallName(RTLIB::LOG10_FINITE_F128, "__log10f128_finite");
setLibcallName(RTLIB::EXP_F128, "expf128");
setLibcallName(RTLIB::EXP_FINITE_F128, "__expf128_finite");
setLibcallName(RTLIB::EXP2_F128, "exp2f128");
setLibcallName(RTLIB::EXP2_FINITE_F128, "__exp2f128_finite");
setLibcallName(RTLIB::EXP10_F128, "exp10f128");
setLibcallName(RTLIB::SIN_F128, "sinf128");
setLibcallName(RTLIB::COS_F128, "cosf128");
setLibcallName(RTLIB::TAN_F128, "tanf128");
setLibcallName(RTLIB::SINCOS_F128, "sincosf128");
setLibcallName(RTLIB::ASIN_F128, "asinf128");
setLibcallName(RTLIB::ACOS_F128, "acosf128");
setLibcallName(RTLIB::ATAN_F128, "atanf128");
setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
setLibcallName(RTLIB::SINH_F128, "sinhf128");
setLibcallName(RTLIB::COSH_F128, "coshf128");
setLibcallName(RTLIB::TANH_F128, "tanhf128");
setLibcallName(RTLIB::POW_F128, "powf128");
setLibcallName(RTLIB::POW_FINITE_F128, "__powf128_finite");
setLibcallName(RTLIB::CEIL_F128, "ceilf128");
setLibcallName(RTLIB::TRUNC_F128, "truncf128");
setLibcallName(RTLIB::RINT_F128, "rintf128");
setLibcallName(RTLIB::NEARBYINT_F128, "nearbyintf128");
setLibcallName(RTLIB::ROUND_F128, "roundf128");
setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
setLibcallName(RTLIB::FLOOR_F128, "floorf128");
setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
setLibcallName(RTLIB::FMIN_F128, "fminf128");
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
setLibcallName(RTLIB::FMINIMUM_F128, "fminimumf128");
setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximumf128");
setLibcallName(RTLIB::FMINIMUM_NUM_F128, "fminimum_numf128");
setLibcallName(RTLIB::FMAXIMUM_NUM_F128, "fmaximum_numf128");
setLibcallName(RTLIB::LROUND_F128, "lroundf128");
setLibcallName(RTLIB::LLROUND_F128, "llroundf128");
setLibcallName(RTLIB::LRINT_F128, "lrintf128");
setLibcallName(RTLIB::LLRINT_F128, "llrintf128");
setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
setLibcallName(RTLIB::FREXP_F128, "frexpf128");
setLibcallName(RTLIB::MODF_F128, "modff128");
}
if (TT.isX86() && TT.isGNUEnvironment())
setLongDoubleIsF128Libm(*this, /*FiniteOnlyFuncs=*/true);

// For IEEE quad-precision libcall names, PPC uses "kf" instead of "tf".
if (TT.isPPC()) {
Expand Down Expand Up @@ -379,31 +393,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
setLibcallName(RTLIB::OGT_F128, "__gtkf2");
setLibcallName(RTLIB::UO_F128, "__unordkf2");

setLibcallName(RTLIB::LOG_F128, "logf128");
setLibcallName(RTLIB::LOG2_F128, "log2f128");
setLibcallName(RTLIB::LOG10_F128, "log10f128");
setLibcallName(RTLIB::EXP_F128, "expf128");
setLibcallName(RTLIB::EXP2_F128, "exp2f128");
setLibcallName(RTLIB::SIN_F128, "sinf128");
setLibcallName(RTLIB::COS_F128, "cosf128");
setLibcallName(RTLIB::SINCOS_F128, "sincosf128");
setLibcallName(RTLIB::POW_F128, "powf128");
setLibcallName(RTLIB::FMIN_F128, "fminf128");
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
setLibcallName(RTLIB::REM_F128, "fmodf128");
setLibcallName(RTLIB::SQRT_F128, "sqrtf128");
setLibcallName(RTLIB::CEIL_F128, "ceilf128");
setLibcallName(RTLIB::FLOOR_F128, "floorf128");
setLibcallName(RTLIB::TRUNC_F128, "truncf128");
setLibcallName(RTLIB::ROUND_F128, "roundf128");
setLibcallName(RTLIB::LROUND_F128, "lroundf128");
setLibcallName(RTLIB::LLROUND_F128, "llroundf128");
setLibcallName(RTLIB::RINT_F128, "rintf128");
setLibcallName(RTLIB::LRINT_F128, "lrintf128");
setLibcallName(RTLIB::LLRINT_F128, "llrintf128");
setLibcallName(RTLIB::NEARBYINT_F128, "nearbyintf128");
setLibcallName(RTLIB::FMA_F128, "fmaf128");
setLibcallName(RTLIB::FREXP_F128, "frexpf128");
// TODO: Do the finite only functions exist?
setLongDoubleIsF128Libm(*this, /*FiniteOnlyFuncs=*/false);

if (TT.isOSAIX()) {
bool isPPC64 = TT.isPPC64();
Expand Down
48 changes: 24 additions & 24 deletions llvm/test/CodeGen/PowerPC/f128-arith.ll
Original file line number Diff line number Diff line change
Expand Up @@ -1413,7 +1413,7 @@ define dso_local fp128 @acos_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl acosl
; CHECK-NEXT: bl acosf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1427,7 +1427,7 @@ define dso_local fp128 @acos_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl acosl
; CHECK-P8-NEXT: bl acosf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1445,7 +1445,7 @@ define dso_local fp128 @asin_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl asinl
; CHECK-NEXT: bl asinf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1459,7 +1459,7 @@ define dso_local fp128 @asin_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl asinl
; CHECK-P8-NEXT: bl asinf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1477,7 +1477,7 @@ define dso_local fp128 @atan_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl atanl
; CHECK-NEXT: bl atanf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1491,7 +1491,7 @@ define dso_local fp128 @atan_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl atanl
; CHECK-P8-NEXT: bl atanf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1509,7 +1509,7 @@ define dso_local fp128 @atan2_f128(fp128 %x, fp128 %y) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl atan2l
; CHECK-NEXT: bl atan2f128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1523,7 +1523,7 @@ define dso_local fp128 @atan2_f128(fp128 %x, fp128 %y) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl atan2l
; CHECK-P8-NEXT: bl atan2f128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand Down Expand Up @@ -1566,7 +1566,7 @@ define dso_local fp128 @cosh_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl coshl
; CHECK-NEXT: bl coshf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1580,7 +1580,7 @@ define dso_local fp128 @cosh_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl coshl
; CHECK-P8-NEXT: bl coshf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1598,7 +1598,7 @@ define dso_local fp128 @exp10_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl exp10l
; CHECK-NEXT: bl exp10f128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1612,7 +1612,7 @@ define dso_local fp128 @exp10_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl exp10l
; CHECK-P8-NEXT: bl exp10f128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand Down Expand Up @@ -1655,7 +1655,7 @@ define dso_local fp128 @ldexp_f128(fp128 %x, i32 %y) {
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: extsw r5, r5
; CHECK-NEXT: bl ldexpl
; CHECK-NEXT: bl ldexpf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1670,7 +1670,7 @@ define dso_local fp128 @ldexp_f128(fp128 %x, i32 %y) {
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: extsw r5, r5
; CHECK-P8-NEXT: bl ldexpl
; CHECK-P8-NEXT: bl ldexpf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1689,7 +1689,7 @@ define dso_local { fp128, fp128 } @modf_f128(fp128 %x) {
; CHECK-NEXT: .cfi_def_cfa_offset 48
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: addi r5, r1, 32
; CHECK-NEXT: bl modfl
; CHECK-NEXT: bl modff128
; CHECK-NEXT: nop
; CHECK-NEXT: lxv v3, 32(r1)
; CHECK-NEXT: addi r1, r1, 48
Expand All @@ -1708,7 +1708,7 @@ define dso_local { fp128, fp128 } @modf_f128(fp128 %x) {
; CHECK-P8-NEXT: addi r30, r1, 32
; CHECK-P8-NEXT: std r0, 80(r1)
; CHECK-P8-NEXT: mr r5, r30
; CHECK-P8-NEXT: bl modfl
; CHECK-P8-NEXT: bl modff128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: lxvd2x vs0, 0, r30
; CHECK-P8-NEXT: xxswapd v3, vs0
Expand All @@ -1729,7 +1729,7 @@ define dso_local fp128 @roundeven_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl roundevenl
; CHECK-NEXT: bl roundevenf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1743,7 +1743,7 @@ define dso_local fp128 @roundeven_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl roundevenl
; CHECK-P8-NEXT: bl roundevenf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1761,7 +1761,7 @@ define dso_local fp128 @sinh_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl sinhl
; CHECK-NEXT: bl sinhf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1775,7 +1775,7 @@ define dso_local fp128 @sinh_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl sinhl
; CHECK-P8-NEXT: bl sinhf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1793,7 +1793,7 @@ define dso_local fp128 @tanh_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl tanhl
; CHECK-NEXT: bl tanhf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1807,7 +1807,7 @@ define dso_local fp128 @tanh_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl tanhl
; CHECK-P8-NEXT: bl tanhf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand All @@ -1825,7 +1825,7 @@ define dso_local fp128 @tan_f128(fp128 %x) {
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: bl tanl
; CHECK-NEXT: bl tanf128
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
Expand All @@ -1839,7 +1839,7 @@ define dso_local fp128 @tan_f128(fp128 %x) {
; CHECK-P8-NEXT: std r0, 48(r1)
; CHECK-P8-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-NEXT: .cfi_offset lr, 16
; CHECK-P8-NEXT: bl tanl
; CHECK-P8-NEXT: bl tanf128
; CHECK-P8-NEXT: nop
; CHECK-P8-NEXT: addi r1, r1, 32
; CHECK-P8-NEXT: ld r0, 16(r1)
Expand Down
Loading