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