|
|
@@ -0,0 +1,85 @@ |
|
|
|
/** |
|
|
|
* \file tools/mlir/mgb-opt/mgb-opt.cpp |
|
|
|
* MegEngine is Licensed under the Apache License, Version 2.0 (the "License") |
|
|
|
* |
|
|
|
* Copyright (c) 2014-2021 Megvii Inc. All rights reserved. |
|
|
|
* |
|
|
|
* Unless required by applicable law or agreed to in writing, |
|
|
|
* software distributed under the License is distributed on an |
|
|
|
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or |
|
|
|
* implied. |
|
|
|
*/ |
|
|
|
|
|
|
|
#include "megbrain/jit/mlir/ir/dialect.h" |
|
|
|
#include "megbrain/jit/mlir/ir/passes.h" |
|
|
|
|
|
|
|
#include <llvm/Support/CommandLine.h> |
|
|
|
#include <llvm/Support/InitLLVM.h> |
|
|
|
#include <llvm/Support/PrettyStackTrace.h> |
|
|
|
#include <llvm/Support/SourceMgr.h> |
|
|
|
#include <llvm/Support/ToolOutputFile.h> |
|
|
|
|
|
|
|
#include <mlir/Dialect/Affine/IR/AffineOps.h> |
|
|
|
#include <mlir/Dialect/LLVMIR/LLVMDialect.h> |
|
|
|
#include <mlir/IR/AsmState.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> |
|
|
|
|
|
|
|
using namespace llvm; |
|
|
|
using namespace mlir; |
|
|
|
|
|
|
|
//! TODO: Implement a custom MlirOptMain that supports the following flags. |
|
|
|
static cl::opt<bool> print_mlir{ |
|
|
|
"print-mlir", |
|
|
|
cl::desc("Prints MLIR IR after translation"), |
|
|
|
cl::init(false), |
|
|
|
}; |
|
|
|
|
|
|
|
static cl::list<std::string> input_values{ |
|
|
|
"input-value", |
|
|
|
cl::desc("Input shapes and optional values"), |
|
|
|
cl::ZeroOrMore, |
|
|
|
}; |
|
|
|
|
|
|
|
static cl::opt<std::string> input_values_file{ |
|
|
|
"input-value-file", |
|
|
|
cl::desc("Provides a file for input shapes and optional values (see " |
|
|
|
"ParseToVariantListFromFile in vm_util.h for details)"), |
|
|
|
cl::init(""), |
|
|
|
}; |
|
|
|
|
|
|
|
static cl::opt<bool> run{ |
|
|
|
"run", |
|
|
|
cl::desc("Runs the module (vs. just compiling and verifing)"), |
|
|
|
cl::init(true), |
|
|
|
}; |
|
|
|
|
|
|
|
static cl::list<std::string> run_args{ |
|
|
|
"run-arg", |
|
|
|
cl::desc("Argument passed to the execution flag parser"), |
|
|
|
cl::ZeroOrMore, |
|
|
|
}; |
|
|
|
|
|
|
|
namespace mgb { |
|
|
|
namespace jit { |
|
|
|
void register_test_mgb_to_affine_lowering_pass(); |
|
|
|
void register_test_affine_to_llvm_lowering_pass(); |
|
|
|
} // namespace jit |
|
|
|
} // namespace mgb |
|
|
|
|
|
|
|
int main(int argc, char** argv) { |
|
|
|
mlir::registerAllPasses(); |
|
|
|
|
|
|
|
mlir::DialectRegistry registry; |
|
|
|
mlir::registerAllDialects(registry); |
|
|
|
registry.insert<mgb::jit::MgbDialect>(); |
|
|
|
|
|
|
|
mgb::jit::register_test_mgb_to_affine_lowering_pass(); |
|
|
|
mgb::jit::register_test_affine_to_llvm_lowering_pass(); |
|
|
|
|
|
|
|
return failed(MlirOptMain(argc, argv, "MLIR modular optimizer driver", registry)); |
|
|
|
} |