[llvm] r339298 - [DAGCombiner] move fadd simplification ahead of other folds
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 8 15:46:31 PDT 2018
Author: spatel
Date: Wed Aug 8 15:46:30 2018
New Revision: 339298
URL: http://llvm.org/viewvc/llvm-project?rev=339298&view=rev
Log:
[DAGCombiner] move fadd simplification ahead of other folds
I don't know if it's possible to expose this diff in a test,
but we should always try simplifications (no new nodes created)
before more complicated transforms for efficiency (similar to
what we do in IR).
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=339298&r1=339297&r2=339298&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed Aug 8 15:46:30 2018
@@ -10745,6 +10745,12 @@ SDValue DAGCombiner::visitFADD(SDNode *N
if (N0CFP && !N1CFP)
return DAG.getNode(ISD::FADD, DL, VT, N1, N0, Flags);
+ // N0 + -0.0 --> N0 (also allowed with +0.0 and fast-math)
+ ConstantFPSDNode *N1C = isConstOrConstSplatFP(N1);
+ if (N1C && N1C->isZero())
+ if (N1C->isNegative() || Options.UnsafeFPMath || Flags.hasNoSignedZeros())
+ return N0;
+
if (SDValue NewSel = foldBinOpIntoSelect(N))
return NewSel;
@@ -10770,15 +10776,6 @@ SDValue DAGCombiner::visitFADD(SDNode *N
return DAG.getNode(ISD::FSUB, DL, VT, N1IsFMul ? N0 : N1, Add, Flags);
}
- ConstantFPSDNode *N1C = isConstOrConstSplatFP(N1);
- if (N1C && N1C->isZero()) {
- if (N1C->isNegative() || Options.UnsafeFPMath ||
- Flags.hasNoSignedZeros()) {
- // fold (fadd A, 0) -> A
- return N0;
- }
- }
-
// No FP constant should be created after legalization as Instruction
// Selection pass has a hard time dealing with FP constants.
bool AllowNewConst = (Level < AfterLegalizeDAG);
More information about the llvm-commits
mailing list