summaryrefslogtreecommitdiffstats
path: root/llvm/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
commitccf571a408aacb589304f59c544fcdd75b7009ba (patch)
treece23312c0aba1c1eb0c0b8e43621818d75831d5b /llvm/lib/Analysis/LoopInfo.cpp
parent979d11db1492908774b84493ffba47f9e1848973 (diff)
downloadbcm5719-llvm-ccf571a408aacb589304f59c544fcdd75b7009ba.tar.gz
bcm5719-llvm-ccf571a408aacb589304f59c544fcdd75b7009ba.zip
Convert analyses to new pass structure
llvm-svn: 1603
Diffstat (limited to 'llvm/lib/Analysis/LoopInfo.cpp')
-rw-r--r--llvm/lib/Analysis/LoopInfo.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/LoopInfo.cpp b/llvm/lib/Analysis/LoopInfo.cpp
index ed91ca8bd5f..9b34095e4f2 100644
--- a/llvm/lib/Analysis/LoopInfo.cpp
+++ b/llvm/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?
OpenPOWER on IntegriCloud