• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- polly/LinkAllPasses.h ----------- Reference All Passes ---*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This header file pulls in all transformation and analysis passes for tools
10 // like opt and bugpoint that need this functionality.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef POLLY_LINKALLPASSES_H
15 #define POLLY_LINKALLPASSES_H
16 
17 #include "polly/CodeGen/PPCGCodeGeneration.h"
18 #include "polly/Config/config.h"
19 #include "polly/PruneUnprofitable.h"
20 #include "polly/Simplify.h"
21 #include "polly/Support/DumpModulePass.h"
22 #include "llvm/ADT/StringRef.h"
23 #include <cstdlib>
24 
25 namespace llvm {
26 class Pass;
27 class PassRegistry;
28 } // namespace llvm
29 
30 namespace polly {
31 llvm::Pass *createCodePreparationPass();
32 llvm::Pass *createScopInlinerPass();
33 llvm::Pass *createDeadCodeElimPass();
34 llvm::Pass *createDependenceInfoPass();
35 llvm::Pass *createDependenceInfoWrapperPassPass();
36 llvm::Pass *createDOTOnlyPrinterPass();
37 llvm::Pass *createDOTOnlyViewerPass();
38 llvm::Pass *createDOTPrinterPass();
39 llvm::Pass *createDOTViewerPass();
40 llvm::Pass *createJSONExporterPass();
41 llvm::Pass *createJSONImporterPass();
42 llvm::Pass *createPollyCanonicalizePass();
43 llvm::Pass *createPolyhedralInfoPass();
44 llvm::Pass *createScopDetectionWrapperPassPass();
45 llvm::Pass *createScopInfoRegionPassPass();
46 llvm::Pass *createScopInfoWrapperPassPass();
47 llvm::Pass *createRewriteByrefParamsPass();
48 llvm::Pass *createIslAstInfoWrapperPassPass();
49 llvm::Pass *createCodeGenerationPass();
50 #ifdef GPU_CODEGEN
51 llvm::Pass *createPPCGCodeGenerationPass(GPUArch Arch = GPUArch::NVPTX64,
52                                          GPURuntime Runtime = GPURuntime::CUDA);
53 
54 llvm::Pass *
55 createManagedMemoryRewritePassPass(GPUArch Arch = GPUArch::NVPTX64,
56                                    GPURuntime Runtime = GPURuntime::CUDA);
57 #endif
58 llvm::Pass *createIslScheduleOptimizerPass();
59 llvm::Pass *createFlattenSchedulePass();
60 llvm::Pass *createDeLICMPass();
61 llvm::Pass *createMaximalStaticExpansionPass();
62 
63 extern char &CodePreparationID;
64 } // namespace polly
65 
66 namespace {
67 struct PollyForcePassLinking {
PollyForcePassLinkingPollyForcePassLinking68   PollyForcePassLinking() {
69     // We must reference the passes in such a way that compilers will not
70     // delete it all as dead code, even with whole program optimization,
71     // yet is effectively a NO-OP. As the compiler isn't smart enough
72     // to know that getenv() never returns -1, this will do the job.
73     if (std::getenv("bar") != (char *)-1)
74       return;
75 
76     polly::createCodePreparationPass();
77     polly::createDeadCodeElimPass();
78     polly::createDependenceInfoPass();
79     polly::createDOTOnlyPrinterPass();
80     polly::createDOTOnlyViewerPass();
81     polly::createDOTPrinterPass();
82     polly::createDOTViewerPass();
83     polly::createJSONExporterPass();
84     polly::createJSONImporterPass();
85     polly::createScopDetectionWrapperPassPass();
86     polly::createScopInfoRegionPassPass();
87     polly::createPollyCanonicalizePass();
88     polly::createPolyhedralInfoPass();
89     polly::createIslAstInfoWrapperPassPass();
90     polly::createCodeGenerationPass();
91 #ifdef GPU_CODEGEN
92     polly::createPPCGCodeGenerationPass();
93     polly::createManagedMemoryRewritePassPass();
94 #endif
95     polly::createIslScheduleOptimizerPass();
96     polly::createMaximalStaticExpansionPass();
97     polly::createFlattenSchedulePass();
98     polly::createDeLICMPass();
99     polly::createDumpModulePass("", true);
100     polly::createSimplifyPass();
101     polly::createPruneUnprofitablePass();
102   }
103 } PollyForcePassLinking; // Force link by creating a global definition.
104 } // namespace
105 
106 namespace llvm {
107 class PassRegistry;
108 void initializeCodePreparationPass(llvm::PassRegistry &);
109 void initializeScopInlinerPass(llvm::PassRegistry &);
110 void initializeDeadCodeElimPass(llvm::PassRegistry &);
111 void initializeJSONExporterPass(llvm::PassRegistry &);
112 void initializeJSONImporterPass(llvm::PassRegistry &);
113 void initializeIslAstInfoWrapperPassPass(llvm::PassRegistry &);
114 void initializeCodeGenerationPass(llvm::PassRegistry &);
115 void initializeRewriteByrefParamsPass(llvm::PassRegistry &);
116 #ifdef GPU_CODEGEN
117 void initializePPCGCodeGenerationPass(llvm::PassRegistry &);
118 void initializeManagedMemoryRewritePassPass(llvm::PassRegistry &);
119 #endif
120 void initializeIslScheduleOptimizerPass(llvm::PassRegistry &);
121 void initializeMaximalStaticExpanderPass(llvm::PassRegistry &);
122 void initializePollyCanonicalizePass(llvm::PassRegistry &);
123 void initializeFlattenSchedulePass(llvm::PassRegistry &);
124 void initializeDeLICMPass(llvm::PassRegistry &);
125 } // namespace llvm
126 
127 #endif
128