#include "llvm/Instruction.h"
#include "llvm/Pass.h"
#include "llvm/Support/InstIterator.h"
+#include "Support/StatisticReporter.h"
#include <set>
+static Statistic<> NumInstKilled("constprop - Number of instructions killed");
+
namespace {
struct ConstantPropogation : public FunctionPass {
- const char *getPassName() const { return "Simple Constant Propogation"; }
-
- inline bool runOnFunction(Function *F);
+ bool runOnFunction(Function &F);
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.preservesCFG();
}
};
+
+ RegisterOpt<ConstantPropogation> X("constprop","Simple constant propogation");
}
Pass *createConstantPropogationPass() {
}
-bool ConstantPropogation::runOnFunction(Function *F) {
+bool ConstantPropogation::runOnFunction(Function &F) {
// Initialize the worklist to all of the instructions ready to process...
std::set<Instruction*> WorkList(inst_begin(F), inst_end(F));
bool Changed = false;
// Replace all of the uses of a variable with uses of the constant.
I->replaceAllUsesWith(C);
-
+
// We made a change to the function...
Changed = true;
+ ++NumInstKilled;
}
}
return Changed;