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