1 //===---- Canonicalization.cpp - Run canonicalization passes ======-------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Run the set of default canonicalization passes. 11 // 12 // This pass is mainly used for debugging. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #include "polly/LinkAllPasses.h" 17 #include "polly/Canonicalization.h" 18 #include "llvm/Transforms/Scalar.h" 19 20 using namespace llvm; 21 using namespace polly; 22 23 void polly::registerCanonicalicationPasses(llvm::PassManagerBase &PM, 24 bool SCEVCodegen) { 25 PM.add(llvm::createPromoteMemoryToRegisterPass()); 26 PM.add(llvm::createPromoteMemoryToRegisterPass()); 27 PM.add(llvm::createInstructionCombiningPass()); 28 PM.add(llvm::createCFGSimplificationPass()); 29 PM.add(llvm::createTailCallEliminationPass()); 30 PM.add(llvm::createCFGSimplificationPass()); 31 PM.add(llvm::createReassociatePass()); 32 PM.add(llvm::createLoopRotatePass()); 33 PM.add(llvm::createInstructionCombiningPass()); 34 35 if (!SCEVCodegen) 36 PM.add(polly::createIndVarSimplifyPass()); 37 38 PM.add(polly::createCodePreparationPass()); 39 } 40 41 namespace { 42 class PollyCanonicalize : public ModulePass { 43 PollyCanonicalize(const PollyCanonicalize &) LLVM_DELETED_FUNCTION; 44 const PollyCanonicalize & 45 operator=(const PollyCanonicalize &) LLVM_DELETED_FUNCTION; 46 47 public: 48 static char ID; 49 50 explicit PollyCanonicalize() : ModulePass(ID) {} 51 ~PollyCanonicalize(); 52 53 /// @name FunctionPass interface. 54 //@{ 55 virtual void getAnalysisUsage(AnalysisUsage &AU) const; 56 virtual void releaseMemory(); 57 virtual bool runOnModule(Module &M); 58 virtual void print(raw_ostream &OS, const Module *) const; 59 //@} 60 }; 61 } 62 63 PollyCanonicalize::~PollyCanonicalize() {} 64 65 void PollyCanonicalize::getAnalysisUsage(AnalysisUsage &AU) const {} 66 67 void PollyCanonicalize::releaseMemory() {} 68 69 bool PollyCanonicalize::runOnModule(Module &M) { 70 PassManager PM; 71 registerCanonicalicationPasses(PM); 72 PM.run(M); 73 74 return true; 75 } 76 77 void PollyCanonicalize::print(raw_ostream &OS, const Module *) const {} 78 79 char PollyCanonicalize::ID = 0; 80 81 Pass *polly::createPollyCanonicalizePass() { return new PollyCanonicalize(); } 82 83 INITIALIZE_PASS_BEGIN(PollyCanonicalize, "polly-canonicalize", 84 "Polly - Run canonicalization passes", false, false) 85 INITIALIZE_PASS_END(PollyCanonicalize, "polly-canonicalize", 86 "Polly - Run canonicalization passes", false, false) 87