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/Tools/mlir-opt/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 registerCloneTestPasses(); 34 void registerPassManagerTestPass(); 35 void registerPrintSpirvAvailabilityPass(); 36 void registerShapeFunctionTestPasses(); 37 void registerSideEffectTestPasses(); 38 void registerSliceAnalysisTestPass(); 39 void registerSymbolTestPasses(); 40 void registerRegionTestPasses(); 41 void registerTestAffineDataCopyPass(); 42 void registerTestAffineLoopUnswitchingPass(); 43 void registerTestAllReduceLoweringPass(); 44 void registerTestFunc(); 45 void registerTestGpuMemoryPromotionPass(); 46 void registerTestLoopPermutationPass(); 47 void registerTestMatchers(); 48 void registerTestOperationEqualPass(); 49 void registerTestPrintDefUsePass(); 50 void registerTestPrintInvalidPass(); 51 void registerTestPrintNestingPass(); 52 void registerTestReducer(); 53 void registerTestSpirvEntryPointABIPass(); 54 void registerTestSpirvModuleCombinerPass(); 55 void registerTestTraitsPass(); 56 void registerTosaTestQuantUtilAPIPass(); 57 void registerVectorizerTestPass(); 58 59 namespace test { 60 void registerConvertCallOpPass(); 61 void registerInliner(); 62 void registerMemRefBoundCheck(); 63 void registerPatternsTestPass(); 64 void registerSimpleParametricTilingPass(); 65 void registerTestAffineLoopParametricTilingPass(); 66 void registerTestAliasAnalysisPass(); 67 void registerTestBuiltinAttributeInterfaces(); 68 void registerTestCallGraphPass(); 69 void registerTestConstantFold(); 70 void registerTestControlFlowSink(); 71 void registerTestGpuSerializeToCubinPass(); 72 void registerTestGpuSerializeToHsacoPass(); 73 void registerTestDataLayoutQuery(); 74 void registerTestDeadCodeAnalysisPass(); 75 void registerTestDecomposeCallGraphTypes(); 76 void registerTestDiagnosticsPass(); 77 void registerTestDominancePass(); 78 void registerTestDynamicPipelinePass(); 79 void registerTestExpandMathPass(); 80 void registerTestFooAnalysisPass(); 81 void registerTestComposeSubView(); 82 void registerTestMultiBuffering(); 83 void registerTestIntRangeInference(); 84 void registerTestIRVisitorsPass(); 85 void registerTestGenericIRVisitorsPass(); 86 void registerTestGenericIRVisitorsInterruptPass(); 87 void registerTestInterfaces(); 88 void registerTestLastModifiedPass(); 89 void registerTestLinalgDecomposeOps(); 90 void registerTestLinalgElementwiseFusion(); 91 void registerTestLinalgFusionTransforms(); 92 void registerTestLinalgTensorFusionTransforms(); 93 void registerTestLinalgTiledLoopFusionTransforms(); 94 void registerTestLinalgGreedyFusion(); 95 void registerTestLinalgHoisting(); 96 void registerTestLinalgTileAndFuseSequencePass(); 97 void registerTestLinalgTransforms(); 98 void registerTestLivenessPass(); 99 void registerTestLoopFusion(); 100 void registerTestLoopMappingPass(); 101 void registerTestLoopUnrollingPass(); 102 void registerTestMatchReductionPass(); 103 void registerTestMathAlgebraicSimplificationPass(); 104 void registerTestMathPolynomialApproximationPass(); 105 void registerTestMemRefDependenceCheck(); 106 void registerTestMemRefStrideCalculation(); 107 void registerTestOpaqueLoc(); 108 void registerTestPadFusion(); 109 void registerTestPDLByteCodePass(); 110 void registerTestPDLLPasses(); 111 void registerTestPreparationPassWithAllowedMemrefResults(); 112 void registerTestRecursiveTypesPass(); 113 void registerTestSCFUtilsPass(); 114 void registerTestSliceAnalysisPass(); 115 void registerTestTensorTransforms(); 116 void registerTestTilingInterface(); 117 void registerTestTransformDialectInterpreterPass(); 118 void registerTestVectorLowerings(); 119 } // namespace test 120 } // namespace mlir 121 122 namespace test { 123 void registerTestDialect(DialectRegistry &); 124 void registerTestTransformDialectExtension(DialectRegistry &); 125 } // namespace test 126 127 #ifdef MLIR_INCLUDE_TESTS 128 void registerTestPasses() { 129 registerCloneTestPasses(); 130 registerConvertToTargetEnvPass(); 131 registerPassManagerTestPass(); 132 registerPrintSpirvAvailabilityPass(); 133 registerShapeFunctionTestPasses(); 134 registerSideEffectTestPasses(); 135 registerSliceAnalysisTestPass(); 136 registerSymbolTestPasses(); 137 registerRegionTestPasses(); 138 registerTestAffineDataCopyPass(); 139 registerTestAffineLoopUnswitchingPass(); 140 registerTestAllReduceLoweringPass(); 141 registerTestFunc(); 142 registerTestGpuMemoryPromotionPass(); 143 registerTestLoopPermutationPass(); 144 registerTestMatchers(); 145 registerTestOperationEqualPass(); 146 registerTestPrintDefUsePass(); 147 registerTestPrintInvalidPass(); 148 registerTestPrintNestingPass(); 149 registerTestReducer(); 150 registerTestSpirvEntryPointABIPass(); 151 registerTestSpirvModuleCombinerPass(); 152 registerTestTraitsPass(); 153 registerVectorizerTestPass(); 154 registerTosaTestQuantUtilAPIPass(); 155 156 mlir::test::registerConvertCallOpPass(); 157 mlir::test::registerInliner(); 158 mlir::test::registerMemRefBoundCheck(); 159 mlir::test::registerPatternsTestPass(); 160 mlir::test::registerSimpleParametricTilingPass(); 161 mlir::test::registerTestAffineLoopParametricTilingPass(); 162 mlir::test::registerTestAliasAnalysisPass(); 163 mlir::test::registerTestBuiltinAttributeInterfaces(); 164 mlir::test::registerTestCallGraphPass(); 165 mlir::test::registerTestConstantFold(); 166 mlir::test::registerTestControlFlowSink(); 167 mlir::test::registerTestDiagnosticsPass(); 168 #if MLIR_CUDA_CONVERSIONS_ENABLED 169 mlir::test::registerTestGpuSerializeToCubinPass(); 170 #endif 171 #if MLIR_ROCM_CONVERSIONS_ENABLED 172 mlir::test::registerTestGpuSerializeToHsacoPass(); 173 #endif 174 mlir::test::registerTestDecomposeCallGraphTypes(); 175 mlir::test::registerTestDataLayoutQuery(); 176 mlir::test::registerTestDeadCodeAnalysisPass(); 177 mlir::test::registerTestDominancePass(); 178 mlir::test::registerTestDynamicPipelinePass(); 179 mlir::test::registerTestExpandMathPass(); 180 mlir::test::registerTestFooAnalysisPass(); 181 mlir::test::registerTestComposeSubView(); 182 mlir::test::registerTestMultiBuffering(); 183 mlir::test::registerTestIntRangeInference(); 184 mlir::test::registerTestIRVisitorsPass(); 185 mlir::test::registerTestGenericIRVisitorsPass(); 186 mlir::test::registerTestInterfaces(); 187 mlir::test::registerTestLastModifiedPass(); 188 mlir::test::registerTestLinalgDecomposeOps(); 189 mlir::test::registerTestLinalgElementwiseFusion(); 190 mlir::test::registerTestLinalgFusionTransforms(); 191 mlir::test::registerTestLinalgTensorFusionTransforms(); 192 mlir::test::registerTestLinalgTiledLoopFusionTransforms(); 193 mlir::test::registerTestLinalgGreedyFusion(); 194 mlir::test::registerTestLinalgHoisting(); 195 mlir::test::registerTestLinalgTileAndFuseSequencePass(); 196 mlir::test::registerTestLinalgTransforms(); 197 mlir::test::registerTestLivenessPass(); 198 mlir::test::registerTestLoopFusion(); 199 mlir::test::registerTestLoopMappingPass(); 200 mlir::test::registerTestLoopUnrollingPass(); 201 mlir::test::registerTestMatchReductionPass(); 202 mlir::test::registerTestMathAlgebraicSimplificationPass(); 203 mlir::test::registerTestMathPolynomialApproximationPass(); 204 mlir::test::registerTestMemRefDependenceCheck(); 205 mlir::test::registerTestMemRefStrideCalculation(); 206 mlir::test::registerTestOpaqueLoc(); 207 mlir::test::registerTestPadFusion(); 208 mlir::test::registerTestPDLByteCodePass(); 209 mlir::test::registerTestPDLLPasses(); 210 mlir::test::registerTestRecursiveTypesPass(); 211 mlir::test::registerTestSCFUtilsPass(); 212 mlir::test::registerTestSliceAnalysisPass(); 213 mlir::test::registerTestTensorTransforms(); 214 mlir::test::registerTestTilingInterface(); 215 mlir::test::registerTestTransformDialectInterpreterPass(); 216 mlir::test::registerTestVectorLowerings(); 217 } 218 #endif 219 220 int main(int argc, char **argv) { 221 registerAllPasses(); 222 #ifdef MLIR_INCLUDE_TESTS 223 registerTestPasses(); 224 #endif 225 DialectRegistry registry; 226 registerAllDialects(registry); 227 #ifdef MLIR_INCLUDE_TESTS 228 ::test::registerTestDialect(registry); 229 ::test::registerTestTransformDialectExtension(registry); 230 #endif 231 return mlir::asMainReturnCode( 232 mlir::MlirOptMain(argc, argv, "MLIR modular optimizer driver\n", registry, 233 /*preloadDialectsInContext=*/false)); 234 } 235