mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[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 llvm-svn: 372315
This commit is contained in:
parent
230a0cd001
commit
91e656c4fc
@ -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;
|
||||
|
@ -806,7 +806,7 @@ static char isNegatibleForFree(SDValue Op, bool LegalOperations,
|
||||
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(SDValue Op, SelectionDAG &DAG,
|
||||
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();
|
||||
|
||||
|
@ -2422,7 +2422,7 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
|
||||
return Known;
|
||||
}
|
||||
|
||||
if (Depth >= 6)
|
||||
if (Depth >= MaxRecursionDepth)
|
||||
return Known; // Limit search depth.
|
||||
|
||||
KnownBits Known2;
|
||||
@ -3412,7 +3412,7 @@ unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, const APInt &DemandedElts,
|
||||
return Val.getNumSignBits();
|
||||
}
|
||||
|
||||
if (Depth >= 6)
|
||||
if (Depth >= MaxRecursionDepth)
|
||||
return 1; // Limit search depth.
|
||||
|
||||
if (!DemandedElts)
|
||||
@ -3973,7 +3973,7 @@ bool SelectionDAG::isKnownNeverNaN(SDValue Op, bool SNaN, unsigned Depth) const
|
||||
if (getTarget().Options.NoNaNsFPMath || Op->getFlags().hasNoNaNs())
|
||||
return true;
|
||||
|
||||
if (Depth >= 6)
|
||||
if (Depth >= MaxRecursionDepth)
|
||||
return false; // Limit search depth.
|
||||
|
||||
// TODO: Handle vectors.
|
||||
|
@ -585,7 +585,7 @@ SDValue TargetLowering::SimplifyMultipleUseDemandedBits(
|
||||
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::SimplifyDemandedBits(
|
||||
} 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::SimplifyDemandedVectorElts(
|
||||
}
|
||||
|
||||
// Limit search depth.
|
||||
if (Depth >= 6)
|
||||
if (Depth >= SelectionDAG::MaxRecursionDepth)
|
||||
return false;
|
||||
|
||||
SDLoc DL(Op);
|
||||
|
@ -2053,7 +2053,7 @@ static void getUsefulBitsForUse(SDNode *UserNode, APInt &UsefulBits,
|
||||
}
|
||||
|
||||
static void getUsefulBits(SDValue Op, APInt &UsefulBits, unsigned Depth) {
|
||||
if (Depth >= 6)
|
||||
if (Depth >= SelectionDAG::MaxRecursionDepth)
|
||||
return;
|
||||
// Initialize UsefulBits
|
||||
if (!Depth) {
|
||||
|
Loading…
Reference in New Issue
Block a user