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?