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 registerTestLinalgDecomposeOps();
90 void registerTestLinalgElementwiseFusion();
91 void registerTestLinalgFusionTransforms();
92 void registerTestLinalgTensorFusionTransforms();
93 void registerTestLinalgTiledLoopFusionTransforms();
94 void registerTestLinalgGreedyFusion();
95 void registerTestLinalgHoisting();
96 void registerTestLinalgTileAndFuseSequencePass();
97 void registerTestLinalgTransforms();
98 void registerTestLivenessPass();
99 void registerTestLoopFusion();
100 void registerTestLoopMappingPass();
101 void registerTestLoopUnrollingPass();
102 void registerTestMatchReductionPass();
103 void registerTestMathAlgebraicSimplificationPass();
104 void registerTestMathPolynomialApproximationPass();
105 void registerTestMemRefDependenceCheck();
106 void registerTestMemRefStrideCalculation();
107 void registerTestOpaqueLoc();
108 void registerTestPadFusion();
109 void registerTestPDLByteCodePass();
110 void registerTestPDLLPasses();
111 void registerTestPreparationPassWithAllowedMemrefResults();
112 void registerTestRecursiveTypesPass();
113 void registerTestSCFUtilsPass();
114 void registerTestSliceAnalysisPass();
115 void registerTestTensorTransforms();
116 void registerTestTilingInterface();
117 void registerTestTransformDialectInterpreterPass();
118 void registerTestVectorLowerings();
119 } // namespace test
120 } // namespace mlir
121 
122 namespace test {
123 void registerTestDialect(DialectRegistry &);
124 void registerTestTransformDialectExtension(DialectRegistry &);
125 } // namespace test
126 
127 #ifdef MLIR_INCLUDE_TESTS
128 void registerTestPasses() {
129   registerCloneTestPasses();
130   registerConvertToTargetEnvPass();
131   registerPassManagerTestPass();
132   registerPrintSpirvAvailabilityPass();
133   registerShapeFunctionTestPasses();
134   registerSideEffectTestPasses();
135   registerSliceAnalysisTestPass();
136   registerSymbolTestPasses();
137   registerRegionTestPasses();
138   registerTestAffineDataCopyPass();
139   registerTestAffineLoopUnswitchingPass();
140   registerTestAllReduceLoweringPass();
141   registerTestFunc();
142   registerTestGpuMemoryPromotionPass();
143   registerTestLoopPermutationPass();
144   registerTestMatchers();
145   registerTestOperationEqualPass();
146   registerTestPrintDefUsePass();
147   registerTestPrintInvalidPass();
148   registerTestPrintNestingPass();
149   registerTestReducer();
150   registerTestSpirvEntryPointABIPass();
151   registerTestSpirvModuleCombinerPass();
152   registerTestTraitsPass();
153   registerVectorizerTestPass();
154   registerTosaTestQuantUtilAPIPass();
155 
156   mlir::test::registerConvertCallOpPass();
157   mlir::test::registerInliner();
158   mlir::test::registerMemRefBoundCheck();
159   mlir::test::registerPatternsTestPass();
160   mlir::test::registerSimpleParametricTilingPass();
161   mlir::test::registerTestAffineLoopParametricTilingPass();
162   mlir::test::registerTestAliasAnalysisPass();
163   mlir::test::registerTestBuiltinAttributeInterfaces();
164   mlir::test::registerTestCallGraphPass();
165   mlir::test::registerTestConstantFold();
166   mlir::test::registerTestControlFlowSink();
167   mlir::test::registerTestDiagnosticsPass();
168 #if MLIR_CUDA_CONVERSIONS_ENABLED
169   mlir::test::registerTestGpuSerializeToCubinPass();
170 #endif
171 #if MLIR_ROCM_CONVERSIONS_ENABLED
172   mlir::test::registerTestGpuSerializeToHsacoPass();
173 #endif
174   mlir::test::registerTestDecomposeCallGraphTypes();
175   mlir::test::registerTestDataLayoutQuery();
176   mlir::test::registerTestDeadCodeAnalysisPass();
177   mlir::test::registerTestDominancePass();
178   mlir::test::registerTestDynamicPipelinePass();
179   mlir::test::registerTestExpandMathPass();
180   mlir::test::registerTestFooAnalysisPass();
181   mlir::test::registerTestComposeSubView();
182   mlir::test::registerTestMultiBuffering();
183   mlir::test::registerTestIntRangeInference();
184   mlir::test::registerTestIRVisitorsPass();
185   mlir::test::registerTestGenericIRVisitorsPass();
186   mlir::test::registerTestInterfaces();
187   mlir::test::registerTestLastModifiedPass();
188   mlir::test::registerTestLinalgDecomposeOps();
189   mlir::test::registerTestLinalgElementwiseFusion();
190   mlir::test::registerTestLinalgFusionTransforms();
191   mlir::test::registerTestLinalgTensorFusionTransforms();
192   mlir::test::registerTestLinalgTiledLoopFusionTransforms();
193   mlir::test::registerTestLinalgGreedyFusion();
194   mlir::test::registerTestLinalgHoisting();
195   mlir::test::registerTestLinalgTileAndFuseSequencePass();
196   mlir::test::registerTestLinalgTransforms();
197   mlir::test::registerTestLivenessPass();
198   mlir::test::registerTestLoopFusion();
199   mlir::test::registerTestLoopMappingPass();
200   mlir::test::registerTestLoopUnrollingPass();
201   mlir::test::registerTestMatchReductionPass();
202   mlir::test::registerTestMathAlgebraicSimplificationPass();
203   mlir::test::registerTestMathPolynomialApproximationPass();
204   mlir::test::registerTestMemRefDependenceCheck();
205   mlir::test::registerTestMemRefStrideCalculation();
206   mlir::test::registerTestOpaqueLoc();
207   mlir::test::registerTestPadFusion();
208   mlir::test::registerTestPDLByteCodePass();
209   mlir::test::registerTestPDLLPasses();
210   mlir::test::registerTestRecursiveTypesPass();
211   mlir::test::registerTestSCFUtilsPass();
212   mlir::test::registerTestSliceAnalysisPass();
213   mlir::test::registerTestTensorTransforms();
214   mlir::test::registerTestTilingInterface();
215   mlir::test::registerTestTransformDialectInterpreterPass();
216   mlir::test::registerTestVectorLowerings();
217 }
218 #endif
219 
220 int main(int argc, char **argv) {
221   registerAllPasses();
222 #ifdef MLIR_INCLUDE_TESTS
223   registerTestPasses();
224 #endif
225   DialectRegistry registry;
226   registerAllDialects(registry);
227 #ifdef MLIR_INCLUDE_TESTS
228   ::test::registerTestDialect(registry);
229   ::test::registerTestTransformDialectExtension(registry);
230 #endif
231   return mlir::asMainReturnCode(
232       mlir::MlirOptMain(argc, argv, "MLIR modular optimizer driver\n", registry,
233                         /*preloadDialectsInContext=*/false));
234 }
235