[PATCH] D59500: [ConstantFolding] Fix GetConstantFoldFPValue to avoid cast overflow.
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 22 09:37:40 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL356781: [ConstantFolding] Fix GetConstantFoldFPValue to avoid cast overflow. (authored by bixia1, committed by ).
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D59500/new/
https://reviews.llvm.org/D59500
Files:
llvm/trunk/lib/Analysis/ConstantFolding.cpp
llvm/trunk/test/Transforms/ConstProp/calls.ll
Index: llvm/trunk/test/Transforms/ConstProp/calls.ll
===================================================================
--- llvm/trunk/test/Transforms/ConstProp/calls.ll
+++ llvm/trunk/test/Transforms/ConstProp/calls.ll
@@ -193,4 +193,14 @@
ret double %0
}
+define float @test_intrinsic_pow_f32_overflow() nounwind uwtable ssp {
+entry:
+; CHECK-LABEL: @test_intrinsic_pow_f32_overflow(
+; CHECK-NOT: call
+; CHECK: ret float 0x7FF0000000000000
+ %0 = call float @llvm.pow.f32(float 40.0, float 50.0)
+ ret float %0
+}
+
declare double @llvm.pow.f64(double, double) nounwind readonly
+declare float @llvm.pow.f32(float, float) nounwind readonly
Index: llvm/trunk/lib/Analysis/ConstantFolding.cpp
===================================================================
--- llvm/trunk/lib/Analysis/ConstantFolding.cpp
+++ llvm/trunk/lib/Analysis/ConstantFolding.cpp
@@ -1517,14 +1517,12 @@
namespace {
Constant *GetConstantFoldFPValue(double V, Type *Ty) {
- if (Ty->isHalfTy()) {
+ if (Ty->isHalfTy() || Ty->isFloatTy()) {
APFloat APF(V);
bool unused;
- APF.convert(APFloat::IEEEhalf(), APFloat::rmNearestTiesToEven, &unused);
+ APF.convert(Ty->getFltSemantics(), APFloat::rmNearestTiesToEven, &unused);
return ConstantFP::get(Ty->getContext(), APF);
}
- if (Ty->isFloatTy())
- return ConstantFP::get(Ty->getContext(), APFloat((float)V));
if (Ty->isDoubleTy())
return ConstantFP::get(Ty->getContext(), APFloat(V));
llvm_unreachable("Can only constant fold half/float/double");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59500.191898.patch
Type: text/x-patch
Size: 1527 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190322/8ba1cbcb/attachment.bin>
More information about the llvm-commits
mailing list