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 3f04bb0b532b..303a6a9263be 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(); +  } +}  | 
