mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 22:28:18 +00:00
[SimplifyLibCalls] Enable double to float shrinking for copysign
rdar://19049359 Differential Revision: http://reviews.llvm.org/D6495 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223269 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2177,6 +2177,7 @@ Value *LibCallSimplifier::optimizeCall(CallInst *CI) {
|
|||||||
if (UnsafeFPShrink && hasFloatVersion(FuncName))
|
if (UnsafeFPShrink && hasFloatVersion(FuncName))
|
||||||
return optimizeUnaryDoubleFP(CI, Builder, true);
|
return optimizeUnaryDoubleFP(CI, Builder, true);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
case LibFunc::copysign:
|
||||||
case LibFunc::fmin:
|
case LibFunc::fmin:
|
||||||
case LibFunc::fmax:
|
case LibFunc::fmax:
|
||||||
if (hasFloatVersion(FuncName))
|
if (hasFloatVersion(FuncName))
|
||||||
|
@@ -222,8 +222,22 @@ define i32 @test18(float %x, float %y, float %z) nounwind uwtable {
|
|||||||
; CHECK-NEXT: fcmp oeq float %fmaxf, %z
|
; CHECK-NEXT: fcmp oeq float %fmaxf, %z
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define i32 @test19(float %x, float %y, float %z) nounwind uwtable {
|
||||||
|
%1 = fpext float %x to double
|
||||||
|
%2 = fpext float %y to double
|
||||||
|
%3 = call double @copysign(double %1, double %2) nounwind
|
||||||
|
%4 = fpext float %z to double
|
||||||
|
%5 = fcmp oeq double %3, %4
|
||||||
|
%6 = zext i1 %5 to i32
|
||||||
|
ret i32 %6
|
||||||
|
; CHECK-LABEL: @test19(
|
||||||
|
; CHECK-NEXT: %copysignf = call float @copysignf(float %x, float %y)
|
||||||
|
; CHECK-NEXT: fcmp oeq float %copysignf, %z
|
||||||
|
}
|
||||||
|
|
||||||
declare double @fabs(double) nounwind readnone
|
declare double @fabs(double) nounwind readnone
|
||||||
declare double @ceil(double) nounwind readnone
|
declare double @ceil(double) nounwind readnone
|
||||||
|
declare double @copysign(double, double) nounwind readnone
|
||||||
declare double @floor(double) nounwind readnone
|
declare double @floor(double) nounwind readnone
|
||||||
declare double @nearbyint(double) nounwind readnone
|
declare double @nearbyint(double) nounwind readnone
|
||||||
declare double @rint(double) nounwind readnone
|
declare double @rint(double) nounwind readnone
|
||||||
|
Reference in New Issue
Block a user