diff options
author | c8ef <c8ef@outlook.com> | 2024-10-10 07:56:16 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-10 07:56:16 +0800 |
commit | 923566a67de39a00eb6fc5cabbad307a72aa338e (patch) | |
tree | b9ac2aa462719c784d092c332629e81ed841aa82 /llvm/lib/Analysis/ConstantFolding.cpp | |
parent | 61a46780d10c8f4e12c9b5496f5ca3f2cc7fba66 (diff) | |
download | llvm-923566a67de39a00eb6fc5cabbad307a72aa338e.zip llvm-923566a67de39a00eb6fc5cabbad307a72aa338e.tar.gz llvm-923566a67de39a00eb6fc5cabbad307a72aa338e.tar.bz2 |
[ConstantFold] Fold `logb` and `logbf` when the input parameter is a constant value. (#111232)
This patch adds support for constant folding for the `logb` and `logbf`
libc functions.
Diffstat (limited to 'llvm/lib/Analysis/ConstantFolding.cpp')
-rw-r--r-- | llvm/lib/Analysis/ConstantFolding.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index a6ef271..102762d 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -1677,9 +1677,9 @@ bool llvm::canConstantFoldCallTo(const CallBase *Call, const Function *F) { Name == "floor" || Name == "floorf" || Name == "fmod" || Name == "fmodf"; case 'l': - return Name == "log" || Name == "logf" || Name == "log2" || - Name == "log2f" || Name == "log10" || Name == "log10f" || - Name == "logl"; + return Name == "log" || Name == "logf" || Name == "logl" || + Name == "log2" || Name == "log2f" || Name == "log10" || + Name == "log10f" || Name == "logb" || Name == "logbf"; case 'n': return Name == "nearbyint" || Name == "nearbyintf"; case 'p': @@ -2389,6 +2389,11 @@ static Constant *ConstantFoldScalarCall1(StringRef Name, // TODO: What about hosts that lack a C99 library? return ConstantFoldFP(log10, APF, Ty); break; + case LibFunc_logb: + case LibFunc_logbf: + if (!APF.isZero() && TLI->has(Func)) + return ConstantFoldFP(logb, APF, Ty); + break; case LibFunc_logl: return nullptr; case LibFunc_nearbyint: |