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