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