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