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