diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2023-04-27 17:58:04 -0400 |
---|---|---|
committer | Matt Arsenault <arsenm2@gmail.com> | 2023-09-13 08:38:48 +0300 |
commit | 00061843bd93b7dd9f83e1448e569e193c22ccf8 (patch) | |
tree | d4292e807fb12f9f93239b062f9e2149f1485a5b /llvm/lib/Analysis/ConstantFolding.cpp | |
parent | ca8d2533c79ccfbcb2de4090f0d48914a60b0a3d (diff) | |
download | llvm-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.cpp | 6 |
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 = |