aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/ConstantFold.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2022-05-05 15:50:33 +0200
committerBenjamin Kramer <benny.kra@googlemail.com>2022-05-05 15:52:19 +0200
commit08b20f20d2854377009822dfe597c78a4bf18de8 (patch)
tree049e81e89c97608887fcf40d0c23878bbd013a45 /llvm/lib/IR/ConstantFold.cpp
parent47bdea3f7eb4bb70288e69635d73807c5d03dacc (diff)
downloadllvm-08b20f20d2854377009822dfe597c78a4bf18de8.zip
llvm-08b20f20d2854377009822dfe597c78a4bf18de8.tar.gz
llvm-08b20f20d2854377009822dfe597c78a4bf18de8.tar.bz2
[ConstantFold] Use getFltSemantics instead of manually checking the type
Simplifies the code and makes fpext/fptrunc constant folding not crash when the result is bf16.
Diffstat (limited to 'llvm/lib/IR/ConstantFold.cpp')
-rw-r--r--llvm/lib/IR/ConstantFold.cpp10
1 files changed, 2 insertions, 8 deletions
diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp
index 9cbbe2b..b032a3f 100644
--- a/llvm/lib/IR/ConstantFold.cpp
+++ b/llvm/lib/IR/ConstantFold.cpp
@@ -435,14 +435,8 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, Constant *V,
if (ConstantFP *FPC = dyn_cast<ConstantFP>(V)) {
bool ignored;
APFloat Val = FPC->getValueAPF();
- Val.convert(DestTy->isHalfTy() ? APFloat::IEEEhalf() :
- DestTy->isFloatTy() ? APFloat::IEEEsingle() :
- DestTy->isDoubleTy() ? APFloat::IEEEdouble() :
- DestTy->isX86_FP80Ty() ? APFloat::x87DoubleExtended() :
- DestTy->isFP128Ty() ? APFloat::IEEEquad() :
- DestTy->isPPC_FP128Ty() ? APFloat::PPCDoubleDouble() :
- APFloat::Bogus(),
- APFloat::rmNearestTiesToEven, &ignored);
+ Val.convert(DestTy->getFltSemantics(), APFloat::rmNearestTiesToEven,
+ &ignored);
return ConstantFP::get(V->getContext(), Val);
}
return nullptr; // Can't fold.