aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2024-05-16 09:09:02 +0200
committerGitHub <noreply@github.com>2024-05-16 09:09:02 +0200
commitce1ce5d30c7696fddcb0c040909a9b786fe7cb06 (patch)
treeae1d95bf6814ab7ec75ab3b1519351c965345e9d /llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
parentca1f0d41b8c5f42ca6cdcbdf9732bf4df2fcc80f (diff)
downloadllvm-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.cpp11
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() &&