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/Support/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 registerPassManagerTestPass();
34 void registerPrintOpAvailabilityPass();
35 void registerShapeFunctionTestPasses();
36 void registerSideEffectTestPasses();
37 void registerSliceAnalysisTestPass();
38 void registerSymbolTestPasses();
39 void registerTestAffineDataCopyPass();
40 void registerTestAffineLoopUnswitchingPass();
41 void registerTestAllReduceLoweringPass();
42 void registerTestFunc();
43 void registerTestGpuMemoryPromotionPass();
44 void registerTestLoopPermutationPass();
45 void registerTestMatchers();
46 void registerTestOperationEqualPass();
47 void registerTestPrintDefUsePass();
48 void registerTestPrintNestingPass();
49 void registerTestReducer();
50 void registerTestSpirvEntryPointABIPass();
51 void registerTestSpirvGLSLCanonicalizationPass();
52 void registerTestSpirvModuleCombinerPass();
53 void registerTestTraitsPass();
54 void registerTosaTestQuantUtilAPIPass();
55 void registerVectorizerTestPass();
56 
57 namespace test {
58 void registerConvertCallOpPass();
59 void registerInliner();
60 void registerMemRefBoundCheck();
61 void registerPatternsTestPass();
62 void registerSimpleParametricTilingPass();
63 void registerTestAffineLoopParametricTilingPass();
64 void registerTestAliasAnalysisPass();
65 void registerTestBuiltinAttributeInterfaces();
66 void registerTestCallGraphPass();
67 void registerTestConstantFold();
68 void registerTestConvVectorization();
69 void registerTestGpuSerializeToCubinPass();
70 void registerTestGpuSerializeToHsacoPass();
71 void registerTestDataLayoutQuery();
72 void registerTestDecomposeCallGraphTypes();
73 void registerTestDiagnosticsPass();
74 void registerTestDominancePass();
75 void registerTestDynamicPipelinePass();
76 void registerTestExpandTanhPass();
77 void registerTestComposeSubView();
78 void registerTestGpuParallelLoopMappingPass();
79 void registerTestIRVisitorsPass();
80 void registerTestInterfaces();
81 void registerTestLinalgCodegenStrategy();
82 void registerTestLinalgControlFuseByExpansion();
83 void registerTestLinalgDistribution();
84 void registerTestLinalgElementwiseFusion();
85 void registerTestPushExpandingReshape();
86 void registerTestLinalgFusionTransforms();
87 void registerTestLinalgTensorFusionTransforms();
88 void registerTestLinalgTiledLoopFusionTransforms();
89 void registerTestLinalgGreedyFusion();
90 void registerTestLinalgHoisting();
91 void registerTestLinalgTileAndFuseSequencePass();
92 void registerTestLinalgTransforms();
93 void registerTestLivenessPass();
94 void registerTestLoopFusion();
95 void registerTestLoopMappingPass();
96 void registerTestLoopUnrollingPass();
97 void registerTestMathAlgebraicSimplificationPass();
98 void registerTestMathPolynomialApproximationPass();
99 void registerTestMemRefDependenceCheck();
100 void registerTestMemRefStrideCalculation();
101 void registerTestNumberOfBlockExecutionsPass();
102 void registerTestNumberOfOperationExecutionsPass();
103 void registerTestOpaqueLoc();
104 void registerTestPDLByteCodePass();
105 void registerTestPreparationPassWithAllowedMemrefResults();
106 void registerTestRecursiveTypesPass();
107 void registerTestSCFUtilsPass();
108 void registerTestVectorConversions();
109 } // namespace test
110 } // namespace mlir
111 
112 namespace test {
113 void registerTestDialect(DialectRegistry &);
114 } // namespace test
115 
116 #ifdef MLIR_INCLUDE_TESTS
117 void registerTestPasses() {
118   registerConvertToTargetEnvPass();
119   registerPassManagerTestPass();
120   registerPrintOpAvailabilityPass();
121   registerShapeFunctionTestPasses();
122   registerSideEffectTestPasses();
123   registerSliceAnalysisTestPass();
124   registerSymbolTestPasses();
125   registerTestAffineDataCopyPass();
126   registerTestAffineLoopUnswitchingPass();
127   registerTestAllReduceLoweringPass();
128   registerTestFunc();
129   registerTestGpuMemoryPromotionPass();
130   registerTestLoopPermutationPass();
131   registerTestMatchers();
132   registerTestOperationEqualPass();
133   registerTestPrintDefUsePass();
134   registerTestPrintNestingPass();
135   registerTestReducer();
136   registerTestSpirvEntryPointABIPass();
137   registerTestSpirvGLSLCanonicalizationPass();
138   registerTestSpirvModuleCombinerPass();
139   registerTestTraitsPass();
140   registerVectorizerTestPass();
141   registerTosaTestQuantUtilAPIPass();
142 
143   mlir::test::registerConvertCallOpPass();
144   mlir::test::registerInliner();
145   mlir::test::registerMemRefBoundCheck();
146   mlir::test::registerPatternsTestPass();
147   mlir::test::registerSimpleParametricTilingPass();
148   mlir::test::registerTestAffineLoopParametricTilingPass();
149   mlir::test::registerTestAliasAnalysisPass();
150   mlir::test::registerTestBuiltinAttributeInterfaces();
151   mlir::test::registerTestCallGraphPass();
152   mlir::test::registerTestConstantFold();
153   mlir::test::registerTestDiagnosticsPass();
154 #if MLIR_CUDA_CONVERSIONS_ENABLED
155   mlir::test::registerTestGpuSerializeToCubinPass();
156 #endif
157 #if MLIR_ROCM_CONVERSIONS_ENABLED
158   mlir::test::registerTestGpuSerializeToHsacoPass();
159 #endif
160   mlir::test::registerTestConvVectorization();
161   mlir::test::registerTestDecomposeCallGraphTypes();
162   mlir::test::registerTestDataLayoutQuery();
163   mlir::test::registerTestDominancePass();
164   mlir::test::registerTestDynamicPipelinePass();
165   mlir::test::registerTestExpandTanhPass();
166   mlir::test::registerTestComposeSubView();
167   mlir::test::registerTestGpuParallelLoopMappingPass();
168   mlir::test::registerTestIRVisitorsPass();
169   mlir::test::registerTestInterfaces();
170   mlir::test::registerTestLinalgCodegenStrategy();
171   mlir::test::registerTestLinalgControlFuseByExpansion();
172   mlir::test::registerTestLinalgDistribution();
173   mlir::test::registerTestLinalgElementwiseFusion();
174   mlir::test::registerTestPushExpandingReshape();
175   mlir::test::registerTestLinalgFusionTransforms();
176   mlir::test::registerTestLinalgTensorFusionTransforms();
177   mlir::test::registerTestLinalgTiledLoopFusionTransforms();
178   mlir::test::registerTestLinalgGreedyFusion();
179   mlir::test::registerTestLinalgHoisting();
180   mlir::test::registerTestLinalgTileAndFuseSequencePass();
181   mlir::test::registerTestLinalgTransforms();
182   mlir::test::registerTestLivenessPass();
183   mlir::test::registerTestLoopFusion();
184   mlir::test::registerTestLoopMappingPass();
185   mlir::test::registerTestLoopUnrollingPass();
186   mlir::test::registerTestMathAlgebraicSimplificationPass();
187   mlir::test::registerTestMathPolynomialApproximationPass();
188   mlir::test::registerTestMemRefDependenceCheck();
189   mlir::test::registerTestMemRefStrideCalculation();
190   mlir::test::registerTestNumberOfBlockExecutionsPass();
191   mlir::test::registerTestNumberOfOperationExecutionsPass();
192   mlir::test::registerTestOpaqueLoc();
193   mlir::test::registerTestPDLByteCodePass();
194   mlir::test::registerTestRecursiveTypesPass();
195   mlir::test::registerTestSCFUtilsPass();
196   mlir::test::registerTestVectorConversions();
197 }
198 #endif
199 
200 int main(int argc, char **argv) {
201   registerAllPasses();
202 #ifdef MLIR_INCLUDE_TESTS
203   registerTestPasses();
204 #endif
205   DialectRegistry registry;
206   registerAllDialects(registry);
207 #ifdef MLIR_INCLUDE_TESTS
208   ::test::registerTestDialect(registry);
209 #endif
210   return mlir::asMainReturnCode(
211       mlir::MlirOptMain(argc, argv, "MLIR modular optimizer driver\n", registry,
212                         /*preloadDialectsInContext=*/false));
213 }
214