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/Config/config.h"
18 #include "polly/Support/DumpFunctionPass.h"
19 #include "polly/Support/DumpModulePass.h"
20 #include "llvm/ADT/StringRef.h"
21 #include <cstdlib>
22 
23 namespace llvm {
24 class Pass;
25 class PassRegistry;
26 } // namespace llvm
27 
28 namespace polly {
29 llvm::Pass *createCodePreparationPass();
30 llvm::Pass *createScopInlinerPass();
31 llvm::Pass *createDeadCodeElimWrapperPass();
32 llvm::Pass *createDependenceInfoPass();
33 llvm::Pass *createDependenceInfoPrinterLegacyPass(llvm::raw_ostream &OS);
34 llvm::Pass *createDependenceInfoWrapperPassPass();
35 llvm::Pass *
36 createDependenceInfoPrinterLegacyFunctionPass(llvm::raw_ostream &OS);
37 llvm::Pass *createDOTOnlyPrinterWrapperPass();
38 llvm::Pass *createDOTOnlyViewerWrapperPass();
39 llvm::Pass *createDOTPrinterWrapperPass();
40 llvm::Pass *createDOTViewerWrapperPass();
41 llvm::Pass *createJSONExporterPass();
42 llvm::Pass *createJSONImporterPass();
43 llvm::Pass *createJSONImporterPrinterLegacyPass(llvm::raw_ostream &OS);
44 llvm::Pass *createPollyCanonicalizePass();
45 llvm::Pass *createPolyhedralInfoPass();
46 llvm::Pass *createPolyhedralInfoPrinterLegacyPass(llvm::raw_ostream &OS);
47 llvm::Pass *createScopDetectionWrapperPassPass();
48 llvm::Pass *createScopDetectionPrinterLegacyPass(llvm::raw_ostream &OS);
49 llvm::Pass *createScopInfoRegionPassPass();
50 llvm::Pass *createScopInfoPrinterLegacyRegionPass(llvm::raw_ostream &OS);
51 llvm::Pass *createScopInfoWrapperPassPass();
52 llvm::Pass *createScopInfoPrinterLegacyFunctionPass(llvm::raw_ostream &OS);
53 llvm::Pass *createIslAstInfoWrapperPassPass();
54 llvm::Pass *createIslAstInfoPrinterLegacyPass(llvm::raw_ostream &OS);
55 llvm::Pass *createCodeGenerationPass();
56 llvm::Pass *createIslScheduleOptimizerWrapperPass();
57 llvm::Pass *createIslScheduleOptimizerPrinterLegacyPass(llvm::raw_ostream &OS);
58 llvm::Pass *createFlattenSchedulePass();
59 llvm::Pass *createFlattenSchedulePrinterLegacyPass(llvm::raw_ostream &OS);
60 llvm::Pass *createForwardOpTreeWrapperPass();
61 llvm::Pass *createForwardOpTreePrinterLegacyPass(llvm::raw_ostream &OS);
62 llvm::Pass *createDeLICMWrapperPass();
63 llvm::Pass *createDeLICMPrinterLegacyPass(llvm::raw_ostream &OS);
64 llvm::Pass *createMaximalStaticExpansionPass();
65 llvm::Pass *createSimplifyWrapperPass(int);
66 llvm::Pass *createSimplifyPrinterLegacyPass(llvm::raw_ostream &OS);
67 llvm::Pass *createPruneUnprofitableWrapperPass();
68 
69 extern char &CodePreparationID;
70 } // namespace polly
71 
72 namespace {
73 struct PollyForcePassLinking {
PollyForcePassLinkingPollyForcePassLinking74   PollyForcePassLinking() {
75     // We must reference the passes in such a way that compilers will not
76     // delete it all as dead code, even with whole program optimization,
77     // yet is effectively a NO-OP. As the compiler isn't smart enough
78     // to know that getenv() never returns -1, this will do the job.
79     if (std::getenv("bar") != (char *)-1)
80       return;
81 
82     polly::createCodePreparationPass();
83     polly::createDeadCodeElimWrapperPass();
84     polly::createDependenceInfoPass();
85     polly::createDependenceInfoPrinterLegacyPass(llvm::outs());
86     polly::createDependenceInfoWrapperPassPass();
87     polly::createDependenceInfoPrinterLegacyFunctionPass(llvm::outs());
88     polly::createDOTOnlyPrinterWrapperPass();
89     polly::createDOTOnlyViewerWrapperPass();
90     polly::createDOTPrinterWrapperPass();
91     polly::createDOTViewerWrapperPass();
92     polly::createJSONExporterPass();
93     polly::createJSONImporterPass();
94     polly::createJSONImporterPrinterLegacyPass(llvm::outs());
95     polly::createScopDetectionWrapperPassPass();
96     polly::createScopDetectionPrinterLegacyPass(llvm::outs());
97     polly::createScopInfoRegionPassPass();
98     polly::createScopInfoPrinterLegacyRegionPass(llvm::outs());
99     polly::createScopInfoWrapperPassPass();
100     polly::createScopInfoPrinterLegacyFunctionPass(llvm::outs());
101     polly::createPollyCanonicalizePass();
102     polly::createPolyhedralInfoPass();
103     polly::createPolyhedralInfoPrinterLegacyPass(llvm::outs());
104     polly::createIslAstInfoWrapperPassPass();
105     polly::createIslAstInfoPrinterLegacyPass(llvm::outs());
106     polly::createCodeGenerationPass();
107     polly::createIslScheduleOptimizerWrapperPass();
108     polly::createIslScheduleOptimizerPrinterLegacyPass(llvm::outs());
109     polly::createMaximalStaticExpansionPass();
110     polly::createFlattenSchedulePass();
111     polly::createFlattenSchedulePrinterLegacyPass(llvm::errs());
112     polly::createForwardOpTreeWrapperPass();
113     polly::createForwardOpTreePrinterLegacyPass(llvm::errs());
114     polly::createDeLICMWrapperPass();
115     polly::createDeLICMPrinterLegacyPass(llvm::outs());
116     polly::createDumpModuleWrapperPass("", true);
117     polly::createDumpFunctionWrapperPass("");
118     polly::createSimplifyWrapperPass(0);
119     polly::createSimplifyPrinterLegacyPass(llvm::outs());
120     polly::createPruneUnprofitableWrapperPass();
121   }
122 } PollyForcePassLinking; // Force link by creating a global definition.
123 } // namespace
124 
125 namespace llvm {
126 void initializeCodePreparationPass(llvm::PassRegistry &);
127 void initializeScopInlinerPass(llvm::PassRegistry &);
128 void initializeScopDetectionWrapperPassPass(llvm::PassRegistry &);
129 void initializeScopDetectionPrinterLegacyPassPass(llvm::PassRegistry &);
130 void initializeScopInfoRegionPassPass(PassRegistry &);
131 void initializeScopInfoPrinterLegacyRegionPassPass(llvm::PassRegistry &);
132 void initializeScopInfoWrapperPassPass(PassRegistry &);
133 void initializeScopInfoPrinterLegacyFunctionPassPass(PassRegistry &);
134 void initializeDeadCodeElimWrapperPassPass(llvm::PassRegistry &);
135 void initializeJSONExporterPass(llvm::PassRegistry &);
136 void initializeJSONImporterPass(llvm::PassRegistry &);
137 void initializeJSONImporterPrinterLegacyPassPass(llvm::PassRegistry &);
138 void initializeDependenceInfoPass(llvm::PassRegistry &);
139 void initializeDependenceInfoPrinterLegacyPassPass(llvm::PassRegistry &);
140 void initializeDependenceInfoWrapperPassPass(llvm::PassRegistry &);
141 void initializeDependenceInfoPrinterLegacyFunctionPassPass(
142     llvm::PassRegistry &);
143 void initializeIslAstInfoWrapperPassPass(llvm::PassRegistry &);
144 void initializeIslAstInfoPrinterLegacyPassPass(llvm::PassRegistry &);
145 void initializeCodeGenerationPass(llvm::PassRegistry &);
146 void initializeIslScheduleOptimizerWrapperPassPass(llvm::PassRegistry &);
147 void initializeIslScheduleOptimizerPrinterLegacyPassPass(llvm::PassRegistry &);
148 void initializeMaximalStaticExpanderWrapperPassPass(llvm::PassRegistry &);
149 void initializePollyCanonicalizePass(llvm::PassRegistry &);
150 void initializeFlattenSchedulePass(llvm::PassRegistry &);
151 void initializeFlattenSchedulePrinterLegacyPassPass(llvm::PassRegistry &);
152 void initializeForwardOpTreeWrapperPassPass(llvm::PassRegistry &);
153 void initializeForwardOpTreePrinterLegacyPassPass(PassRegistry &);
154 void initializeDeLICMWrapperPassPass(llvm::PassRegistry &);
155 void initializeDeLICMPrinterLegacyPassPass(llvm::PassRegistry &);
156 void initializeSimplifyWrapperPassPass(llvm::PassRegistry &);
157 void initializeSimplifyPrinterLegacyPassPass(llvm::PassRegistry &);
158 void initializePruneUnprofitableWrapperPassPass(llvm::PassRegistry &);
159 void initializePolyhedralInfoPass(llvm::PassRegistry &);
160 void initializePolyhedralInfoPrinterLegacyPassPass(llvm::PassRegistry &);
161 } // namespace llvm
162 
163 #endif
164