aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/LoopInfo.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-01-31 00:42:27 +0000
committerChris Lattner <sabre@nondot.org>2002-01-31 00:42:27 +0000
commit93193f806378e06092820c099e437886c7309b94 (patch)
treebbdfa045f4638bb044937aeaaeab19611f65d534 /lib/Analysis/LoopInfo.cpp
parent0f0fc3253dd44b5b6d617812d37591fa26a28599 (diff)
Convert analyses to new pass structure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1603 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/LoopInfo.cpp')
-rw-r--r--lib/Analysis/LoopInfo.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index ed91ca8bd5..9b34095e4f 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 @@ cfg::LoopInfo::LoopInfo(const DominatorSet &DS) {
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?