88// ===----------------------------------------------------------------------===//
99
1010#include " mlir-c/Target/LLVMIR.h"
11- #include " llvm-c/Support.h"
1211
1312#include " llvm/IR/LLVMContext.h"
1413#include " llvm/IR/Module.h"
15- #include < memory >
14+ #include " llvm/IR/Type.h "
1615
1716#include " mlir/CAPI/IR.h"
18- #include " mlir/CAPI/Support.h"
1917#include " mlir/CAPI/Wrap.h"
2018#include " mlir/Target/LLVMIR/ModuleTranslation.h"
19+ #include " mlir/Target/LLVMIR/TypeFromLLVM.h"
2120
2221using namespace mlir ;
2322
@@ -34,3 +33,47 @@ LLVMModuleRef mlirTranslateModuleToLLVMIR(MlirOperation module,
3433
3534 return moduleRef;
3635}
36+
37+ DEFINE_C_API_PTR_METHODS (MlirTypeFromLLVMIRTranslator,
38+ mlir::LLVM::TypeFromLLVMIRTranslator)
39+
40+ MlirTypeFromLLVMIRTranslator
41+ mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx) {
42+ MLIRContext *context = unwrap (ctx);
43+ auto *translator = new LLVM::TypeFromLLVMIRTranslator (*context);
44+ return wrap (translator);
45+ }
46+
47+ void mlirTypeFromLLVMIRTranslatorDestroy (
48+ MlirTypeFromLLVMIRTranslator translator) {
49+ delete static_cast <LLVM::TypeFromLLVMIRTranslator *>(unwrap (translator));
50+ }
51+
52+ MlirType mlirTypeFromLLVMIRTranslatorTranslateType (
53+ MlirTypeFromLLVMIRTranslator translator, LLVMTypeRef llvmType) {
54+ LLVM::TypeFromLLVMIRTranslator *translator_ = unwrap (translator);
55+ mlir::Type type = translator_->translateType (llvm::unwrap (llvmType));
56+ return wrap (type);
57+ }
58+
59+ DEFINE_C_API_PTR_METHODS (MlirTypeToLLVMIRTranslator,
60+ mlir::LLVM::TypeToLLVMIRTranslator)
61+
62+ MlirTypeToLLVMIRTranslator
63+ mlirTypeToLLVMIRTranslatorCreate(LLVMContextRef ctx) {
64+ llvm::LLVMContext *context = llvm::unwrap (ctx);
65+ auto *translator = new LLVM::TypeToLLVMIRTranslator (*context);
66+ return wrap (translator);
67+ }
68+
69+ void mlirTypeToLLVMIRTranslatorDestroy (MlirTypeToLLVMIRTranslator translator) {
70+ delete static_cast <LLVM::TypeToLLVMIRTranslator *>(unwrap (translator));
71+ }
72+
73+ LLVMTypeRef
74+ mlirTypeToLLVMIRTranslatorTranslateType (MlirTypeToLLVMIRTranslator translator,
75+ MlirType mlirType) {
76+ LLVM::TypeToLLVMIRTranslator *translator_ = unwrap (translator);
77+ llvm::Type *type = translator_->translateType (unwrap (mlirType));
78+ return llvm::wrap (type);
79+ }
0 commit comments