diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2024-05-16 09:09:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-16 09:09:02 +0200 |
commit | ce1ce5d30c7696fddcb0c040909a9b786fe7cb06 (patch) | |
tree | ae1d95bf6814ab7ec75ab3b1519351c965345e9d /llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp | |
parent | ca1f0d41b8c5f42ca6cdcbdf9732bf4df2fcc80f (diff) | |
download | llvm-ce1ce5d30c7696fddcb0c040909a9b786fe7cb06.zip llvm-ce1ce5d30c7696fddcb0c040909a9b786fe7cb06.tar.gz llvm-ce1ce5d30c7696fddcb0c040909a9b786fe7cb06.tar.bz2 |
InstCombine: Try to use exp10 intrinsic instead of libcall (#92287)
Addresses old TODO about the exp10 intrinsic not existing.
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index 9cb8e20..69b0f78 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -2134,12 +2134,19 @@ Value *LibCallSimplifier::replacePowWithExp(CallInst *Pow, IRBuilderBase &B) { } // pow(10.0, x) -> exp10(x) - // TODO: There is no exp10() intrinsic yet, but some day there shall be one. if (match(Base, m_SpecificFP(10.0)) && - hasFloatFn(M, TLI, Ty, LibFunc_exp10, LibFunc_exp10f, LibFunc_exp10l)) + hasFloatFn(M, TLI, Ty, LibFunc_exp10, LibFunc_exp10f, LibFunc_exp10l)) { + + if (Pow->doesNotAccessMemory()) { + CallInst *NewExp10 = + B.CreateIntrinsic(Intrinsic::exp10, {Ty}, {Expo}, Pow, "exp10"); + return copyFlags(*Pow, NewExp10); + } + return copyFlags(*Pow, emitUnaryFloatFnCall(Expo, TLI, LibFunc_exp10, LibFunc_exp10f, LibFunc_exp10l, B, NoAttrs)); + } // pow(x, y) -> exp2(log2(x) * y) if (Pow->hasApproxFunc() && Pow->hasNoNaNs() && BaseF->isFiniteNonZero() && |