llvm/test/CodeGen/PowerPC/rounding-ops.ll
Hal Finkel 05a4d2642b 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
2013-08-08 04:31:34 +00:00

85 lines
1.9 KiB
LLVM

; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %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"
define float @test1(float %x) nounwind {
%call = tail call float @floorf(float %x) nounwind readnone
ret float %call
; CHECK-LABEL: test1:
; CHECK: frim 1, 1
}
declare float @floorf(float) nounwind readnone
define double @test2(double %x) nounwind {
%call = tail call double @floor(double %x) nounwind readnone
ret double %call
; CHECK-LABEL: test2:
; CHECK: frim 1, 1
}
declare double @floor(double) nounwind readnone
define float @test3(float %x) nounwind {
%call = tail call float @roundf(float %x) nounwind readnone
ret float %call
; CHECK-LABEL: test3:
; CHECK: frin 1, 1
}
declare float @roundf(float) nounwind readnone
define double @test4(double %x) nounwind {
%call = tail call double @round(double %x) nounwind readnone
ret double %call
; CHECK-LABEL: test4:
; CHECK: frin 1, 1
}
declare double @round(double) nounwind readnone
define float @test5(float %x) nounwind {
%call = tail call float @ceilf(float %x) nounwind readnone
ret float %call
; CHECK-LABEL: test5:
; CHECK: frip 1, 1
}
declare float @ceilf(float) nounwind readnone
define double @test6(double %x) nounwind {
%call = tail call double @ceil(double %x) nounwind readnone
ret double %call
; CHECK-LABEL: test6:
; CHECK: frip 1, 1
}
declare double @ceil(double) nounwind readnone
define float @test9(float %x) nounwind {
%call = tail call float @truncf(float %x) nounwind readnone
ret float %call
; CHECK-LABEL: test9:
; CHECK: friz 1, 1
}
declare float @truncf(float) nounwind readnone
define double @test10(double %x) nounwind {
%call = tail call double @trunc(double %x) nounwind readnone
ret double %call
; CHECK-LABEL: test10:
; CHECK: friz 1, 1
}
declare double @trunc(double) nounwind readnone