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