[llvm] r372315 - [DAG] Add SelectionDAG::MaxRecursionDepth constant
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 19 05:58:43 PDT 2019
Author: rksimon
Date: Thu Sep 19 05:58:43 2019
New Revision: 372315
URL: http://llvm.org/viewvc/llvm-project?rev=372315&view=rev
Log:
[DAG] Add SelectionDAG::MaxRecursionDepth constant
As commented on D67557 we have a lot of uses of depth checks all using magic numbers.
This patch adds the SelectionDAG::MaxRecursionDepth constant and moves over some general cases to use this explicitly.
Differential Revision: https://reviews.llvm.org/D67711
Modified:
llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=372315&r1=372314&r2=372315&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Thu Sep 19 05:58:43 2019
@@ -388,7 +388,11 @@ private:
Node->OperandList = nullptr;
}
void CreateTopologicalOrder(std::vector<SDNode*>& Order);
+
public:
+ // Maximum depth for recursive analysis such as computeKnownBits, etc.
+ static constexpr unsigned MaxRecursionDepth = 6;
+
explicit SelectionDAG(const TargetMachine &TM, CodeGenOpt::Level);
SelectionDAG(const SelectionDAG &) = delete;
SelectionDAG &operator=(const SelectionDAG &) = delete;
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=372315&r1=372314&r2=372315&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Sep 19 05:58:43 2019
@@ -806,7 +806,7 @@ static char isNegatibleForFree(SDValue O
return 0;
// Don't recurse exponentially.
- if (Depth > 6)
+ if (Depth > SelectionDAG::MaxRecursionDepth)
return 0;
switch (Op.getOpcode()) {
@@ -913,7 +913,8 @@ static SDValue GetNegatedExpression(SDVa
if (Op.getOpcode() == ISD::FNEG)
return Op.getOperand(0);
- assert(Depth <= 6 && "GetNegatedExpression doesn't match isNegatibleForFree");
+ assert(Depth <= SelectionDAG::MaxRecursionDepth &&
+ "GetNegatedExpression doesn't match isNegatibleForFree");
const TargetOptions &Options = DAG.getTarget().Options;
const SDNodeFlags Flags = Op->getFlags();
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=372315&r1=372314&r2=372315&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Thu Sep 19 05:58:43 2019
@@ -2422,7 +2422,7 @@ KnownBits SelectionDAG::computeKnownBits
return Known;
}
- if (Depth >= 6)
+ if (Depth >= MaxRecursionDepth)
return Known; // Limit search depth.
KnownBits Known2;
@@ -3412,7 +3412,7 @@ unsigned SelectionDAG::ComputeNumSignBit
return Val.getNumSignBits();
}
- if (Depth >= 6)
+ if (Depth >= MaxRecursionDepth)
return 1; // Limit search depth.
if (!DemandedElts)
@@ -3973,7 +3973,7 @@ bool SelectionDAG::isKnownNeverNaN(SDVal
if (getTarget().Options.NoNaNsFPMath || Op->getFlags().hasNoNaNs())
return true;
- if (Depth >= 6)
+ if (Depth >= MaxRecursionDepth)
return false; // Limit search depth.
// TODO: Handle vectors.
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=372315&r1=372314&r2=372315&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Thu Sep 19 05:58:43 2019
@@ -585,7 +585,7 @@ SDValue TargetLowering::SimplifyMultiple
SDValue Op, const APInt &DemandedBits, const APInt &DemandedElts,
SelectionDAG &DAG, unsigned Depth) const {
// Limit search depth.
- if (Depth >= 6)
+ if (Depth >= SelectionDAG::MaxRecursionDepth)
return SDValue();
// Ignore UNDEFs.
@@ -798,7 +798,8 @@ bool TargetLowering::SimplifyDemandedBit
} else if (OriginalDemandedBits == 0 || OriginalDemandedElts == 0) {
// Not demanding any bits/elts from Op.
return TLO.CombineTo(Op, TLO.DAG.getUNDEF(VT));
- } else if (Depth >= 6) { // Limit search depth.
+ } else if (Depth >= SelectionDAG::MaxRecursionDepth) {
+ // Limit search depth.
return false;
}
@@ -2107,7 +2108,7 @@ bool TargetLowering::SimplifyDemandedVec
}
// Limit search depth.
- if (Depth >= 6)
+ if (Depth >= SelectionDAG::MaxRecursionDepth)
return false;
SDLoc DL(Op);
Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp?rev=372315&r1=372314&r2=372315&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp Thu Sep 19 05:58:43 2019
@@ -2053,7 +2053,7 @@ static void getUsefulBitsForUse(SDNode *
}
static void getUsefulBits(SDValue Op, APInt &UsefulBits, unsigned Depth) {
- if (Depth >= 6)
+ if (Depth >= SelectionDAG::MaxRecursionDepth)
return;
// Initialize UsefulBits
if (!Depth) {
More information about the llvm-commits
mailing list