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