summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-25 04:54:34 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-25 04:54:34 +0000
commit8a27aee6ae8ec36b83d8b50f858135a45842d083 (patch)
treebe4b5f8eafd0cd52f30d9f3c132ce580f32392b4 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
parent22921338b12e6a1ae9c55061cd619c72d3bc7e76 (diff)
downloadbcm5719-llvm-8a27aee6ae8ec36b83d8b50f858135a45842d083.tar.gz
bcm5719-llvm-8a27aee6ae8ec36b83d8b50f858135a45842d083.zip
DAGCombiner: Allow negating ConstantFP after legalize
llvm-svn: 293019
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 60038e2924c..ce2e52b7128 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -607,10 +607,16 @@ static char isNegatibleForFree(SDValue Op, bool LegalOperations,
switch (Op.getOpcode()) {
default: return false;
- case ISD::ConstantFP:
- // Don't invert constant FP values after legalize. The negated constant
- // isn't necessarily legal.
- return LegalOperations ? 0 : 1;
+ case ISD::ConstantFP: {
+ if (!LegalOperations)
+ return 1;
+
+ // Don't invert constant FP values after legalization unless the target says
+ // the negated constant is legal.
+ EVT VT = Op.getValueType();
+ return TLI.isOperationLegal(ISD::ConstantFP, VT) ||
+ TLI.isFPImmLegal(neg(cast<ConstantFPSDNode>(Op)->getValueAPF()), VT);
+ }
case ISD::FADD:
// FIXME: determine better conditions for this xform.
if (!Options->UnsafeFPMath) return 0;
OpenPOWER on IntegriCloud