forked from OSchip/llvm-project
[mlir] Refactor standalone-translate to use mlirTranslateMain()
This refactors the standalone-translate executable to use mlirTranslateMain() declared in Translation.h and further applies D87129. Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D87131
This commit is contained in:
parent
c633842f13
commit
4f7cdc10a8
|
@ -11,102 +11,17 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "mlir/IR/AsmState.h"
|
|
||||||
#include "mlir/IR/Diagnostics.h"
|
|
||||||
#include "mlir/IR/MLIRContext.h"
|
|
||||||
#include "mlir/InitAllDialects.h"
|
|
||||||
#include "mlir/InitAllTranslations.h"
|
#include "mlir/InitAllTranslations.h"
|
||||||
#include "mlir/Support/FileUtilities.h"
|
|
||||||
#include "mlir/Support/LogicalResult.h"
|
#include "mlir/Support/LogicalResult.h"
|
||||||
#include "mlir/Support/ToolUtilities.h"
|
|
||||||
#include "mlir/Translation.h"
|
#include "mlir/Translation.h"
|
||||||
#include "llvm/Support/InitLLVM.h"
|
|
||||||
#include "llvm/Support/MemoryBuffer.h"
|
|
||||||
#include "llvm/Support/SourceMgr.h"
|
|
||||||
#include "llvm/Support/ToolOutputFile.h"
|
|
||||||
|
|
||||||
#include "Standalone/StandaloneDialect.h"
|
#include "Standalone/StandaloneDialect.h"
|
||||||
|
|
||||||
static llvm::cl::opt<std::string> inputFilename(llvm::cl::Positional,
|
|
||||||
llvm::cl::desc("<input file>"),
|
|
||||||
llvm::cl::init("-"));
|
|
||||||
|
|
||||||
static llvm::cl::opt<std::string>
|
|
||||||
outputFilename("o", llvm::cl::desc("Output filename"),
|
|
||||||
llvm::cl::value_desc("filename"), llvm::cl::init("-"));
|
|
||||||
|
|
||||||
static llvm::cl::opt<bool>
|
|
||||||
splitInputFile("split-input-file",
|
|
||||||
llvm::cl::desc("Split the input file into pieces and "
|
|
||||||
"process each chunk independently"),
|
|
||||||
llvm::cl::init(false));
|
|
||||||
|
|
||||||
static llvm::cl::opt<bool> verifyDiagnostics(
|
|
||||||
"verify-diagnostics",
|
|
||||||
llvm::cl::desc("Check that emitted diagnostics match "
|
|
||||||
"expected-* lines on the corresponding line"),
|
|
||||||
llvm::cl::init(false));
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
mlir::registerAllTranslations();
|
mlir::registerAllTranslations();
|
||||||
|
|
||||||
// TODO: Register standalone translations here.
|
// TODO: Register standalone translations here.
|
||||||
|
|
||||||
llvm::InitLLVM y(argc, argv);
|
return failed(
|
||||||
|
mlir::mlirTranslateMain(argc, argv, "MLIR Translation Testing Tool"));
|
||||||
// Add flags for all the registered translations.
|
|
||||||
llvm::cl::opt<const mlir::TranslateFunction *, false, mlir::TranslationParser>
|
|
||||||
translationRequested("", llvm::cl::desc("Translation to perform"),
|
|
||||||
llvm::cl::Required);
|
|
||||||
mlir::registerAsmPrinterCLOptions();
|
|
||||||
mlir::registerMLIRContextCLOptions();
|
|
||||||
llvm::cl::ParseCommandLineOptions(argc, argv, "MLIR translation driver\n");
|
|
||||||
|
|
||||||
std::string errorMessage;
|
|
||||||
auto input = mlir::openInputFile(inputFilename, &errorMessage);
|
|
||||||
if (!input) {
|
|
||||||
llvm::errs() << errorMessage << "\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto output = mlir::openOutputFile(outputFilename, &errorMessage);
|
|
||||||
if (!output) {
|
|
||||||
llvm::errs() << errorMessage << "\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Processes the memory buffer with a new MLIRContext.
|
|
||||||
auto processBuffer = [&](std::unique_ptr<llvm::MemoryBuffer> ownedBuffer,
|
|
||||||
llvm::raw_ostream &os) {
|
|
||||||
mlir::MLIRContext context;
|
|
||||||
context.allowUnregisteredDialects();
|
|
||||||
context.printOpOnDiagnostic(!verifyDiagnostics);
|
|
||||||
llvm::SourceMgr sourceMgr;
|
|
||||||
sourceMgr.AddNewSourceBuffer(std::move(ownedBuffer), llvm::SMLoc());
|
|
||||||
|
|
||||||
if (!verifyDiagnostics) {
|
|
||||||
mlir::SourceMgrDiagnosticHandler sourceMgrHandler(sourceMgr, &context);
|
|
||||||
return (*translationRequested)(sourceMgr, os, &context);
|
|
||||||
}
|
|
||||||
|
|
||||||
// In the diagnostic verification flow, we ignore whether the translation
|
|
||||||
// failed (in most cases, it is expected to fail). Instead, we check if the
|
|
||||||
// diagnostics were produced as expected.
|
|
||||||
mlir::SourceMgrDiagnosticVerifierHandler sourceMgrHandler(sourceMgr,
|
|
||||||
&context);
|
|
||||||
(*translationRequested)(sourceMgr, os, &context);
|
|
||||||
return sourceMgrHandler.verify();
|
|
||||||
};
|
|
||||||
|
|
||||||
if (splitInputFile) {
|
|
||||||
if (failed(mlir::splitAndProcessBuffer(std::move(input), processBuffer,
|
|
||||||
output->os())))
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
if (failed(processBuffer(std::move(input), output->os())))
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
output->keep();
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue