diff options
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 48 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeTypes.h | 3 |
2 files changed, 51 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index 380c422..34f99da 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -267,6 +267,51 @@ void DAGTypeLegalizer::AnalyzeNewNode(SDNode *&N) { Worklist.push_back(N); } +void DAGTypeLegalizer::SanityCheck(SDNode *N) { + for (SmallVector<SDNode*, 128>::iterator I = Worklist.begin(), + E = Worklist.end(); I != E; ++I) + assert(*I != N); + + for (DenseMap<SDOperandImpl, SDOperand>::iterator I = ReplacedNodes.begin(), + E = ReplacedNodes.end(); I != E; ++I) { + assert(I->first.Val != N); + assert(I->second.Val != N); + } + + for (DenseMap<SDOperandImpl, SDOperand>::iterator I = PromotedNodes.begin(), + E = PromotedNodes.end(); I != E; ++I) { + assert(I->first.Val != N); + assert(I->second.Val != N); + } + + for (DenseMap<SDOperandImpl, SDOperand>::iterator + I = FloatToIntedNodes.begin(), + E = FloatToIntedNodes.end(); I != E; ++I) { + assert(I->first.Val != N); + assert(I->second.Val != N); + } + + for (DenseMap<SDOperandImpl, SDOperand>::iterator I = ScalarizedNodes.begin(), + E = ScalarizedNodes.end(); I != E; ++I) { + assert(I->first.Val != N); + assert(I->second.Val != N); + } + + for (DenseMap<SDOperandImpl, std::pair<SDOperand, SDOperand> >::iterator + I = ExpandedNodes.begin(), E = ExpandedNodes.end(); I != E; ++I) { + assert(I->first.Val != N); + assert(I->second.first.Val != N); + assert(I->second.second.Val != N); + } + + for (DenseMap<SDOperandImpl, std::pair<SDOperand, SDOperand> >::iterator + I = SplitNodes.begin(), E = SplitNodes.end(); I != E; ++I) { + assert(I->first.Val != N); + assert(I->second.first.Val != N); + assert(I->second.second.Val != N); + } +} + namespace { /// NodeUpdateListener - This class is a DAGUpdateListener that listens for /// updates to nodes and recomputes their ready state. @@ -281,6 +326,9 @@ namespace { assert(N->getNodeId() != DAGTypeLegalizer::Processed && N->getNodeId() != DAGTypeLegalizer::ReadyToProcess && "RAUW deleted processed node!"); +#ifndef NDEBUG + DTL.SanityCheck(N); +#endif } virtual void NodeUpdated(SDNode *N) { diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/lib/CodeGen/SelectionDAG/LegalizeTypes.h index 5b98793..b5ec7d1 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeTypes.h +++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.h @@ -379,6 +379,9 @@ private: SDOperand SplitOp_RET(SDNode *N, unsigned OpNo); SDOperand SplitOp_STORE(StoreSDNode *N, unsigned OpNo); SDOperand SplitOp_VECTOR_SHUFFLE(SDNode *N, unsigned OpNo); + +public: + void SanityCheck(SDNode *N); }; } // end namespace llvm. |