From: Chris Lattner Date: Thu, 31 Jan 2002 00:41:01 +0000 (+0000) Subject: Implement LoopDepth calculation in terms of dominators instead of intervals X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9261f0e02b867be5825924a09569f19705cfe2eb;p=oota-llvm.git Implement LoopDepth calculation in terms of dominators instead of intervals git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1600 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/LoopDepth.h b/include/llvm/Analysis/LoopDepth.h index 89068d6bb79..861a384b94c 100644 --- a/include/llvm/Analysis/LoopDepth.h +++ b/include/llvm/Analysis/LoopDepth.h @@ -8,22 +8,34 @@ #ifndef LLVM_ANALYSIS_LOOP_DEPTH_H #define LLVM_ANALYSIS_LOOP_DEPTH_H -#include -class BasicBlock; -class Method; -namespace cfg {class Interval; } +#include "llvm/Pass.h" +namespace cfg { + class LoopInfo; -class LoopDepthCalculator { +class LoopDepthCalculator : public MethodPass { std::map LoopDepth; - inline void AddBB(const BasicBlock *BB); // Increment count for this block - inline void ProcessInterval(cfg::Interval *I); + void calculate(Method *M, LoopInfo &Loops); public: + static AnalysisID ID; // cfg::LoopDepth Analysis ID + + LoopDepthCalculator(AnalysisID id) { assert(id == ID); } LoopDepthCalculator(Method *M); + // This is a pass... + bool runOnMethod(Method *M); + inline unsigned getLoopDepth(const BasicBlock *BB) const { std::map::const_iterator I = LoopDepth.find(BB); return I != LoopDepth.end() ? I->second : 0; } + + // getAnalysisUsageInfo - Provide loop depth, require loop info + // + virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Requires, + Pass::AnalysisSet &Destroyed, + Pass::AnalysisSet &Provided); }; +} // end namespace cfg + #endif