| #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 "dsa/DSGraph.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 |