aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/IndVarSimplify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/Scalar/IndVarSimplify.cpp')
-rw-r--r--lib/Transforms/Scalar/IndVarSimplify.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp
index 692fcacb7e..fcf49e171a 100644
--- a/lib/Transforms/Scalar/IndVarSimplify.cpp
+++ b/lib/Transforms/Scalar/IndVarSimplify.cpp
@@ -13,6 +13,7 @@
#include "llvm/Type.h"
#include "llvm/BasicBlock.h"
#include "llvm/ConstantVals.h"
+#include "llvm/Pass.h"
#include "llvm/Support/CFG.h"
#include "Support/STLExtras.h"
@@ -186,19 +187,29 @@ static bool TransformLoop(cfg::LoopInfo *Loops, cfg::Loop *Loop) {
return Changed;
}
-bool InductionVariableSimplify::doit(Method *M, cfg::LoopInfo &Loops) {
+static bool doit(Method *M, cfg::LoopInfo &Loops) {
// Induction Variables live in the header nodes of the loops of the method...
return reduce_apply_bool(Loops.getTopLevelLoops().begin(),
Loops.getTopLevelLoops().end(),
std::bind1st(std::ptr_fun(TransformLoop), &Loops));
}
-bool InductionVariableSimplify::runOnMethod(Method *M) {
- return doit(M, getAnalysis<cfg::LoopInfo>());
+
+namespace {
+ struct InductionVariableSimplify : public MethodPass {
+ virtual bool runOnMethod(Method *M) {
+ return doit(M, getAnalysis<cfg::LoopInfo>());
+ }
+
+ virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided) {
+ Required.push_back(cfg::LoopInfo::ID);
+ }
+ };
}
-void InductionVariableSimplify::getAnalysisUsageInfo(Pass::AnalysisSet &Req,
- Pass::AnalysisSet &Dest,
- Pass::AnalysisSet &Prov) {
- Req.push_back(cfg::LoopInfo::ID);
+Pass *createIndVarSimplifyPass() {
+ return new InductionVariableSimplify();
}
+