1 //===- mlir-opt.cpp - MLIR Optimizer Driver -------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // Main entry function for mlir-opt for when built as standalone binary.
11 //===----------------------------------------------------------------------===//
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/InitAllExtensions.h"
18 #include "mlir/InitAllPasses.h"
19 #include "mlir/Pass/Pass.h"
20 #include "mlir/Pass/PassManager.h"
21 #include "mlir/Support/FileUtilities.h"
22 #include "mlir/Target/LLVMIR/Dialect/All.h"
23 #include "mlir/Tools/mlir-opt/MlirOptMain.h"
24 #include "llvm/Support/CommandLine.h"
25 #include "llvm/Support/InitLLVM.h"
26 #include "llvm/Support/SourceMgr.h"
27 #include "llvm/Support/ToolOutputFile.h"
32 // Defined in the test directory, no public header.
34 void registerConvertToTargetEnvPass();
35 void registerCloneTestPasses();
36 void registerLazyLoadingTestPasses();
37 void registerPassManagerTestPass();
38 void registerPrintSpirvAvailabilityPass();
39 void registerLoopLikeInterfaceTestPasses();
40 void registerShapeFunctionTestPasses();
41 void registerSideEffectTestPasses();
42 void registerSliceAnalysisTestPass();
43 void registerSymbolTestPasses();
44 void registerRegionTestPasses();
45 void registerTestAffineDataCopyPass();
46 void registerTestAffineReifyValueBoundsPass();
47 void registerTestBytecodeCallbackPasses();
48 void registerTestDecomposeAffineOpPass();
49 void registerTestAffineLoopUnswitchingPass();
50 void registerTestAllReduceLoweringPass();
51 void registerTestFunc();
52 void registerTestGpuMemoryPromotionPass();
53 void registerTestLoopPermutationPass();
54 void registerTestMatchers();
55 void registerTestOperationEqualPass();
56 void registerTestPrintDefUsePass();
57 void registerTestPrintInvalidPass();
58 void registerTestPrintNestingPass();
59 void registerTestPreserveUseListOrders();
60 void registerTestReducer();
61 void registerTestSpirvEntryPointABIPass();
62 void registerTestSpirvModuleCombinerPass();
63 void registerTestTraitsPass();
64 void registerTosaTestQuantUtilAPIPass();
65 void registerVectorizerTestPass();
68 void registerCommutativityUtils();
69 void registerConvertCallOpPass();
70 void registerInliner();
71 void registerMemRefBoundCheck();
72 void registerPatternsTestPass();
73 void registerSimpleParametricTilingPass();
74 void registerTestAffineLoopParametricTilingPass();
75 void registerTestArithEmulateWideIntPass();
76 void registerTestAliasAnalysisPass();
77 void registerTestBuiltinAttributeInterfaces();
78 void registerTestBuiltinDistinctAttributes();
79 void registerTestCallGraphPass();
80 void registerTestCfAssertPass();
81 void registerTestConstantFold();
82 void registerTestControlFlowSink();
83 void registerTestDataLayoutPropagation();
84 void registerTestDataLayoutQuery();
85 void registerTestDeadCodeAnalysisPass();
86 void registerTestDecomposeCallGraphTypes();
87 void registerTestDiagnosticsPass();
88 void registerTestDialectConversionPasses();
89 void registerTestDominancePass();
90 void registerTestDynamicPipelinePass();
91 void registerTestEmulateNarrowTypePass();
92 void registerTestExpandMathPass();
93 void registerTestFooAnalysisPass();
94 void registerTestComposeSubView();
95 void registerTestMultiBuffering();
96 void registerTestIntRangeInference();
97 void registerTestIRVisitorsPass();
98 void registerTestGenericIRVisitorsPass();
99 void registerTestGenericIRVisitorsInterruptPass();
100 void registerTestInterfaces();
101 void registerTestLastModifiedPass();
102 void registerTestLinalgDecomposeOps();
103 void registerTestLinalgDropUnitDims();
104 void registerTestLinalgElementwiseFusion();
105 void registerTestLinalgGreedyFusion();
106 void registerTestLinalgTransforms();
107 void registerTestLivenessAnalysisPass();
108 void registerTestLivenessPass();
109 void registerTestLoopFusion();
110 void registerTestCFGLoopInfoPass();
111 void registerTestLoopMappingPass();
112 void registerTestLoopUnrollingPass();
113 void registerTestLowerToLLVM();
114 void registerTestLowerToNVVM();
115 void registerTestMakeIsolatedFromAbovePass();
116 void registerTestMatchReductionPass();
117 void registerTestMathAlgebraicSimplificationPass();
118 void registerTestMathPolynomialApproximationPass();
119 void registerTestMemRefDependenceCheck();
120 void registerTestMemRefStrideCalculation();
121 void registerTestNextAccessPass();
122 void registerTestOneToNTypeConversionPass();
123 void registerTestOpaqueLoc();
124 void registerTestPadFusion();
125 void registerTestPDLByteCodePass();
126 void registerTestPDLLPasses();
127 void registerTestPreparationPassWithAllowedMemrefResults();
128 void registerTestRecursiveTypesPass();
129 void registerTestSCFUtilsPass();
130 void registerTestSCFWhileOpBuilderPass();
131 void registerTestShapeMappingPass();
132 void registerTestSliceAnalysisPass();
133 void registerTestTensorCopyInsertionPass();
134 void registerTestTensorTransforms();
135 void registerTestTilingInterface();
136 void registerTestTopologicalSortAnalysisPass();
137 void registerTestTransformDialectEraseSchedulePass();
138 void registerTestTransformDialectInterpreterPass();
139 void registerTestWrittenToPass();
140 void registerTestVectorLowerings();
141 void registerTestVectorReductionToSPIRVDotProd();
142 void registerTestNvgpuLowerings();
147 void registerTestDialect(DialectRegistry
&);
148 void registerTestTransformDialectExtension(DialectRegistry
&);
149 void registerTestDynDialect(DialectRegistry
&);
152 #ifdef MLIR_INCLUDE_TESTS
153 void registerTestPasses() {
154 registerCloneTestPasses();
155 registerConvertToTargetEnvPass();
156 registerPassManagerTestPass();
157 registerPrintSpirvAvailabilityPass();
158 registerLazyLoadingTestPasses();
159 registerLoopLikeInterfaceTestPasses();
160 registerShapeFunctionTestPasses();
161 registerSideEffectTestPasses();
162 registerSliceAnalysisTestPass();
163 registerSymbolTestPasses();
164 registerRegionTestPasses();
165 registerTestAffineDataCopyPass();
166 registerTestAffineReifyValueBoundsPass();
167 registerTestDecomposeAffineOpPass();
168 registerTestAffineLoopUnswitchingPass();
169 registerTestAllReduceLoweringPass();
170 registerTestBytecodeCallbackPasses();
172 registerTestGpuMemoryPromotionPass();
173 registerTestLoopPermutationPass();
174 registerTestMatchers();
175 registerTestOperationEqualPass();
176 registerTestPrintDefUsePass();
177 registerTestPrintInvalidPass();
178 registerTestPrintNestingPass();
179 registerTestPreserveUseListOrders();
180 registerTestReducer();
181 registerTestSpirvEntryPointABIPass();
182 registerTestSpirvModuleCombinerPass();
183 registerTestTraitsPass();
184 registerVectorizerTestPass();
185 registerTosaTestQuantUtilAPIPass();
187 mlir::test::registerCommutativityUtils();
188 mlir::test::registerConvertCallOpPass();
189 mlir::test::registerInliner();
190 mlir::test::registerMemRefBoundCheck();
191 mlir::test::registerPatternsTestPass();
192 mlir::test::registerSimpleParametricTilingPass();
193 mlir::test::registerTestAffineLoopParametricTilingPass();
194 mlir::test::registerTestAliasAnalysisPass();
195 mlir::test::registerTestArithEmulateWideIntPass();
196 mlir::test::registerTestBuiltinAttributeInterfaces();
197 mlir::test::registerTestBuiltinDistinctAttributes();
198 mlir::test::registerTestCallGraphPass();
199 mlir::test::registerTestCfAssertPass();
200 mlir::test::registerTestConstantFold();
201 mlir::test::registerTestControlFlowSink();
202 mlir::test::registerTestDiagnosticsPass();
203 mlir::test::registerTestDialectConversionPasses();
204 #if MLIR_CUDA_CONVERSIONS_ENABLED
205 mlir::test::registerTestLowerToNVVM();
207 mlir::test::registerTestDecomposeCallGraphTypes();
208 mlir::test::registerTestDataLayoutPropagation();
209 mlir::test::registerTestDataLayoutQuery();
210 mlir::test::registerTestDeadCodeAnalysisPass();
211 mlir::test::registerTestDominancePass();
212 mlir::test::registerTestDynamicPipelinePass();
213 mlir::test::registerTestEmulateNarrowTypePass();
214 mlir::test::registerTestExpandMathPass();
215 mlir::test::registerTestFooAnalysisPass();
216 mlir::test::registerTestComposeSubView();
217 mlir::test::registerTestMultiBuffering();
218 mlir::test::registerTestIntRangeInference();
219 mlir::test::registerTestIRVisitorsPass();
220 mlir::test::registerTestGenericIRVisitorsPass();
221 mlir::test::registerTestInterfaces();
222 mlir::test::registerTestLastModifiedPass();
223 mlir::test::registerTestLinalgDecomposeOps();
224 mlir::test::registerTestLinalgDropUnitDims();
225 mlir::test::registerTestLinalgElementwiseFusion();
226 mlir::test::registerTestLinalgGreedyFusion();
227 mlir::test::registerTestLinalgTransforms();
228 mlir::test::registerTestLivenessAnalysisPass();
229 mlir::test::registerTestLivenessPass();
230 mlir::test::registerTestLoopFusion();
231 mlir::test::registerTestCFGLoopInfoPass();
232 mlir::test::registerTestLoopMappingPass();
233 mlir::test::registerTestLoopUnrollingPass();
234 mlir::test::registerTestLowerToLLVM();
235 mlir::test::registerTestMakeIsolatedFromAbovePass();
236 mlir::test::registerTestMatchReductionPass();
237 mlir::test::registerTestMathAlgebraicSimplificationPass();
238 mlir::test::registerTestMathPolynomialApproximationPass();
239 mlir::test::registerTestMemRefDependenceCheck();
240 mlir::test::registerTestMemRefStrideCalculation();
241 mlir::test::registerTestNextAccessPass();
242 mlir::test::registerTestOneToNTypeConversionPass();
243 mlir::test::registerTestOpaqueLoc();
244 mlir::test::registerTestPadFusion();
245 mlir::test::registerTestPDLByteCodePass();
246 mlir::test::registerTestPDLLPasses();
247 mlir::test::registerTestRecursiveTypesPass();
248 mlir::test::registerTestSCFUtilsPass();
249 mlir::test::registerTestSCFWhileOpBuilderPass();
250 mlir::test::registerTestShapeMappingPass();
251 mlir::test::registerTestSliceAnalysisPass();
252 mlir::test::registerTestTensorCopyInsertionPass();
253 mlir::test::registerTestTensorTransforms();
254 mlir::test::registerTestTilingInterface();
255 mlir::test::registerTestTopologicalSortAnalysisPass();
256 mlir::test::registerTestTransformDialectEraseSchedulePass();
257 mlir::test::registerTestTransformDialectInterpreterPass();
258 mlir::test::registerTestVectorLowerings();
259 mlir::test::registerTestVectorReductionToSPIRVDotProd();
260 mlir::test::registerTestNvgpuLowerings();
261 mlir::test::registerTestWrittenToPass();
265 int main(int argc
, char **argv
) {
267 #if MLIR_DEPRECATED_GPU_SERIALIZATION_ENABLE == 1
268 registerGpuSerializeToCubinPass();
269 registerGpuSerializeToHsacoPass();
271 #ifdef MLIR_INCLUDE_TESTS
272 registerTestPasses();
274 DialectRegistry registry
;
275 registerAllDialects(registry
);
276 registerAllExtensions(registry
);
277 registerAllGPUToLLVMIRTranslations(registry
);
279 #ifdef MLIR_INCLUDE_TESTS
280 ::test::registerTestDialect(registry
);
281 ::test::registerTestTransformDialectExtension(registry
);
282 ::test::registerTestDynDialect(registry
);
284 return mlir::asMainReturnCode(mlir::MlirOptMain(
285 argc
, argv
, "MLIR modular optimizer driver\n", registry
));