This adds a '--no-implicit-module' option, which disables the insertion of a top-level 'builtin.module' during parsing. The translation APIs are also updated to take/return 'Operation*' instead of 'ModuleOp', to allow other operation types to be used. To simplify translations which are restricted to specific operation types, 'TranslateFromMLIRRegistration' has an overload which performs the necessary cast and error checking. Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D134237
43 lines
1.5 KiB
C++
43 lines
1.5 KiB
C++
//===- ConvertToLLVMIR.cpp - MLIR to LLVM IR conversion -------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements a translation between the MLIR LLVM dialect and LLVM IR.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/Dialect/DLTI/DLTI.h"
|
|
#include "mlir/Dialect/Func/IR/FuncOps.h"
|
|
#include "mlir/IR/BuiltinOps.h"
|
|
#include "mlir/Target/LLVMIR/Dialect/All.h"
|
|
#include "mlir/Target/LLVMIR/Export.h"
|
|
#include "mlir/Tools/mlir-translate/Translation.h"
|
|
#include "llvm/IR/LLVMContext.h"
|
|
#include "llvm/IR/Module.h"
|
|
|
|
using namespace mlir;
|
|
|
|
namespace mlir {
|
|
void registerToLLVMIRTranslation() {
|
|
TranslateFromMLIRRegistration registration(
|
|
"mlir-to-llvmir", "translate mlir to llvmir",
|
|
[](Operation *op, raw_ostream &output) {
|
|
llvm::LLVMContext llvmContext;
|
|
auto llvmModule = translateModuleToLLVMIR(op, llvmContext);
|
|
if (!llvmModule)
|
|
return failure();
|
|
|
|
llvmModule->print(output, nullptr);
|
|
return success();
|
|
},
|
|
[](DialectRegistry ®istry) {
|
|
registry.insert<DLTIDialect, func::FuncDialect>();
|
|
registerAllToLLVMIRTranslations(registry);
|
|
});
|
|
}
|
|
} // namespace mlir
|