summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC
diff options
context:
space:
mode:
authorNemanja Ivanovic <nemanja.i.ibm@gmail.com>2020-01-02 13:37:34 -0600
committerNemanja Ivanovic <nemanja.i.ibm@gmail.com>2020-01-02 13:45:54 -0600
commit781b78a3610886e265f08d6de625bfe19e3dd8cf (patch)
treee4128feaccd2b6b1fea367cbbc66a840ac2ce554 /llvm/lib/Target/PowerPC
parentaf340ae19f4bb109c63ca41663c97c45a39f512e (diff)
downloadbcm5719-llvm-781b78a3610886e265f08d6de625bfe19e3dd8cf.tar.gz
bcm5719-llvm-781b78a3610886e265f08d6de625bfe19e3dd8cf.zip
[PowerPC] Only legalize FNEARBYINT with unsafe fp math
Commit 0f0330a78709 legalized these nodes on PPC without consideration of unsafe math which means that we get inexact exceptions raised for nearbyint. Since this doesn't conform to the standard, switch this legalization to depend on unsafe fp math.
Diffstat (limited to 'llvm/lib/Target/PowerPC')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelLowering.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 9fab29dded7..df2234eea28 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -782,17 +782,22 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
}
setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f64, Legal);
+ // The nearbyint variants are not allowed to raise the inexact exception
+ // so we can only code-gen them with unsafe math.
+ if (TM.Options.UnsafeFPMath) {
+ setOperationAction(ISD::FNEARBYINT, MVT::f64, Legal);
+ setOperationAction(ISD::FNEARBYINT, MVT::f32, Legal);
+ }
+
setOperationAction(ISD::FFLOOR, MVT::v2f64, Legal);
setOperationAction(ISD::FCEIL, MVT::v2f64, Legal);
setOperationAction(ISD::FTRUNC, MVT::v2f64, Legal);
setOperationAction(ISD::FNEARBYINT, MVT::v2f64, Legal);
setOperationAction(ISD::FROUND, MVT::v2f64, Legal);
- setOperationAction(ISD::FNEARBYINT, MVT::f64, Legal);
setOperationAction(ISD::FROUND, MVT::f64, Legal);
setOperationAction(ISD::FNEARBYINT, MVT::v4f32, Legal);
setOperationAction(ISD::FROUND, MVT::v4f32, Legal);
- setOperationAction(ISD::FNEARBYINT, MVT::f32, Legal);
setOperationAction(ISD::FROUND, MVT::f32, Legal);
setOperationAction(ISD::MUL, MVT::v2f64, Legal);
OpenPOWER on IntegriCloud