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