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::legacy::PassManagerBase &PM) {
24   PM.add(llvm::createPromoteMemoryToRegisterPass());
25   PM.add(llvm::createInstructionCombiningPass());
26   PM.add(llvm::createCFGSimplificationPass());
27   PM.add(llvm::createTailCallEliminationPass());
28   PM.add(llvm::createCFGSimplificationPass());
29   PM.add(llvm::createReassociatePass());
30   PM.add(llvm::createLoopRotatePass());
31   PM.add(llvm::createInstructionCombiningPass());
32   PM.add(llvm::createIndVarSimplifyPass());
33   PM.add(polly::createCodePreparationPass());
34 }
35 
36 namespace {
37 class PollyCanonicalize : public ModulePass {
38   PollyCanonicalize(const PollyCanonicalize &) = delete;
39   const PollyCanonicalize &operator=(const PollyCanonicalize &) = delete;
40 
41 public:
42   static char ID;
43 
44   explicit PollyCanonicalize() : ModulePass(ID) {}
45   ~PollyCanonicalize();
46 
47   /// @name FunctionPass interface.
48   //@{
49   virtual void getAnalysisUsage(AnalysisUsage &AU) const;
50   virtual void releaseMemory();
51   virtual bool runOnModule(Module &M);
52   virtual void print(raw_ostream &OS, const Module *) const;
53   //@}
54 };
55 }
56 
57 PollyCanonicalize::~PollyCanonicalize() {}
58 
59 void PollyCanonicalize::getAnalysisUsage(AnalysisUsage &AU) const {}
60 
61 void PollyCanonicalize::releaseMemory() {}
62 
63 bool PollyCanonicalize::runOnModule(Module &M) {
64   legacy::PassManager PM;
65   registerCanonicalicationPasses(PM);
66   PM.run(M);
67 
68   return true;
69 }
70 
71 void PollyCanonicalize::print(raw_ostream &OS, const Module *) const {}
72 
73 char PollyCanonicalize::ID = 0;
74 
75 Pass *polly::createPollyCanonicalizePass() { return new PollyCanonicalize(); }
76 
77 INITIALIZE_PASS_BEGIN(PollyCanonicalize, "polly-canonicalize",
78                       "Polly - Run canonicalization passes", false, false)
79 INITIALIZE_PASS_END(PollyCanonicalize, "polly-canonicalize",
80                     "Polly - Run canonicalization passes", false, false)
81