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

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of mlir/tools/mlir-opt/mlir-opt.cpp