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
This commit is contained in:
Chris Lattner 2002-01-31 00:41:01 +00:00
parent a4e4b23b6d
commit 9261f0e02b

View File

@ -8,22 +8,34 @@
#ifndef LLVM_ANALYSIS_LOOP_DEPTH_H
#define LLVM_ANALYSIS_LOOP_DEPTH_H
#include <map>
class BasicBlock;
class Method;
namespace cfg {class Interval; }
#include "llvm/Pass.h"
namespace cfg {
class LoopInfo;
class LoopDepthCalculator {
class LoopDepthCalculator : public MethodPass {
std::map<const BasicBlock*, unsigned> 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 BasicBlock*,unsigned>::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