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