2019-11-12 10:31:56 +08:00
|
|
|
//===--------------------------- main.cpp ---------------------------------===//
|
|
|
|
//
|
|
|
|
// Copyright 2019 The IBM Research Authors.
|
|
|
|
//
|
|
|
|
// =============================================================================
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2020-03-25 01:48:54 +08:00
|
|
|
#include "src/MainUtils.hpp"
|
2019-12-23 09:49:29 +08:00
|
|
|
|
2019-12-20 03:24:37 +08:00
|
|
|
using namespace std;
|
2020-03-17 21:16:33 +08:00
|
|
|
using namespace onnx_mlir;
|
2019-12-20 03:24:37 +08:00
|
|
|
|
2019-12-23 09:33:33 +08:00
|
|
|
int main(int argc, char *argv[]) {
|
2020-03-25 01:48:54 +08:00
|
|
|
registerDialects();
|
2019-11-02 05:09:48 +08:00
|
|
|
|
2020-05-13 22:37:51 +08:00
|
|
|
llvm::cl::OptionCategory OnnxMlirOptions(
|
|
|
|
"ONNX MLIR Options", "These are frontend options.");
|
|
|
|
llvm::cl::opt<string> inputFilename(llvm::cl::Positional,
|
|
|
|
llvm::cl::desc("<input file>"), llvm::cl::init("-"),
|
2020-03-17 21:16:33 +08:00
|
|
|
llvm::cl::cat(OnnxMlirOptions));
|
2019-12-23 12:52:49 +08:00
|
|
|
|
|
|
|
llvm::cl::opt<EmissionTargetType> emissionTarget(
|
|
|
|
llvm::cl::desc("Choose target to emit:"),
|
|
|
|
llvm::cl::values(
|
2020-04-06 23:35:17 +08:00
|
|
|
clEnumVal(EmitONNXBasic,
|
2020-05-13 22:37:51 +08:00
|
|
|
"Ingest ONNX and emit the basic ONNX operations without"
|
|
|
|
"inferred shapes."),
|
|
|
|
clEnumVal(
|
|
|
|
EmitONNXIR, "Ingest ONNX and emit corresponding ONNX dialect."),
|
|
|
|
clEnumVal(
|
|
|
|
EmitMLIR, "Lower model to MLIR built-in transformation dialect."),
|
2019-12-23 14:14:35 +08:00
|
|
|
clEnumVal(EmitLLVMIR, "Lower model to LLVM IR (LLVM dialect)."),
|
|
|
|
clEnumVal(EmitLLVMBC, "Lower model to LLVM IR and emit (to file) "
|
|
|
|
"LLVM bitcode for model.")),
|
2020-03-17 21:16:33 +08:00
|
|
|
llvm::cl::init(EmitLLVMBC), llvm::cl::cat(OnnxMlirOptions));
|
2019-12-23 12:52:49 +08:00
|
|
|
|
2020-03-17 21:16:33 +08:00
|
|
|
llvm::cl::HideUnrelatedOptions(OnnxMlirOptions);
|
2020-05-13 22:37:51 +08:00
|
|
|
llvm::cl::ParseCommandLineOptions(
|
|
|
|
argc, argv, "ONNX MLIR modular optimizer driver\n");
|
2019-12-23 09:33:33 +08:00
|
|
|
|
2019-12-23 12:52:49 +08:00
|
|
|
mlir::MLIRContext context;
|
|
|
|
mlir::OwningModuleRef module;
|
2020-03-25 01:48:54 +08:00
|
|
|
processInputFile(inputFilename, emissionTarget, context, module);
|
2019-11-08 00:42:40 +08:00
|
|
|
|
2020-04-25 04:15:36 +08:00
|
|
|
// Input file base name.
|
|
|
|
string outputBaseName =
|
|
|
|
inputFilename.substr(0, inputFilename.find_last_of("."));
|
|
|
|
|
2019-11-08 00:42:40 +08:00
|
|
|
mlir::PassManager pm(&context);
|
2020-04-25 04:15:36 +08:00
|
|
|
if (emissionTarget >= EmitONNXIR) {
|
2020-04-06 23:35:17 +08:00
|
|
|
addONNXToMLIRPasses(pm);
|
2020-04-25 04:15:36 +08:00
|
|
|
}
|
2019-12-23 12:52:49 +08:00
|
|
|
|
|
|
|
if (emissionTarget >= EmitMLIR) {
|
2020-03-25 01:48:54 +08:00
|
|
|
addONNXToKrnlPasses(pm);
|
|
|
|
addKrnlToAffinePasses(pm);
|
2019-12-23 12:52:49 +08:00
|
|
|
}
|
|
|
|
|
2020-03-25 01:48:54 +08:00
|
|
|
if (emissionTarget >= EmitLLVMIR)
|
|
|
|
addKrnlToLLVMPasses(pm);
|
2019-10-09 07:25:59 +08:00
|
|
|
|
2019-12-23 09:49:29 +08:00
|
|
|
if (mlir::failed(pm.run(*module)))
|
|
|
|
return 4;
|
2019-11-28 11:56:34 +08:00
|
|
|
|
2020-04-25 04:15:36 +08:00
|
|
|
emitOutputFiles(outputBaseName, emissionTarget, context, module);
|
2020-01-21 01:30:08 +08:00
|
|
|
|
2019-12-20 03:24:37 +08:00
|
|
|
return 0;
|
|
|
|
}
|