forked from OSchip/llvm-project
199 lines
7.0 KiB
C++
199 lines
7.0 KiB
C++
//===- mlir-opt.cpp - MLIR Optimizer Driver -------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Main entry function for mlir-opt for when built as standalone binary.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/IR/AsmState.h"
|
|
#include "mlir/IR/Dialect.h"
|
|
#include "mlir/IR/MLIRContext.h"
|
|
#include "mlir/InitAllDialects.h"
|
|
#include "mlir/InitAllPasses.h"
|
|
#include "mlir/Pass/Pass.h"
|
|
#include "mlir/Pass/PassManager.h"
|
|
#include "mlir/Support/FileUtilities.h"
|
|
#include "mlir/Support/MlirOptMain.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/InitLLVM.h"
|
|
#include "llvm/Support/SourceMgr.h"
|
|
#include "llvm/Support/ToolOutputFile.h"
|
|
|
|
using namespace llvm;
|
|
using namespace mlir;
|
|
|
|
// Defined in the test directory, no public header.
|
|
namespace mlir {
|
|
void registerConvertToTargetEnvPass();
|
|
void registerPassManagerTestPass();
|
|
void registerPrintOpAvailabilityPass();
|
|
void registerShapeFunctionTestPasses();
|
|
void registerSideEffectTestPasses();
|
|
void registerSliceAnalysisTestPass();
|
|
void registerSymbolTestPasses();
|
|
void registerTestAffineDataCopyPass();
|
|
void registerTestAffineLoopUnswitchingPass();
|
|
void registerTestAllReduceLoweringPass();
|
|
void registerTestFunc();
|
|
void registerTestGpuMemoryPromotionPass();
|
|
void registerTestLoopPermutationPass();
|
|
void registerTestMatchers();
|
|
void registerTestPrintDefUsePass();
|
|
void registerTestPrintNestingPass();
|
|
void registerTestReducer();
|
|
void registerTestSpirvEntryPointABIPass();
|
|
void registerTestSpirvGLSLCanonicalizationPass();
|
|
void registerTestSpirvModuleCombinerPass();
|
|
void registerTestTraitsPass();
|
|
void registerTosaTestQuantUtilAPIPass();
|
|
void registerVectorizerTestPass();
|
|
|
|
namespace test {
|
|
void registerConvertCallOpPass();
|
|
void registerInliner();
|
|
void registerMemRefBoundCheck();
|
|
void registerPatternsTestPass();
|
|
void registerSimpleParametricTilingPass();
|
|
void registerTestAffineLoopParametricTilingPass();
|
|
void registerTestAliasAnalysisPass();
|
|
void registerTestCallGraphPass();
|
|
void registerTestConstantFold();
|
|
void registerTestConvVectorization();
|
|
void registerTestGpuSerializeToCubinPass();
|
|
void registerTestGpuSerializeToHsacoPass();
|
|
void registerTestDataLayoutQuery();
|
|
void registerTestDecomposeCallGraphTypes();
|
|
void registerTestDialect(DialectRegistry &);
|
|
void registerTestDominancePass();
|
|
void registerTestDynamicPipelinePass();
|
|
void registerTestExpandTanhPass();
|
|
void registerTestComposeSubView();
|
|
void registerTestGpuParallelLoopMappingPass();
|
|
void registerTestIRVisitorsPass();
|
|
void registerTestInterfaces();
|
|
void registerTestLinalgCodegenStrategy();
|
|
void registerTestLinalgElementwiseFusion();
|
|
void registerTestPushExpandingReshape();
|
|
void registerTestLinalgFusionTransforms();
|
|
void registerTestLinalgTensorFusionTransforms();
|
|
void registerTestLinalgTiledLoopFusionTransforms();
|
|
void registerTestLinalgGreedyFusion();
|
|
void registerTestLinalgHoisting();
|
|
void registerTestLinalgTileAndFuseSequencePass();
|
|
void registerTestLinalgTransforms();
|
|
void registerTestLivenessPass();
|
|
void registerTestLoopFusion();
|
|
void registerTestLoopMappingPass();
|
|
void registerTestLoopUnrollingPass();
|
|
void registerTestMathPolynomialApproximationPass();
|
|
void registerTestMemRefDependenceCheck();
|
|
void registerTestMemRefStrideCalculation();
|
|
void registerTestNumberOfBlockExecutionsPass();
|
|
void registerTestNumberOfOperationExecutionsPass();
|
|
void registerTestOpaqueLoc();
|
|
void registerTestPDLByteCodePass();
|
|
void registerTestPreparationPassWithAllowedMemrefResults();
|
|
void registerTestRecursiveTypesPass();
|
|
void registerTestSCFUtilsPass();
|
|
void registerTestVectorConversions();
|
|
} // namespace test
|
|
} // namespace mlir
|
|
|
|
#ifdef MLIR_INCLUDE_TESTS
|
|
void registerTestPasses() {
|
|
registerConvertToTargetEnvPass();
|
|
registerPassManagerTestPass();
|
|
registerPrintOpAvailabilityPass();
|
|
registerShapeFunctionTestPasses();
|
|
registerSideEffectTestPasses();
|
|
registerSliceAnalysisTestPass();
|
|
registerSymbolTestPasses();
|
|
registerTestAffineDataCopyPass();
|
|
registerTestAffineLoopUnswitchingPass();
|
|
registerTestAllReduceLoweringPass();
|
|
registerTestFunc();
|
|
registerTestGpuMemoryPromotionPass();
|
|
registerTestLoopPermutationPass();
|
|
registerTestMatchers();
|
|
registerTestPrintDefUsePass();
|
|
registerTestPrintNestingPass();
|
|
registerTestReducer();
|
|
registerTestSpirvEntryPointABIPass();
|
|
registerTestSpirvGLSLCanonicalizationPass();
|
|
registerTestSpirvModuleCombinerPass();
|
|
registerTestTraitsPass();
|
|
registerVectorizerTestPass();
|
|
registerTosaTestQuantUtilAPIPass();
|
|
|
|
test::registerConvertCallOpPass();
|
|
test::registerInliner();
|
|
test::registerMemRefBoundCheck();
|
|
test::registerPatternsTestPass();
|
|
test::registerSimpleParametricTilingPass();
|
|
test::registerTestAffineLoopParametricTilingPass();
|
|
test::registerTestAliasAnalysisPass();
|
|
test::registerTestCallGraphPass();
|
|
test::registerTestConstantFold();
|
|
#if MLIR_CUDA_CONVERSIONS_ENABLED
|
|
test::registerTestGpuSerializeToCubinPass();
|
|
#endif
|
|
#if MLIR_ROCM_CONVERSIONS_ENABLED
|
|
test::registerTestGpuSerializeToHsacoPass();
|
|
#endif
|
|
test::registerTestConvVectorization();
|
|
test::registerTestDecomposeCallGraphTypes();
|
|
test::registerTestDataLayoutQuery();
|
|
test::registerTestDominancePass();
|
|
test::registerTestDynamicPipelinePass();
|
|
test::registerTestExpandTanhPass();
|
|
test::registerTestComposeSubView();
|
|
test::registerTestGpuParallelLoopMappingPass();
|
|
test::registerTestIRVisitorsPass();
|
|
test::registerTestInterfaces();
|
|
test::registerTestLinalgCodegenStrategy();
|
|
test::registerTestLinalgElementwiseFusion();
|
|
test::registerTestPushExpandingReshape();
|
|
test::registerTestLinalgFusionTransforms();
|
|
test::registerTestLinalgTensorFusionTransforms();
|
|
test::registerTestLinalgTiledLoopFusionTransforms();
|
|
test::registerTestLinalgGreedyFusion();
|
|
test::registerTestLinalgHoisting();
|
|
test::registerTestLinalgTileAndFuseSequencePass();
|
|
test::registerTestLinalgTransforms();
|
|
test::registerTestLivenessPass();
|
|
test::registerTestLoopFusion();
|
|
test::registerTestLoopMappingPass();
|
|
test::registerTestLoopUnrollingPass();
|
|
test::registerTestMathPolynomialApproximationPass();
|
|
test::registerTestMemRefDependenceCheck();
|
|
test::registerTestMemRefStrideCalculation();
|
|
test::registerTestNumberOfBlockExecutionsPass();
|
|
test::registerTestNumberOfOperationExecutionsPass();
|
|
test::registerTestOpaqueLoc();
|
|
test::registerTestPDLByteCodePass();
|
|
test::registerTestRecursiveTypesPass();
|
|
test::registerTestSCFUtilsPass();
|
|
test::registerTestVectorConversions();
|
|
}
|
|
#endif
|
|
|
|
int main(int argc, char **argv) {
|
|
registerAllPasses();
|
|
#ifdef MLIR_INCLUDE_TESTS
|
|
registerTestPasses();
|
|
#endif
|
|
DialectRegistry registry;
|
|
registerAllDialects(registry);
|
|
#ifdef MLIR_INCLUDE_TESTS
|
|
test::registerTestDialect(registry);
|
|
#endif
|
|
return mlir::asMainReturnCode(
|
|
mlir::MlirOptMain(argc, argv, "MLIR modular optimizer driver\n", registry,
|
|
/*preloadDialectsInContext=*/false));
|
|
}
|