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