xref: /llvm-project/mlir/tools/mlir-opt/mlir-opt.cpp (revision 25ae1a266d50f24a8fffc57152d7f3c3fcb65517)
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/Config/mlir-config.h"
14 #include "mlir/IR/AsmState.h"
15 #include "mlir/IR/Dialect.h"
16 #include "mlir/IR/MLIRContext.h"
17 #include "mlir/InitAllDialects.h"
18 #include "mlir/InitAllExtensions.h"
19 #include "mlir/InitAllPasses.h"
20 #include "mlir/Pass/Pass.h"
21 #include "mlir/Pass/PassManager.h"
22 #include "mlir/Support/FileUtilities.h"
23 #include "mlir/Target/LLVMIR/Dialect/All.h"
24 #include "mlir/Tools/mlir-opt/MlirOptMain.h"
25 #include "llvm/Support/CommandLine.h"
26 #include "llvm/Support/InitLLVM.h"
27 #include "llvm/Support/SourceMgr.h"
28 #include "llvm/Support/ToolOutputFile.h"
29 
30 using namespace llvm;
31 using namespace mlir;
32 
33 // Defined in the test directory, no public header.
34 namespace mlir {
35 void registerCloneTestPasses();
36 void registerConvertToTargetEnvPass();
37 void registerLazyLoadingTestPasses();
38 void registerLoopLikeInterfaceTestPasses();
39 void registerPassManagerTestPass();
40 void registerPrintSpirvAvailabilityPass();
41 void registerRegionTestPasses();
42 void registerShapeFunctionTestPasses();
43 void registerSideEffectTestPasses();
44 void registerSliceAnalysisTestPass();
45 void registerSymbolTestPasses();
46 void registerTestAffineAccessAnalysisPass();
47 void registerTestAffineDataCopyPass();
48 void registerTestAffineLoopUnswitchingPass();
49 void registerTestAffineReifyValueBoundsPass();
50 void registerTestAffineWalk();
51 void registerTestBytecodeRoundtripPasses();
52 void registerTestDecomposeAffineOpPass();
53 void registerTestFunc();
54 void registerTestGpuLoweringPasses();
55 void registerTestGpuMemoryPromotionPass();
56 void registerTestLoopPermutationPass();
57 void registerTestMatchers();
58 void registerTestOperationEqualPass();
59 void registerTestPreserveUseListOrders();
60 void registerTestPrintDefUsePass();
61 void registerTestPrintInvalidPass();
62 void registerTestPrintNestingPass();
63 void registerTestReducer();
64 void registerTestSpirvEntryPointABIPass();
65 void registerTestSpirvModuleCombinerPass();
66 void registerTestTraitsPass();
67 void registerTosaTestQuantUtilAPIPass();
68 void registerVectorizerTestPass();
69 
70 namespace test {
71 void registerCommutativityUtils();
72 void registerConvertCallOpPass();
73 void registerConvertFuncOpPass();
74 void registerInliner();
75 void registerMemRefBoundCheck();
76 void registerPatternsTestPass();
77 void registerSimpleParametricTilingPass();
78 void registerTestAffineLoopParametricTilingPass();
79 void registerTestAliasAnalysisPass();
80 void registerTestArithEmulateWideIntPass();
81 void registerTestBuiltinAttributeInterfaces();
82 void registerTestBuiltinDistinctAttributes();
83 void registerTestCallGraphPass();
84 void registerTestCfAssertPass();
85 void registerTestCFGLoopInfoPass();
86 void registerTestComposeSubView();
87 void registerTestCompositePass();
88 void registerTestConstantFold();
89 void registerTestControlFlowSink();
90 void registerTestConvertToSPIRVPass();
91 void registerTestDataLayoutPropagation();
92 void registerTestDataLayoutQuery();
93 void registerTestDeadCodeAnalysisPass();
94 void registerTestDecomposeCallGraphTypes();
95 void registerTestDiagnosticsPass();
96 void registerTestDiagnosticsMetadataPass();
97 void registerTestDominancePass();
98 void registerTestDynamicPipelinePass();
99 void registerTestEmulateNarrowTypePass();
100 void registerTestExpandMathPass();
101 void registerTestFooAnalysisPass();
102 void registerTestComposeSubView();
103 void registerTestMultiBuffering();
104 void registerTestIRVisitorsPass();
105 void registerTestGenericIRVisitorsPass();
106 void registerTestInterfaces();
107 void registerTestIRVisitorsPass();
108 void registerTestLastModifiedPass();
109 void registerTestLinalgDecomposeOps();
110 void registerTestLinalgDropUnitDims();
111 void registerTestLinalgElementwiseFusion();
112 void registerTestLinalgGreedyFusion();
113 void registerTestLinalgRankReduceContractionOps();
114 void registerTestLinalgTransforms();
115 void registerTestLivenessAnalysisPass();
116 void registerTestLivenessPass();
117 void registerTestLLVMLegalizePatternsPass();
118 void registerTestLoopFusion();
119 void registerTestLoopMappingPass();
120 void registerTestLoopUnrollingPass();
121 void registerTestLowerToArmNeon();
122 void registerTestLowerToArmSME();
123 void registerTestLowerToLLVM();
124 void registerTestMakeIsolatedFromAbovePass();
125 void registerTestMatchReductionPass();
126 void registerTestMathAlgebraicSimplificationPass();
127 void registerTestMathPolynomialApproximationPass();
128 void registerTestMathToVCIXPass();
129 void registerTestMemRefDependenceCheck();
130 void registerTestMemRefStrideCalculation();
131 void registerTestMeshReshardingSpmdizationPass();
132 void registerTestMeshSimplificationsPass();
133 void registerTestMultiBuffering();
134 void registerTestNextAccessPass();
135 void registerTestNVGPULowerings();
136 void registerTestOneToNTypeConversionPass();
137 void registerTestOpaqueLoc();
138 void registerTestOpLoweringPasses();
139 void registerTestPadFusion();
140 void registerTestRecursiveTypesPass();
141 void registerTestSCFUpliftWhileToFor();
142 void registerTestSCFUtilsPass();
143 void registerTestSCFWhileOpBuilderPass();
144 void registerTestSCFWrapInZeroTripCheckPasses();
145 void registerTestShapeMappingPass();
146 void registerTestSliceAnalysisPass();
147 void registerTestSPIRVCPURunnerPipeline();
148 void registerTestSPIRVFuncSignatureConversion();
149 void registerTestSPIRVVectorUnrolling();
150 void registerTestTensorCopyInsertionPass();
151 void registerTestTensorTransforms();
152 void registerTestTopologicalSortAnalysisPass();
153 void registerTestTransformDialectEraseSchedulePass();
154 void registerTestPassStateExtensionCommunication();
155 void registerTestVectorLowerings();
156 void registerTestVectorReductionToSPIRVDotProd();
157 void registerTestVulkanRunnerPipeline();
158 void registerTestWrittenToPass();
159 #if MLIR_ENABLE_PDL_IN_PATTERNMATCH
160 void registerTestDialectConversionPasses();
161 void registerTestPDLByteCodePass();
162 void registerTestPDLLPasses();
163 #endif
164 } // namespace test
165 } // namespace mlir
166 
167 namespace test {
168 void registerTestDialect(DialectRegistry &);
169 void registerTestDynDialect(DialectRegistry &);
170 void registerTestTilingInterfaceTransformDialectExtension(DialectRegistry &);
171 void registerTestTransformDialectExtension(DialectRegistry &);
172 } // namespace test
173 
174 #ifdef MLIR_INCLUDE_TESTS
175 void registerTestPasses() {
176   registerCloneTestPasses();
177   registerConvertToTargetEnvPass();
178   registerLazyLoadingTestPasses();
179   registerLoopLikeInterfaceTestPasses();
180   registerPassManagerTestPass();
181   registerPrintSpirvAvailabilityPass();
182   registerRegionTestPasses();
183   registerShapeFunctionTestPasses();
184   registerSideEffectTestPasses();
185   registerSliceAnalysisTestPass();
186   registerSymbolTestPasses();
187   registerTestAffineAccessAnalysisPass();
188   registerTestAffineDataCopyPass();
189   registerTestAffineLoopUnswitchingPass();
190   registerTestAffineReifyValueBoundsPass();
191   registerTestAffineWalk();
192   registerTestBytecodeRoundtripPasses();
193   registerTestDecomposeAffineOpPass();
194   registerTestFunc();
195   registerTestGpuLoweringPasses();
196   registerTestGpuMemoryPromotionPass();
197   registerTestLoopPermutationPass();
198   registerTestMatchers();
199   registerTestOperationEqualPass();
200   registerTestPreserveUseListOrders();
201   registerTestPrintDefUsePass();
202   registerTestPrintInvalidPass();
203   registerTestPrintNestingPass();
204   registerTestReducer();
205   registerTestSpirvEntryPointABIPass();
206   registerTestSpirvModuleCombinerPass();
207   registerTestTraitsPass();
208   registerTosaTestQuantUtilAPIPass();
209   registerVectorizerTestPass();
210 
211   mlir::test::registerCommutativityUtils();
212   mlir::test::registerConvertCallOpPass();
213   mlir::test::registerConvertFuncOpPass();
214   mlir::test::registerInliner();
215   mlir::test::registerMemRefBoundCheck();
216   mlir::test::registerPatternsTestPass();
217   mlir::test::registerSimpleParametricTilingPass();
218   mlir::test::registerTestAffineLoopParametricTilingPass();
219   mlir::test::registerTestAliasAnalysisPass();
220   mlir::test::registerTestArithEmulateWideIntPass();
221   mlir::test::registerTestBuiltinAttributeInterfaces();
222   mlir::test::registerTestBuiltinDistinctAttributes();
223   mlir::test::registerTestCallGraphPass();
224   mlir::test::registerTestCfAssertPass();
225   mlir::test::registerTestCFGLoopInfoPass();
226   mlir::test::registerTestComposeSubView();
227   mlir::test::registerTestCompositePass();
228   mlir::test::registerTestConstantFold();
229   mlir::test::registerTestControlFlowSink();
230   mlir::test::registerTestConvertToSPIRVPass();
231   mlir::test::registerTestDataLayoutPropagation();
232   mlir::test::registerTestDataLayoutQuery();
233   mlir::test::registerTestDeadCodeAnalysisPass();
234   mlir::test::registerTestDecomposeCallGraphTypes();
235   mlir::test::registerTestDiagnosticsPass();
236   mlir::test::registerTestDiagnosticsMetadataPass();
237   mlir::test::registerTestDominancePass();
238   mlir::test::registerTestDynamicPipelinePass();
239   mlir::test::registerTestEmulateNarrowTypePass();
240   mlir::test::registerTestExpandMathPass();
241   mlir::test::registerTestFooAnalysisPass();
242   mlir::test::registerTestComposeSubView();
243   mlir::test::registerTestMultiBuffering();
244   mlir::test::registerTestIRVisitorsPass();
245   mlir::test::registerTestGenericIRVisitorsPass();
246   mlir::test::registerTestInterfaces();
247   mlir::test::registerTestIRVisitorsPass();
248   mlir::test::registerTestLastModifiedPass();
249   mlir::test::registerTestLinalgDecomposeOps();
250   mlir::test::registerTestLinalgDropUnitDims();
251   mlir::test::registerTestLinalgElementwiseFusion();
252   mlir::test::registerTestLinalgGreedyFusion();
253   mlir::test::registerTestLinalgRankReduceContractionOps();
254   mlir::test::registerTestLinalgTransforms();
255   mlir::test::registerTestLivenessAnalysisPass();
256   mlir::test::registerTestLivenessPass();
257   mlir::test::registerTestLLVMLegalizePatternsPass();
258   mlir::test::registerTestLoopFusion();
259   mlir::test::registerTestLoopMappingPass();
260   mlir::test::registerTestLoopUnrollingPass();
261   mlir::test::registerTestLowerToArmNeon();
262   mlir::test::registerTestLowerToArmSME();
263   mlir::test::registerTestLowerToLLVM();
264   mlir::test::registerTestMakeIsolatedFromAbovePass();
265   mlir::test::registerTestMatchReductionPass();
266   mlir::test::registerTestMathAlgebraicSimplificationPass();
267   mlir::test::registerTestMathPolynomialApproximationPass();
268   mlir::test::registerTestMathToVCIXPass();
269   mlir::test::registerTestMemRefDependenceCheck();
270   mlir::test::registerTestMemRefStrideCalculation();
271   mlir::test::registerTestMeshReshardingSpmdizationPass();
272   mlir::test::registerTestMeshSimplificationsPass();
273   mlir::test::registerTestMultiBuffering();
274   mlir::test::registerTestNextAccessPass();
275   mlir::test::registerTestNVGPULowerings();
276   mlir::test::registerTestOneToNTypeConversionPass();
277   mlir::test::registerTestOpaqueLoc();
278   mlir::test::registerTestOpLoweringPasses();
279   mlir::test::registerTestPadFusion();
280   mlir::test::registerTestRecursiveTypesPass();
281   mlir::test::registerTestSCFUpliftWhileToFor();
282   mlir::test::registerTestSCFUtilsPass();
283   mlir::test::registerTestSCFWhileOpBuilderPass();
284   mlir::test::registerTestSCFWrapInZeroTripCheckPasses();
285   mlir::test::registerTestShapeMappingPass();
286   mlir::test::registerTestSliceAnalysisPass();
287   mlir::test::registerTestSPIRVCPURunnerPipeline();
288   mlir::test::registerTestSPIRVFuncSignatureConversion();
289   mlir::test::registerTestSPIRVVectorUnrolling();
290   mlir::test::registerTestTensorCopyInsertionPass();
291   mlir::test::registerTestTensorTransforms();
292   mlir::test::registerTestTopologicalSortAnalysisPass();
293   mlir::test::registerTestTransformDialectEraseSchedulePass();
294   mlir::test::registerTestPassStateExtensionCommunication();
295   mlir::test::registerTestVectorLowerings();
296   mlir::test::registerTestVectorReductionToSPIRVDotProd();
297   mlir::test::registerTestVulkanRunnerPipeline();
298   mlir::test::registerTestWrittenToPass();
299 #if MLIR_ENABLE_PDL_IN_PATTERNMATCH
300   mlir::test::registerTestDialectConversionPasses();
301   mlir::test::registerTestPDLByteCodePass();
302   mlir::test::registerTestPDLLPasses();
303 #endif
304 }
305 #endif
306 
307 int main(int argc, char **argv) {
308   registerAllPasses();
309 #ifdef MLIR_INCLUDE_TESTS
310   registerTestPasses();
311 #endif
312   DialectRegistry registry;
313   registerAllDialects(registry);
314   registerAllExtensions(registry);
315 
316   // TODO: Remove this and the corresponding MLIRToLLVMIRTranslationRegistration
317   // cmake dependency when a safe dialect interface registration mechanism is
318   // implemented, see D157703 (and corresponding note on the declaration).
319   registerAllGPUToLLVMIRTranslations(registry);
320 
321 #ifdef MLIR_INCLUDE_TESTS
322   ::test::registerTestDialect(registry);
323   ::test::registerTestTransformDialectExtension(registry);
324   ::test::registerTestTilingInterfaceTransformDialectExtension(registry);
325   ::test::registerTestDynDialect(registry);
326 #endif
327   return mlir::asMainReturnCode(mlir::MlirOptMain(
328       argc, argv, "MLIR modular optimizer driver\n", registry));
329 }
330