Convert analyses to new pass structure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1603 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index ed91ca8..9b34095 100644
--- a/lib/Analysis/LoopInfo.cpp
+++ b/lib/Analysis/LoopInfo.cpp
@@ -13,11 +13,27 @@
#include "Support/DepthFirstIterator.h"
#include <algorithm>
+AnalysisID cfg::LoopInfo::ID(AnalysisID::create<cfg::LoopInfo>());
+
+//===----------------------------------------------------------------------===//
+// cfg::Loop implementation
+//
bool cfg::Loop::contains(const BasicBlock *BB) const {
return find(Blocks.begin(), Blocks.end(), BB) != Blocks.end();
}
-cfg::LoopInfo::LoopInfo(const DominatorSet &DS) {
+
+//===----------------------------------------------------------------------===//
+// cfg::LoopInfo implementation
+//
+bool cfg::LoopInfo::runOnMethod(Method *M) {
+ BBMap.clear(); // Reset internal state of analysis
+ TopLevelLoops.clear();
+ Calculate(getAnalysis<DominatorSet>()); // Update
+ return false;
+}
+
+void cfg::LoopInfo::Calculate(const DominatorSet &DS) {
const BasicBlock *RootNode = DS.getRoot();
for (df_iterator<const BasicBlock*> NI = df_begin(RootNode),
@@ -29,6 +45,14 @@
TopLevelLoops[i]->setLoopDepth(1);
}
+void cfg::LoopInfo::getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided) {
+ Required.push_back(DominatorSet::ID);
+ Provided.push_back(ID);
+}
+
+
cfg::Loop *cfg::LoopInfo::ConsiderForLoop(const BasicBlock *BB,
const DominatorSet &DS) {
if (BBMap.find(BB) != BBMap.end()) return 0; // Havn't processed this node?