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
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
//===- TranslateRegistration.cpp - Register translation -------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/Dialect/Arith/IR/Arith.h"
|
|
#include "mlir/Dialect/ControlFlow/IR/ControlFlow.h"
|
|
#include "mlir/Dialect/EmitC/IR/EmitC.h"
|
|
#include "mlir/Dialect/Func/IR/FuncOps.h"
|
|
#include "mlir/Dialect/Math/IR/Math.h"
|
|
#include "mlir/Dialect/SCF/IR/SCF.h"
|
|
#include "mlir/IR/BuiltinOps.h"
|
|
#include "mlir/IR/Dialect.h"
|
|
#include "mlir/Target/Cpp/CppEmitter.h"
|
|
#include "mlir/Tools/mlir-translate/Translation.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
|
|
using namespace mlir;
|
|
|
|
namespace mlir {
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Cpp registration
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
void registerToCppTranslation() {
|
|
static llvm::cl::opt<bool> declareVariablesAtTop(
|
|
"declare-variables-at-top",
|
|
llvm::cl::desc("Declare variables at top when emitting C/C++"),
|
|
llvm::cl::init(false));
|
|
|
|
TranslateFromMLIRRegistration reg(
|
|
"mlir-to-cpp", "translate from mlir to cpp",
|
|
[](Operation *op, raw_ostream &output) {
|
|
return emitc::translateToCpp(
|
|
op, output,
|
|
/*declareVariablesAtTop=*/declareVariablesAtTop);
|
|
},
|
|
[](DialectRegistry ®istry) {
|
|
// clang-format off
|
|
registry.insert<arith::ArithDialect,
|
|
cf::ControlFlowDialect,
|
|
emitc::EmitCDialect,
|
|
func::FuncDialect,
|
|
math::MathDialect,
|
|
scf::SCFDialect>();
|
|
// clang-format on
|
|
});
|
|
}
|
|
|
|
} // namespace mlir
|