1 //===- mlir-opt.cpp - MLIR Optimizer Driver -------------------------------===//
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 // Main entry function for mlir-opt for when built as standalone binary.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "mlir/IR/AsmState.h"
14 #include "mlir/IR/Dialect.h"
15 #include "mlir/IR/MLIRContext.h"
16 #include "mlir/InitAllDialects.h"
17 #include "mlir/InitAllPasses.h"
18 #include "mlir/Pass/Pass.h"
19 #include "mlir/Pass/PassManager.h"
20 #include "mlir/Support/FileUtilities.h"
21 #include "mlir/Tools/mlir-opt/MlirOptMain.h"
22 #include "llvm/Support/CommandLine.h"
23 #include "llvm/Support/InitLLVM.h"
24 #include "llvm/Support/SourceMgr.h"
25 #include "llvm/Support/ToolOutputFile.h"
26 
27 using namespace llvm;
28 using namespace mlir;
29 
30 // Defined in the test directory, no public header.
31 namespace mlir {
32 void registerConvertToTargetEnvPass();
33 void registerCloneTestPasses();
34 void registerPassManagerTestPass();
35 void registerPrintSpirvAvailabilityPass();
36 void registerShapeFunctionTestPasses();
37 void registerSideEffectTestPasses();
38 void registerSliceAnalysisTestPass();
39 void registerSymbolTestPasses();
40 void registerRegionTestPasses();
41 void registerTestAffineDataCopyPass();
42 void registerTestAffineLoopUnswitchingPass();
43 void registerTestAllReduceLoweringPass();
44 void registerTestFunc();
45 void registerTestGpuMemoryPromotionPass();
46 void registerTestLoopPermutationPass();
47 void registerTestMatchers();
48 void registerTestOperationEqualPass();
49 void registerTestPrintDefUsePass();
50 void registerTestPrintInvalidPass();
51 void registerTestPrintNestingPass();
52 void registerTestReducer();
53 void registerTestSpirvEntryPointABIPass();
54 void registerTestSpirvModuleCombinerPass();
55 void registerTestTraitsPass();
56 void registerTosaTestQuantUtilAPIPass();
57 void registerVectorizerTestPass();
58 
59 namespace test {
60 void registerConvertCallOpPass();
61 void registerInliner();
62 void registerMemRefBoundCheck();
63 void registerPatternsTestPass();
64 void registerSimpleParametricTilingPass();
65 void registerTestAffineLoopParametricTilingPass();
66 void registerTestAliasAnalysisPass();
67 void registerTestBuiltinAttributeInterfaces();
68 void registerTestCallGraphPass();
69 void registerTestConstantFold();
70 void registerTestControlFlowSink();
71 void registerTestGpuSerializeToCubinPass();
72 void registerTestGpuSerializeToHsacoPass();
73 void registerTestDataLayoutQuery();
74 void registerTestDeadCodeAnalysisPass();
75 void registerTestDecomposeCallGraphTypes();
76 void registerTestDiagnosticsPass();
77 void registerTestDominancePass();
78 void registerTestDynamicPipelinePass();
79 void registerTestExpandMathPass();
80 void registerTestFooAnalysisPass();
81 void registerTestComposeSubView();
82 void registerTestMultiBuffering();
83 void registerTestIntRangeInference();
84 void registerTestIRVisitorsPass();
85 void registerTestGenericIRVisitorsPass();
86 void registerTestGenericIRVisitorsInterruptPass();
87 void registerTestInterfaces();
88 void registerTestLastModifiedPass();
89 void registerTestLinalgElementwiseFusion();
90 void registerTestLinalgFusionTransforms();
91 void registerTestLinalgTensorFusionTransforms();
92 void registerTestLinalgTiledLoopFusionTransforms();
93 void registerTestLinalgGreedyFusion();
94 void registerTestLinalgHoisting();
95 void registerTestLinalgTileAndFuseSequencePass();
96 void registerTestLinalgTransforms();
97 void registerTestLivenessPass();
98 void registerTestLoopFusion();
99 void registerTestLoopMappingPass();
100 void registerTestLoopUnrollingPass();
101 void registerTestMatchReductionPass();
102 void registerTestMathAlgebraicSimplificationPass();
103 void registerTestMathPolynomialApproximationPass();
104 void registerTestMemRefDependenceCheck();
105 void registerTestMemRefStrideCalculation();
106 void registerTestOpaqueLoc();
107 void registerTestPadFusion();
108 void registerTestPDLByteCodePass();
109 void registerTestPDLLPasses();
110 void registerTestPreparationPassWithAllowedMemrefResults();
111 void registerTestRecursiveTypesPass();
112 void registerTestSCFUtilsPass();
113 void registerTestSliceAnalysisPass();
114 void registerTestTensorTransforms();
115 void registerTestTilingInterface();
116 void registerTestTransformDialectInterpreterPass();
117 void registerTestVectorLowerings();
118 } // namespace test
119 } // namespace mlir
120 
121 namespace test {
122 void registerTestDialect(DialectRegistry &);
123 void registerTestTransformDialectExtension(DialectRegistry &);
124 } // namespace test
125 
126 #ifdef MLIR_INCLUDE_TESTS
127 void registerTestPasses() {
128   registerCloneTestPasses();
129   registerConvertToTargetEnvPass();
130   registerPassManagerTestPass();
131   registerPrintSpirvAvailabilityPass();
132   registerShapeFunctionTestPasses();
133   registerSideEffectTestPasses();
134   registerSliceAnalysisTestPass();
135   registerSymbolTestPasses();
136   registerRegionTestPasses();
137   registerTestAffineDataCopyPass();
138   registerTestAffineLoopUnswitchingPass();
139   registerTestAllReduceLoweringPass();
140   registerTestFunc();
141   registerTestGpuMemoryPromotionPass();
142   registerTestLoopPermutationPass();
143   registerTestMatchers();
144   registerTestOperationEqualPass();
145   registerTestPrintDefUsePass();
146   registerTestPrintInvalidPass();
147   registerTestPrintNestingPass();
148   registerTestReducer();
149   registerTestSpirvEntryPointABIPass();
150   registerTestSpirvModuleCombinerPass();
151   registerTestTraitsPass();
152   registerVectorizerTestPass();
153   registerTosaTestQuantUtilAPIPass();
154 
155   mlir::test::registerConvertCallOpPass();
156   mlir::test::registerInliner();
157   mlir::test::registerMemRefBoundCheck();
158   mlir::test::registerPatternsTestPass();
159   mlir::test::registerSimpleParametricTilingPass();
160   mlir::test::registerTestAffineLoopParametricTilingPass();
161   mlir::test::registerTestAliasAnalysisPass();
162   mlir::test::registerTestBuiltinAttributeInterfaces();
163   mlir::test::registerTestCallGraphPass();
164   mlir::test::registerTestConstantFold();
165   mlir::test::registerTestControlFlowSink();
166   mlir::test::registerTestDiagnosticsPass();
167 #if MLIR_CUDA_CONVERSIONS_ENABLED
168   mlir::test::registerTestGpuSerializeToCubinPass();
169 #endif
170 #if MLIR_ROCM_CONVERSIONS_ENABLED
171   mlir::test::registerTestGpuSerializeToHsacoPass();
172 #endif
173   mlir::test::registerTestDecomposeCallGraphTypes();
174   mlir::test::registerTestDataLayoutQuery();
175   mlir::test::registerTestDeadCodeAnalysisPass();
176   mlir::test::registerTestDominancePass();
177   mlir::test::registerTestDynamicPipelinePass();
178   mlir::test::registerTestExpandMathPass();
179   mlir::test::registerTestFooAnalysisPass();
180   mlir::test::registerTestComposeSubView();
181   mlir::test::registerTestMultiBuffering();
182   mlir::test::registerTestIntRangeInference();
183   mlir::test::registerTestIRVisitorsPass();
184   mlir::test::registerTestGenericIRVisitorsPass();
185   mlir::test::registerTestInterfaces();
186   mlir::test::registerTestLastModifiedPass();
187   mlir::test::registerTestLinalgElementwiseFusion();
188   mlir::test::registerTestLinalgFusionTransforms();
189   mlir::test::registerTestLinalgTensorFusionTransforms();
190   mlir::test::registerTestLinalgTiledLoopFusionTransforms();
191   mlir::test::registerTestLinalgGreedyFusion();
192   mlir::test::registerTestLinalgHoisting();
193   mlir::test::registerTestLinalgTileAndFuseSequencePass();
194   mlir::test::registerTestLinalgTransforms();
195   mlir::test::registerTestLivenessPass();
196   mlir::test::registerTestLoopFusion();
197   mlir::test::registerTestLoopMappingPass();
198   mlir::test::registerTestLoopUnrollingPass();
199   mlir::test::registerTestMatchReductionPass();
200   mlir::test::registerTestMathAlgebraicSimplificationPass();
201   mlir::test::registerTestMathPolynomialApproximationPass();
202   mlir::test::registerTestMemRefDependenceCheck();
203   mlir::test::registerTestMemRefStrideCalculation();
204   mlir::test::registerTestOpaqueLoc();
205   mlir::test::registerTestPadFusion();
206   mlir::test::registerTestPDLByteCodePass();
207   mlir::test::registerTestPDLLPasses();
208   mlir::test::registerTestRecursiveTypesPass();
209   mlir::test::registerTestSCFUtilsPass();
210   mlir::test::registerTestSliceAnalysisPass();
211   mlir::test::registerTestTensorTransforms();
212   mlir::test::registerTestTilingInterface();
213   mlir::test::registerTestTransformDialectInterpreterPass();
214   mlir::test::registerTestVectorLowerings();
215 }
216 #endif
217 
218 int main(int argc, char **argv) {
219   registerAllPasses();
220 #ifdef MLIR_INCLUDE_TESTS
221   registerTestPasses();
222 #endif
223   DialectRegistry registry;
224   registerAllDialects(registry);
225 #ifdef MLIR_INCLUDE_TESTS
226   ::test::registerTestDialect(registry);
227   ::test::registerTestTransformDialectExtension(registry);
228 #endif
229   return mlir::asMainReturnCode(
230       mlir::MlirOptMain(argc, argv, "MLIR modular optimizer driver\n", registry,
231                         /*preloadDialectsInContext=*/false));
232 }
233