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/Config/mlir-config.h" 14 #include "mlir/IR/AsmState.h" 15 #include "mlir/IR/Dialect.h" 16 #include "mlir/IR/MLIRContext.h" 17 #include "mlir/InitAllDialects.h" 18 #include "mlir/InitAllExtensions.h" 19 #include "mlir/InitAllPasses.h" 20 #include "mlir/Pass/Pass.h" 21 #include "mlir/Pass/PassManager.h" 22 #include "mlir/Support/FileUtilities.h" 23 #include "mlir/Target/LLVMIR/Dialect/All.h" 24 #include "mlir/Tools/mlir-opt/MlirOptMain.h" 25 #include "llvm/Support/CommandLine.h" 26 #include "llvm/Support/InitLLVM.h" 27 #include "llvm/Support/SourceMgr.h" 28 #include "llvm/Support/ToolOutputFile.h" 29 30 using namespace llvm; 31 using namespace mlir; 32 33 // Defined in the test directory, no public header. 34 namespace mlir { 35 void registerCloneTestPasses(); 36 void registerConvertToTargetEnvPass(); 37 void registerLazyLoadingTestPasses(); 38 void registerLoopLikeInterfaceTestPasses(); 39 void registerPassManagerTestPass(); 40 void registerPrintSpirvAvailabilityPass(); 41 void registerRegionTestPasses(); 42 void registerShapeFunctionTestPasses(); 43 void registerSideEffectTestPasses(); 44 void registerSliceAnalysisTestPass(); 45 void registerSymbolTestPasses(); 46 void registerTestAffineAccessAnalysisPass(); 47 void registerTestAffineDataCopyPass(); 48 void registerTestAffineLoopUnswitchingPass(); 49 void registerTestAffineReifyValueBoundsPass(); 50 void registerTestAffineWalk(); 51 void registerTestBytecodeRoundtripPasses(); 52 void registerTestDecomposeAffineOpPass(); 53 void registerTestFunc(); 54 void registerTestGpuLoweringPasses(); 55 void registerTestGpuMemoryPromotionPass(); 56 void registerTestLoopPermutationPass(); 57 void registerTestMatchers(); 58 void registerTestOperationEqualPass(); 59 void registerTestPreserveUseListOrders(); 60 void registerTestPrintDefUsePass(); 61 void registerTestPrintInvalidPass(); 62 void registerTestPrintNestingPass(); 63 void registerTestReducer(); 64 void registerTestSpirvEntryPointABIPass(); 65 void registerTestSpirvModuleCombinerPass(); 66 void registerTestTraitsPass(); 67 void registerTosaTestQuantUtilAPIPass(); 68 void registerVectorizerTestPass(); 69 70 namespace test { 71 void registerCommutativityUtils(); 72 void registerConvertCallOpPass(); 73 void registerConvertFuncOpPass(); 74 void registerInliner(); 75 void registerMemRefBoundCheck(); 76 void registerPatternsTestPass(); 77 void registerSimpleParametricTilingPass(); 78 void registerTestAffineLoopParametricTilingPass(); 79 void registerTestAliasAnalysisPass(); 80 void registerTestArithEmulateWideIntPass(); 81 void registerTestBuiltinAttributeInterfaces(); 82 void registerTestBuiltinDistinctAttributes(); 83 void registerTestCallGraphPass(); 84 void registerTestCfAssertPass(); 85 void registerTestCFGLoopInfoPass(); 86 void registerTestComposeSubView(); 87 void registerTestCompositePass(); 88 void registerTestConstantFold(); 89 void registerTestControlFlowSink(); 90 void registerTestConvertToSPIRVPass(); 91 void registerTestDataLayoutPropagation(); 92 void registerTestDataLayoutQuery(); 93 void registerTestDeadCodeAnalysisPass(); 94 void registerTestDecomposeCallGraphTypes(); 95 void registerTestDiagnosticsPass(); 96 void registerTestDiagnosticsMetadataPass(); 97 void registerTestDominancePass(); 98 void registerTestDynamicPipelinePass(); 99 void registerTestEmulateNarrowTypePass(); 100 void registerTestExpandMathPass(); 101 void registerTestFooAnalysisPass(); 102 void registerTestComposeSubView(); 103 void registerTestMultiBuffering(); 104 void registerTestIRVisitorsPass(); 105 void registerTestGenericIRVisitorsPass(); 106 void registerTestInterfaces(); 107 void registerTestIRVisitorsPass(); 108 void registerTestLastModifiedPass(); 109 void registerTestLinalgDecomposeOps(); 110 void registerTestLinalgDropUnitDims(); 111 void registerTestLinalgElementwiseFusion(); 112 void registerTestLinalgGreedyFusion(); 113 void registerTestLinalgRankReduceContractionOps(); 114 void registerTestLinalgTransforms(); 115 void registerTestLivenessAnalysisPass(); 116 void registerTestLivenessPass(); 117 void registerTestLLVMLegalizePatternsPass(); 118 void registerTestLoopFusion(); 119 void registerTestLoopMappingPass(); 120 void registerTestLoopUnrollingPass(); 121 void registerTestLowerToArmNeon(); 122 void registerTestLowerToArmSME(); 123 void registerTestLowerToLLVM(); 124 void registerTestMakeIsolatedFromAbovePass(); 125 void registerTestMatchReductionPass(); 126 void registerTestMathAlgebraicSimplificationPass(); 127 void registerTestMathPolynomialApproximationPass(); 128 void registerTestMathToVCIXPass(); 129 void registerTestMemRefDependenceCheck(); 130 void registerTestMemRefStrideCalculation(); 131 void registerTestMeshReshardingSpmdizationPass(); 132 void registerTestMeshSimplificationsPass(); 133 void registerTestMultiBuffering(); 134 void registerTestNextAccessPass(); 135 void registerTestNVGPULowerings(); 136 void registerTestOneToNTypeConversionPass(); 137 void registerTestOpaqueLoc(); 138 void registerTestOpLoweringPasses(); 139 void registerTestPadFusion(); 140 void registerTestRecursiveTypesPass(); 141 void registerTestSCFUpliftWhileToFor(); 142 void registerTestSCFUtilsPass(); 143 void registerTestSCFWhileOpBuilderPass(); 144 void registerTestSCFWrapInZeroTripCheckPasses(); 145 void registerTestShapeMappingPass(); 146 void registerTestSliceAnalysisPass(); 147 void registerTestSPIRVCPURunnerPipeline(); 148 void registerTestSPIRVFuncSignatureConversion(); 149 void registerTestSPIRVVectorUnrolling(); 150 void registerTestTensorCopyInsertionPass(); 151 void registerTestTensorTransforms(); 152 void registerTestTopologicalSortAnalysisPass(); 153 void registerTestTransformDialectEraseSchedulePass(); 154 void registerTestPassStateExtensionCommunication(); 155 void registerTestVectorLowerings(); 156 void registerTestVectorReductionToSPIRVDotProd(); 157 void registerTestVulkanRunnerPipeline(); 158 void registerTestWrittenToPass(); 159 #if MLIR_ENABLE_PDL_IN_PATTERNMATCH 160 void registerTestDialectConversionPasses(); 161 void registerTestPDLByteCodePass(); 162 void registerTestPDLLPasses(); 163 #endif 164 } // namespace test 165 } // namespace mlir 166 167 namespace test { 168 void registerTestDialect(DialectRegistry &); 169 void registerTestDynDialect(DialectRegistry &); 170 void registerTestTilingInterfaceTransformDialectExtension(DialectRegistry &); 171 void registerTestTransformDialectExtension(DialectRegistry &); 172 } // namespace test 173 174 #ifdef MLIR_INCLUDE_TESTS 175 void registerTestPasses() { 176 registerCloneTestPasses(); 177 registerConvertToTargetEnvPass(); 178 registerLazyLoadingTestPasses(); 179 registerLoopLikeInterfaceTestPasses(); 180 registerPassManagerTestPass(); 181 registerPrintSpirvAvailabilityPass(); 182 registerRegionTestPasses(); 183 registerShapeFunctionTestPasses(); 184 registerSideEffectTestPasses(); 185 registerSliceAnalysisTestPass(); 186 registerSymbolTestPasses(); 187 registerTestAffineAccessAnalysisPass(); 188 registerTestAffineDataCopyPass(); 189 registerTestAffineLoopUnswitchingPass(); 190 registerTestAffineReifyValueBoundsPass(); 191 registerTestAffineWalk(); 192 registerTestBytecodeRoundtripPasses(); 193 registerTestDecomposeAffineOpPass(); 194 registerTestFunc(); 195 registerTestGpuLoweringPasses(); 196 registerTestGpuMemoryPromotionPass(); 197 registerTestLoopPermutationPass(); 198 registerTestMatchers(); 199 registerTestOperationEqualPass(); 200 registerTestPreserveUseListOrders(); 201 registerTestPrintDefUsePass(); 202 registerTestPrintInvalidPass(); 203 registerTestPrintNestingPass(); 204 registerTestReducer(); 205 registerTestSpirvEntryPointABIPass(); 206 registerTestSpirvModuleCombinerPass(); 207 registerTestTraitsPass(); 208 registerTosaTestQuantUtilAPIPass(); 209 registerVectorizerTestPass(); 210 211 mlir::test::registerCommutativityUtils(); 212 mlir::test::registerConvertCallOpPass(); 213 mlir::test::registerConvertFuncOpPass(); 214 mlir::test::registerInliner(); 215 mlir::test::registerMemRefBoundCheck(); 216 mlir::test::registerPatternsTestPass(); 217 mlir::test::registerSimpleParametricTilingPass(); 218 mlir::test::registerTestAffineLoopParametricTilingPass(); 219 mlir::test::registerTestAliasAnalysisPass(); 220 mlir::test::registerTestArithEmulateWideIntPass(); 221 mlir::test::registerTestBuiltinAttributeInterfaces(); 222 mlir::test::registerTestBuiltinDistinctAttributes(); 223 mlir::test::registerTestCallGraphPass(); 224 mlir::test::registerTestCfAssertPass(); 225 mlir::test::registerTestCFGLoopInfoPass(); 226 mlir::test::registerTestComposeSubView(); 227 mlir::test::registerTestCompositePass(); 228 mlir::test::registerTestConstantFold(); 229 mlir::test::registerTestControlFlowSink(); 230 mlir::test::registerTestConvertToSPIRVPass(); 231 mlir::test::registerTestDataLayoutPropagation(); 232 mlir::test::registerTestDataLayoutQuery(); 233 mlir::test::registerTestDeadCodeAnalysisPass(); 234 mlir::test::registerTestDecomposeCallGraphTypes(); 235 mlir::test::registerTestDiagnosticsPass(); 236 mlir::test::registerTestDiagnosticsMetadataPass(); 237 mlir::test::registerTestDominancePass(); 238 mlir::test::registerTestDynamicPipelinePass(); 239 mlir::test::registerTestEmulateNarrowTypePass(); 240 mlir::test::registerTestExpandMathPass(); 241 mlir::test::registerTestFooAnalysisPass(); 242 mlir::test::registerTestComposeSubView(); 243 mlir::test::registerTestMultiBuffering(); 244 mlir::test::registerTestIRVisitorsPass(); 245 mlir::test::registerTestGenericIRVisitorsPass(); 246 mlir::test::registerTestInterfaces(); 247 mlir::test::registerTestIRVisitorsPass(); 248 mlir::test::registerTestLastModifiedPass(); 249 mlir::test::registerTestLinalgDecomposeOps(); 250 mlir::test::registerTestLinalgDropUnitDims(); 251 mlir::test::registerTestLinalgElementwiseFusion(); 252 mlir::test::registerTestLinalgGreedyFusion(); 253 mlir::test::registerTestLinalgRankReduceContractionOps(); 254 mlir::test::registerTestLinalgTransforms(); 255 mlir::test::registerTestLivenessAnalysisPass(); 256 mlir::test::registerTestLivenessPass(); 257 mlir::test::registerTestLLVMLegalizePatternsPass(); 258 mlir::test::registerTestLoopFusion(); 259 mlir::test::registerTestLoopMappingPass(); 260 mlir::test::registerTestLoopUnrollingPass(); 261 mlir::test::registerTestLowerToArmNeon(); 262 mlir::test::registerTestLowerToArmSME(); 263 mlir::test::registerTestLowerToLLVM(); 264 mlir::test::registerTestMakeIsolatedFromAbovePass(); 265 mlir::test::registerTestMatchReductionPass(); 266 mlir::test::registerTestMathAlgebraicSimplificationPass(); 267 mlir::test::registerTestMathPolynomialApproximationPass(); 268 mlir::test::registerTestMathToVCIXPass(); 269 mlir::test::registerTestMemRefDependenceCheck(); 270 mlir::test::registerTestMemRefStrideCalculation(); 271 mlir::test::registerTestMeshReshardingSpmdizationPass(); 272 mlir::test::registerTestMeshSimplificationsPass(); 273 mlir::test::registerTestMultiBuffering(); 274 mlir::test::registerTestNextAccessPass(); 275 mlir::test::registerTestNVGPULowerings(); 276 mlir::test::registerTestOneToNTypeConversionPass(); 277 mlir::test::registerTestOpaqueLoc(); 278 mlir::test::registerTestOpLoweringPasses(); 279 mlir::test::registerTestPadFusion(); 280 mlir::test::registerTestRecursiveTypesPass(); 281 mlir::test::registerTestSCFUpliftWhileToFor(); 282 mlir::test::registerTestSCFUtilsPass(); 283 mlir::test::registerTestSCFWhileOpBuilderPass(); 284 mlir::test::registerTestSCFWrapInZeroTripCheckPasses(); 285 mlir::test::registerTestShapeMappingPass(); 286 mlir::test::registerTestSliceAnalysisPass(); 287 mlir::test::registerTestSPIRVCPURunnerPipeline(); 288 mlir::test::registerTestSPIRVFuncSignatureConversion(); 289 mlir::test::registerTestSPIRVVectorUnrolling(); 290 mlir::test::registerTestTensorCopyInsertionPass(); 291 mlir::test::registerTestTensorTransforms(); 292 mlir::test::registerTestTopologicalSortAnalysisPass(); 293 mlir::test::registerTestTransformDialectEraseSchedulePass(); 294 mlir::test::registerTestPassStateExtensionCommunication(); 295 mlir::test::registerTestVectorLowerings(); 296 mlir::test::registerTestVectorReductionToSPIRVDotProd(); 297 mlir::test::registerTestVulkanRunnerPipeline(); 298 mlir::test::registerTestWrittenToPass(); 299 #if MLIR_ENABLE_PDL_IN_PATTERNMATCH 300 mlir::test::registerTestDialectConversionPasses(); 301 mlir::test::registerTestPDLByteCodePass(); 302 mlir::test::registerTestPDLLPasses(); 303 #endif 304 } 305 #endif 306 307 int main(int argc, char **argv) { 308 registerAllPasses(); 309 #ifdef MLIR_INCLUDE_TESTS 310 registerTestPasses(); 311 #endif 312 DialectRegistry registry; 313 registerAllDialects(registry); 314 registerAllExtensions(registry); 315 316 // TODO: Remove this and the corresponding MLIRToLLVMIRTranslationRegistration 317 // cmake dependency when a safe dialect interface registration mechanism is 318 // implemented, see D157703 (and corresponding note on the declaration). 319 registerAllGPUToLLVMIRTranslations(registry); 320 321 #ifdef MLIR_INCLUDE_TESTS 322 ::test::registerTestDialect(registry); 323 ::test::registerTestTransformDialectExtension(registry); 324 ::test::registerTestTilingInterfaceTransformDialectExtension(registry); 325 ::test::registerTestDynDialect(registry); 326 #endif 327 return mlir::asMainReturnCode(mlir::MlirOptMain( 328 argc, argv, "MLIR modular optimizer driver\n", registry)); 329 } 330