aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ConstantFolding.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-04-27 17:58:04 -0400
committerMatt Arsenault <arsenm2@gmail.com>2023-09-13 08:38:48 +0300
commit00061843bd93b7dd9f83e1448e569e193c22ccf8 (patch)
treed4292e807fb12f9f93239b062f9e2149f1485a5b /llvm/lib/Analysis/ConstantFolding.cpp
parentca8d2533c79ccfbcb2de4090f0d48914a60b0a3d (diff)
downloadllvm-00061843bd93b7dd9f83e1448e569e193c22ccf8.zip
llvm-00061843bd93b7dd9f83e1448e569e193c22ccf8.tar.gz
llvm-00061843bd93b7dd9f83e1448e569e193c22ccf8.tar.bz2
InstSimplify: Simplifications for ldexp
Ported from old amdgcn intrinsic which will soon be deleted. https://reviews.llvm.org/D149587
Diffstat (limited to 'llvm/lib/Analysis/ConstantFolding.cpp')
-rw-r--r--llvm/lib/Analysis/ConstantFolding.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index ac846ce..f12a5dd 100644
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -1548,6 +1548,7 @@ bool llvm::canConstantFoldCallTo(const CallBase *Call, const Function *F) {
case Intrinsic::cos:
case Intrinsic::pow:
case Intrinsic::powi:
+ case Intrinsic::ldexp:
case Intrinsic::fma:
case Intrinsic::fmuladd:
case Intrinsic::frexp:
@@ -2627,6 +2628,11 @@ static Constant *ConstantFoldScalarCall2(StringRef Name,
}
} else if (auto *Op2C = dyn_cast<ConstantInt>(Operands[1])) {
switch (IntrinsicID) {
+ case Intrinsic::ldexp: {
+ return ConstantFP::get(
+ Ty->getContext(),
+ scalbn(Op1V, Op2C->getSExtValue(), APFloat::rmNearestTiesToEven));
+ }
case Intrinsic::is_fpclass: {
FPClassTest Mask = static_cast<FPClassTest>(Op2C->getZExtValue());
bool Result =