diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-25 04:54:34 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-25 04:54:34 +0000 |
commit | 8a27aee6ae8ec36b83d8b50f858135a45842d083 (patch) | |
tree | be4b5f8eafd0cd52f30d9f3c132ce580f32392b4 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | 22921338b12e6a1ae9c55061cd619c72d3bc7e76 (diff) | |
download | bcm5719-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.cpp | 14 |
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; |