File tree Expand file tree Collapse file tree 3 files changed +54
-2
lines changed Expand file tree Collapse file tree 3 files changed +54
-2
lines changed Original file line number Diff line number Diff line change @@ -53,6 +53,27 @@ mlirTypeFromLLVMIRTranslatorDestroy(MlirTypeFromLLVMIRTranslator translator);
53
53
MLIR_CAPI_EXPORTED MlirType mlirTypeFromLLVMIRTranslatorTranslateType (
54
54
MlirTypeFromLLVMIRTranslator translator , LLVMTypeRef llvmType );
55
55
56
+ struct MlirTypeToLLVMIRTranslator {
57
+ void * ptr ;
58
+ };
59
+
60
+ typedef struct MlirTypeToLLVMIRTranslator MlirTypeToLLVMIRTranslator ;
61
+
62
+ /// Create an LLVM::TypeToLLVMIRTranslator and transfer ownership to the
63
+ /// caller.
64
+ MLIR_CAPI_EXPORTED MlirTypeToLLVMIRTranslator
65
+ mlirTypeToLLVMIRTranslatorCreate (LLVMContextRef ctx );
66
+
67
+ /// Takes an LLVM::TypeToLLVMIRTranslator owned by the caller and destroys it.
68
+ /// It is the responsibility of the user to only pass an
69
+ /// LLVM::TypeToLLVMIRTranslator class.
70
+ MLIR_CAPI_EXPORTED void
71
+ mlirTypeToLLVMIRTranslatorDestroy (MlirTypeToLLVMIRTranslator translator );
72
+
73
+ /// Translates the given MLIR LLVM dialect to the LLVM IR type.
74
+ MLIR_CAPI_EXPORTED LLVMTypeRef mlirTypeToLLVMIRTranslatorTranslateType (
75
+ MlirTypeToLLVMIRTranslator translator , MlirType mlirType );
76
+
56
77
#ifdef __cplusplus
57
78
}
58
79
#endif
Original file line number Diff line number Diff line change @@ -55,3 +55,25 @@ MlirType mlirTypeFromLLVMIRTranslatorTranslateType(
55
55
mlir::Type type = translator_->translateType (llvm::unwrap (llvmType));
56
56
return wrap (type);
57
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
+ }
Original file line number Diff line number Diff line change @@ -64,13 +64,22 @@ static void testTypeFromLLVMIRTranslator(MlirContext ctx) {
64
64
LLVMContextRef llvmCtx = LLVMContextCreate ();
65
65
66
66
LLVMTypeRef llvmTy = LLVMInt32TypeInContext (llvmCtx );
67
- MlirTypeFromLLVMIRTranslator translator =
67
+ MlirTypeFromLLVMIRTranslator fromLLVMTranslator =
68
68
mlirTypeFromLLVMIRTranslatorCreate (ctx );
69
69
MlirType mlirTy =
70
- mlirTypeFromLLVMIRTranslatorTranslateType (translator , llvmTy );
70
+ mlirTypeFromLLVMIRTranslatorTranslateType (fromLLVMTranslator , llvmTy );
71
71
// CHECK: i32
72
72
mlirTypeDump (mlirTy );
73
73
74
+ MlirTypeToLLVMIRTranslator toLLVMTranslator =
75
+ mlirTypeToLLVMIRTranslatorCreate (llvmCtx );
76
+ LLVMTypeRef llvmTy2 =
77
+ mlirTypeToLLVMIRTranslatorTranslateType (toLLVMTranslator , mlirTy );
78
+ // CHECK: i32
79
+ LLVMDumpType (llvmTy2 );
80
+
81
+ mlirTypeFromLLVMIRTranslatorDestroy (fromLLVMTranslator );
82
+ mlirTypeToLLVMIRTranslatorDestroy (toLLVMTranslator );
74
83
LLVMContextDispose (llvmCtx );
75
84
}
76
85
You can’t perform that action at this time.
0 commit comments