diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-08-08 04:31:34 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-08-08 04:31:34 +0000 |
commit | 05a4d2642b415e3332651733015b656bc3c7b9bc (patch) | |
tree | dc98d38fad5211ccd39659ff641addbed87c2e36 /test/CodeGen/PowerPC/rounding-ops.ll | |
parent | 9706d43b56e16eb3029314e02c499305284e99f1 (diff) | |
download | external_llvm-05a4d2642b415e3332651733015b656bc3c7b9bc.zip external_llvm-05a4d2642b415e3332651733015b656bc3c7b9bc.tar.gz external_llvm-05a4d2642b415e3332651733015b656bc3c7b9bc.tar.bz2 |
PPC: Map frin to round() not nearbyint() and rint()
Making use of the recently-added ISD::FROUND, which allows for custom lowering
of round(), the PPC backend will now map frin to round(). Previously, we had
been using frin to lower nearbyint() (and rint() via some custom lowering to
handle the extra fenv flags requirements), but only in fast-math mode because
frin does not tie-to-even. Several users had complained about this behavior,
and this new mapping of frin to round is certainly more appropriate (and does
not require fast-math mode).
In effect, this reverts r178362 (and part of r178337, replacing the nearbyint
mapping with the round mapping).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187960 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/rounding-ops.ll')
-rw-r--r-- | test/CodeGen/PowerPC/rounding-ops.ll | 75 |
1 files changed, 6 insertions, 69 deletions
diff --git a/test/CodeGen/PowerPC/rounding-ops.ll b/test/CodeGen/PowerPC/rounding-ops.ll index 2c02900..bf0a641 100644 --- a/test/CodeGen/PowerPC/rounding-ops.ll +++ b/test/CodeGen/PowerPC/rounding-ops.ll @@ -1,5 +1,4 @@ ; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s -; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -enable-unsafe-fp-math | FileCheck -check-prefix=CHECK-FM %s target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64" target triple = "powerpc64-unknown-linux-gnu" @@ -9,9 +8,6 @@ define float @test1(float %x) nounwind { ; CHECK-LABEL: test1: ; CHECK: frim 1, 1 - -; CHECK-FM-LABEL: test1: -; CHECK-FM: frim 1, 1 } declare float @floorf(float) nounwind readnone @@ -22,38 +18,29 @@ define double @test2(double %x) nounwind { ; CHECK-LABEL: test2: ; CHECK: frim 1, 1 - -; CHECK-FM-LABEL: test2: -; CHECK-FM: frim 1, 1 } declare double @floor(double) nounwind readnone define float @test3(float %x) nounwind { - %call = tail call float @nearbyintf(float %x) nounwind readnone + %call = tail call float @roundf(float %x) nounwind readnone ret float %call ; CHECK-LABEL: test3: -; CHECK-NOT: frin - -; CHECK-FM-LABEL: test3: -; CHECK-FM: frin 1, 1 +; CHECK: frin 1, 1 } -declare float @nearbyintf(float) nounwind readnone +declare float @roundf(float) nounwind readnone define double @test4(double %x) nounwind { - %call = tail call double @nearbyint(double %x) nounwind readnone + %call = tail call double @round(double %x) nounwind readnone ret double %call ; CHECK-LABEL: test4: -; CHECK-NOT: frin - -; CHECK-FM-LABEL: test4: -; CHECK-FM: frin 1, 1 +; CHECK: frin 1, 1 } -declare double @nearbyint(double) nounwind readnone +declare double @round(double) nounwind readnone define float @test5(float %x) nounwind { %call = tail call float @ceilf(float %x) nounwind readnone @@ -61,9 +48,6 @@ define float @test5(float %x) nounwind { ; CHECK-LABEL: test5: ; CHECK: frip 1, 1 - -; CHECK-FM-LABEL: test5: -; CHECK-FM: frip 1, 1 } declare float @ceilf(float) nounwind readnone @@ -74,9 +58,6 @@ define double @test6(double %x) nounwind { ; CHECK-LABEL: test6: ; CHECK: frip 1, 1 - -; CHECK-FM-LABEL: test6: -; CHECK-FM: frip 1, 1 } declare double @ceil(double) nounwind readnone @@ -87,9 +68,6 @@ define float @test9(float %x) nounwind { ; CHECK-LABEL: test9: ; CHECK: friz 1, 1 - -; CHECK-FM-LABEL: test9: -; CHECK-FM: friz 1, 1 } declare float @truncf(float) nounwind readnone @@ -100,48 +78,7 @@ define double @test10(double %x) nounwind { ; CHECK-LABEL: test10: ; CHECK: friz 1, 1 - -; CHECK-FM-LABEL: test10: -; CHECK-FM: friz 1, 1 } declare double @trunc(double) nounwind readnone -define void @test11(float %x, float* %y) nounwind { - %call = tail call float @rintf(float %x) nounwind readnone - store float %call, float* %y - ret void - -; CHECK-LABEL: test11: -; CHECK-NOT: frin - -; CHECK-FM-LABEL: test11: -; CHECK-FM: frin [[R2:[0-9]+]], [[R1:[0-9]+]] -; CHECK-FM: fcmpu [[CR:[0-9]+]], [[R2]], [[R1]] -; CHECK-FM: beq [[CR]], .LBB[[BB:[0-9]+]]_2 -; CHECK-FM: mtfsb1 6 -; CHECK-FM: .LBB[[BB]]_2: -; CHECK-FM: blr -} - -declare float @rintf(float) nounwind readnone - -define void @test12(double %x, double* %y) nounwind { - %call = tail call double @rint(double %x) nounwind readnone - store double %call, double* %y - ret void - -; CHECK-LABEL: test12: -; CHECK-NOT: frin - -; CHECK-FM-LABEL: test12: -; CHECK-FM: frin [[R2:[0-9]+]], [[R1:[0-9]+]] -; CHECK-FM: fcmpu [[CR:[0-9]+]], [[R2]], [[R1]] -; CHECK-FM: beq [[CR]], .LBB[[BB:[0-9]+]]_2 -; CHECK-FM: mtfsb1 6 -; CHECK-FM: .LBB[[BB]]_2: -; CHECK-FM: blr -} - -declare double @rint(double) nounwind readnone - |