brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 2a99166 Raw
50 lines · cpp
1//===- TranslationRegistration.cpp - Register translation -----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir/Target/IRDLToCpp/TranslationRegistration.h"10#include "mlir/Dialect/IRDL/IR/IRDL.h"11#include "mlir/IR/BuiltinOps.h"12#include "mlir/Target/IRDLToCpp/IRDLToCpp.h"13#include "mlir/Tools/mlir-translate/Translation.h"14#include "llvm/ADT/TypeSwitch.h"15#include "llvm/Support/Casting.h"16 17using namespace mlir;18 19namespace mlir {20 21//===----------------------------------------------------------------------===//22// Translation registration23//===----------------------------------------------------------------------===//24 25void registerIRDLToCppTranslation() {26  TranslateFromMLIRRegistration reg(27      "irdl-to-cpp", "translate IRDL dialect definitions to C++ definitions",28      [](Operation *op, raw_ostream &output) {29        return TypeSwitch<Operation *, LogicalResult>(op)30            .Case<irdl::DialectOp>([&](irdl::DialectOp dialectOp) {31              return irdl::translateIRDLDialectToCpp(dialectOp, output);32            })33            .Case<ModuleOp>([&](ModuleOp moduleOp) {34              for (Operation &op : moduleOp.getBody()->getOperations())35                if (auto dialectOp = llvm::dyn_cast<irdl::DialectOp>(op))36                  if (failed(37                          irdl::translateIRDLDialectToCpp(dialectOp, output)))38                    return failure();39              return success();40            })41            .Default([](Operation *op) {42              return op->emitError(43                  "unsupported operation for IRDL to C++ translation");44            });45      },46      [](DialectRegistry &registry) { registry.insert<irdl::IRDLDialect>(); });47}48 49} // namespace mlir50