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