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