#define LLVM_LOOP_PASS_H
#include "llvm/Analysis/LoopInfo.h"
+#include "llvm/Function.h"
#include "llvm/Pass.h"
#include "llvm/PassManagers.h"
-#include "llvm/Function.h"
+#include <deque>
namespace llvm {
class LoopPass : public Pass {
public:
- explicit LoopPass(intptr_t pid) : Pass(PT_Loop, pid) {}
- explicit LoopPass(void *pid) : Pass(PT_Loop, pid) {}
+ explicit LoopPass(char &pid) : Pass(PT_Loop, pid) {}
/// getPrinterPass - Get a pass to print the function corresponding
/// to a Loop.
// whatever action is necessary for the specified Loop.
virtual bool runOnLoop(Loop *L, LPPassManager &LPM) = 0;
+ using llvm::Pass::doInitialization;
+ using llvm::Pass::doFinalization;
+
// Initialization and finalization hooks.
virtual bool doInitialization(Loop *L, LPPassManager &LPM) {
return false;
/// Assign pass manager to manage this pass
virtual void assignPassManager(PMStack &PMS,
- PassManagerType PMT = PMT_LoopPassManager);
+ PassManagerType PMT);
/// Return what kind of Pass Manager can manage this pass.
virtual PassManagerType getPotentialPassManagerType() const {
class LPPassManager : public FunctionPass, public PMDataManager {
public:
static char ID;
- explicit LPPassManager(int Depth);
+ explicit LPPassManager();
/// run - Execute all of the passes scheduled for execution. Keep track of
/// whether any of the passes modifies the module, and if so, return true.
/// Print passes managed by this manager
void dumpPassStructure(unsigned Offset);
- Pass *getContainedPass(unsigned N) {
+ LoopPass *getContainedPass(unsigned N) {
assert(N < PassVector.size() && "Pass number out of range!");
- Pass *FP = static_cast<Pass *>(PassVector[N]);
- return FP;
+ LoopPass *LP = static_cast<LoopPass *>(PassVector[N]);
+ return LP;
}
virtual PassManagerType getPassManagerType() const {