blob: 5f93cf585249aa6c1418ad48acfb0a36f8d8a4b7 [file] [log] [blame]
#ifndef ABC_PREPROCESS_H
#define ABC_PREPROCESS_H
#include "llvm/Pass.h"
#include "llvm/Analysis/Dominators.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
#include "AffineExpressions.h"
#include "poolalloc/PoolAllocate.h"
namespace llvm {
Pass *createABCPreProcessPass();
namespace ABC {
//This pass is written because the induction var pass doesnt run properly
//after the phi nodes are inserted.
struct ABCPreProcess : public FunctionPass {
private:
#if 0
PostDominanceFrontier * pdf;
DominanceFrontier * df;
DominatorSet *ds;
PostDominatorSet *pds;
#endif
virtual void print(ostream &out, const Module * M) const;
void indVariables(Loop *L);
public :
static char ID;
ABCPreProcess () : FunctionPass ((intptr_t) &ID) {}
const char *getPassName() const { return "Collect Induction Variables"; }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<LoopInfo>();
AU.addPreserved<PoolAllocateGroup>();
#if 0
AU.addRequired<DominatorSet>();
AU.addRequired<PostDominatorSet>();
AU.addRequired<DominanceFrontier>();
AU.addRequired<PostDominanceFrontier>();
#endif
}
virtual bool runOnFunction(Function &F);
};
}
}
#endif