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);
5353MLIR_CAPI_EXPORTED MlirType mlirTypeFromLLVMIRTranslatorTranslateType (
5454 MlirTypeFromLLVMIRTranslator translator , LLVMTypeRef llvmType );
5555
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+
5677#ifdef __cplusplus
5778}
5879#endif
Original file line number Diff line number Diff line change @@ -55,3 +55,25 @@ MlirType mlirTypeFromLLVMIRTranslatorTranslateType(
5555 mlir::Type type = translator_->translateType (llvm::unwrap (llvmType));
5656 return wrap (type);
5757}
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) {
6464 LLVMContextRef llvmCtx = LLVMContextCreate ();
6565
6666 LLVMTypeRef llvmTy = LLVMInt32TypeInContext (llvmCtx );
67- MlirTypeFromLLVMIRTranslator translator =
67+ MlirTypeFromLLVMIRTranslator fromLLVMTranslator =
6868 mlirTypeFromLLVMIRTranslatorCreate (ctx );
6969 MlirType mlirTy =
70- mlirTypeFromLLVMIRTranslatorTranslateType (translator , llvmTy );
70+ mlirTypeFromLLVMIRTranslatorTranslateType (fromLLVMTranslator , llvmTy );
7171 // CHECK: i32
7272 mlirTypeDump (mlirTy );
7373
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 );
7483 LLVMContextDispose (llvmCtx );
7584}
7685
You can’t perform that action at this time.
0 commit comments