brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 00229df Raw
89 lines · cpp
1//===-- LLVMIR.h - C Interface for MLIR LLVMIR Target ---------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM4// Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#include "mlir-c/Target/LLVMIR.h"11 12#include "llvm/IR/LLVMContext.h"13#include "llvm/IR/Module.h"14#include "llvm/IR/Type.h"15 16#include "mlir/CAPI/IR.h"17#include "mlir/CAPI/Wrap.h"18#include "mlir/Target/LLVMIR/ModuleTranslation.h"19#include "mlir/Target/LLVMIR/TypeFromLLVM.h"20 21using namespace mlir;22 23LLVMModuleRef mlirTranslateModuleToLLVMIR(MlirOperation module,24                                          LLVMContextRef context) {25  Operation *moduleOp = unwrap(module);26 27  llvm::LLVMContext *ctx = llvm::unwrap(context);28 29  std::unique_ptr<llvm::Module> llvmModule =30      mlir::translateModuleToLLVMIR(moduleOp, *ctx);31 32  LLVMModuleRef moduleRef = llvm::wrap(llvmModule.release());33 34  return moduleRef;35}36 37char *mlirTranslateModuleToLLVMIRToString(MlirOperation module) {38  LLVMContextRef llvmCtx = LLVMContextCreate();39  LLVMModuleRef llvmModule = mlirTranslateModuleToLLVMIR(module, llvmCtx);40  char *llvmir = LLVMPrintModuleToString(llvmModule);41  LLVMDisposeModule(llvmModule);42  LLVMContextDispose(llvmCtx);43  return llvmir;44}45 46DEFINE_C_API_PTR_METHODS(MlirTypeFromLLVMIRTranslator,47                         mlir::LLVM::TypeFromLLVMIRTranslator)48 49MlirTypeFromLLVMIRTranslator50mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx) {51  MLIRContext *context = unwrap(ctx);52  auto *translator = new LLVM::TypeFromLLVMIRTranslator(*context);53  return wrap(translator);54}55 56void mlirTypeFromLLVMIRTranslatorDestroy(57    MlirTypeFromLLVMIRTranslator translator) {58  delete static_cast<LLVM::TypeFromLLVMIRTranslator *>(unwrap(translator));59}60 61MlirType mlirTypeFromLLVMIRTranslatorTranslateType(62    MlirTypeFromLLVMIRTranslator translator, LLVMTypeRef llvmType) {63  LLVM::TypeFromLLVMIRTranslator *translator_ = unwrap(translator);64  mlir::Type type = translator_->translateType(llvm::unwrap(llvmType));65  return wrap(type);66}67 68DEFINE_C_API_PTR_METHODS(MlirTypeToLLVMIRTranslator,69                         mlir::LLVM::TypeToLLVMIRTranslator)70 71MlirTypeToLLVMIRTranslator72mlirTypeToLLVMIRTranslatorCreate(LLVMContextRef ctx) {73  llvm::LLVMContext *context = llvm::unwrap(ctx);74  auto *translator = new LLVM::TypeToLLVMIRTranslator(*context);75  return wrap(translator);76}77 78void mlirTypeToLLVMIRTranslatorDestroy(MlirTypeToLLVMIRTranslator translator) {79  delete static_cast<LLVM::TypeToLLVMIRTranslator *>(unwrap(translator));80}81 82LLVMTypeRef83mlirTypeToLLVMIRTranslatorTranslateType(MlirTypeToLLVMIRTranslator translator,84                                        MlirType mlirType) {85  LLVM::TypeToLLVMIRTranslator *translator_ = unwrap(translator);86  llvm::Type *type = translator_->translateType(unwrap(mlirType));87  return llvm::wrap(type);88}89