diff options
Diffstat (limited to 'contrib/llvm/lib/CodeGen/MachineDominators.cpp')
-rw-r--r-- | contrib/llvm/lib/CodeGen/MachineDominators.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/contrib/llvm/lib/CodeGen/MachineDominators.cpp b/contrib/llvm/lib/CodeGen/MachineDominators.cpp index 3f04bb0..303a6a9 100644 --- a/contrib/llvm/lib/CodeGen/MachineDominators.cpp +++ b/contrib/llvm/lib/CodeGen/MachineDominators.cpp @@ -15,9 +15,20 @@ #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/Passes.h" #include "llvm/ADT/SmallBitVector.h" +#include "llvm/Support/CommandLine.h" using namespace llvm; +// Always verify dominfo if expensive checking is enabled. +#ifdef EXPENSIVE_CHECKS +static bool VerifyMachineDomInfo = true; +#else +static bool VerifyMachineDomInfo = false; +#endif +static cl::opt<bool, true> VerifyMachineDomInfoX( + "verify-machine-dom-info", cl::location(VerifyMachineDomInfo), + cl::desc("Verify machine dominator info (time consuming)")); + namespace llvm { template class DomTreeNodeBase<MachineBasicBlock>; template class DominatorTreeBase<MachineBasicBlock>; @@ -57,6 +68,11 @@ void MachineDominatorTree::releaseMemory() { DT->releaseMemory(); } +void MachineDominatorTree::verifyAnalysis() const { + if (VerifyMachineDomInfo) + verifyDomTree(); +} + void MachineDominatorTree::print(raw_ostream &OS, const Module*) const { DT->print(OS); } @@ -125,3 +141,17 @@ void MachineDominatorTree::applySplitCriticalEdges() const { NewBBs.clear(); CriticalEdgesToSplit.clear(); } + +void MachineDominatorTree::verifyDomTree() const { + MachineFunction &F = *getRoot()->getParent(); + + MachineDominatorTree OtherDT; + OtherDT.DT->recalculate(F); + if (compare(OtherDT)) { + errs() << "MachineDominatorTree is not up to date!\nComputed:\n"; + print(errs(), nullptr); + errs() << "\nActual:\n"; + OtherDT.print(errs(), nullptr); + abort(); + } +} |