diff options
author | Dan Gohman <gohman@apple.com> | 2009-09-28 00:27:48 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-09-28 00:27:48 +0000 |
commit | 9450b0e1a6154192ca597ad27f8eb6e6e807f7a4 (patch) | |
tree | 30b9306c15136bcce40db9d6de99e2ce201f581a /lib/Analysis/LoopInfo.cpp | |
parent | f3f0c89f5f9c2ad99169084cbfedaf3ed0ee6a50 (diff) |
Move the dominator verification code out of special code embedded within
the PassManager code into a regular verifyAnalysis method.
Also, reorganize loop verification. Make the LoopPass infrastructure
call verifyLoop as needed instead of having LoopInfo::verifyAnalysis
check every loop in the function after each looop pass. Add a new
command-line argument, -verify-loop-info, to enable the expensive
full checking.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82952 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/LoopInfo.cpp')
-rw-r--r-- | lib/Analysis/LoopInfo.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp index 665e53df6d..ce2d29f331 100644 --- a/lib/Analysis/LoopInfo.cpp +++ b/lib/Analysis/LoopInfo.cpp @@ -20,11 +20,22 @@ #include "llvm/Analysis/Dominators.h" #include "llvm/Assembly/Writer.h" #include "llvm/Support/CFG.h" +#include "llvm/Support/CommandLine.h" #include "llvm/ADT/DepthFirstIterator.h" #include "llvm/ADT/SmallPtrSet.h" #include <algorithm> using namespace llvm; +// Always verify loopinfo if expensive checking is enabled. +#ifdef XDEBUG +bool VerifyLoopInfo = true; +#else +bool VerifyLoopInfo = false; +#endif +static cl::opt<bool,true> +VerifyLoopInfoX("verify-loop-info", cl::location(VerifyLoopInfo), + cl::desc("Verify loop info (time consuming)")); + char LoopInfo::ID = 0; static RegisterPass<LoopInfo> X("loops", "Natural Loop Information", true, true); @@ -375,10 +386,20 @@ bool LoopInfo::runOnFunction(Function &) { } void LoopInfo::verifyAnalysis() const { + // LoopInfo is a FunctionPass, but verifying every loop in the function + // each time verifyAnalysis is called is very expensive. The + // -verify-loop-info option can enable this. In order to perform some + // checking by default, LoopPass has been taught to call verifyLoop + // manually during loop pass sequences. + + if (!VerifyLoopInfo) return; + for (iterator I = begin(), E = end(); I != E; ++I) { assert(!(*I)->getParentLoop() && "Top-level loop has a parent!"); (*I)->verifyLoopNest(); } + + // TODO: check BBMap consistency. } void LoopInfo::getAnalysisUsage(AnalysisUsage &AU) const { |