File tree Expand file tree Collapse file tree 3 files changed +53
-3
lines changed Expand file tree Collapse file tree 3 files changed +53
-3
lines changed Original file line number Diff line number Diff line change 1616
1717#include "mlir-c/IR.h"
1818#include "mlir-c/Support.h"
19+ #include "mlir/CAPI/Wrap.h"
20+ #include "mlir/Target/LLVMIR/TypeFromLLVM.h"
1921#include "llvm-c/Support.h"
2022
2123#ifdef __cplusplus
@@ -32,6 +34,24 @@ extern "C" {
3234MLIR_CAPI_EXPORTED LLVMModuleRef
3335mlirTranslateModuleToLLVMIR (MlirOperation module , LLVMContextRef context );
3436
37+ struct MlirTypeFromLLVMIRTranslator {
38+ void * ptr ;
39+ };
40+
41+ typedef struct MlirTypeFromLLVMIRTranslator MlirTypeFromLLVMIRTranslator ;
42+
43+ DEFINE_C_API_PTR_METHODS (MlirTypeFromLLVMIRTranslator ,
44+ mlir ::LLVM ::TypeFromLLVMIRTranslator );
45+
46+ MLIR_CAPI_EXPORTED MlirTypeFromLLVMIRTranslator
47+ mlirTypeFromLLVMIRTranslatorCreate (MlirContext ctx );
48+
49+ MLIR_CAPI_EXPORTED MlirTypeFromLLVMIRTranslator
50+ mlirTypeFromLLVMIRTranslatorCreate (MlirContext ctx );
51+
52+ MLIR_CAPI_EXPORTED MlirType mlirTypeFromLLVMIRTranslatorTranslateType (
53+ MlirTypeFromLLVMIRTranslator translator , LLVMTypeRef llvmType );
54+
3555#ifdef __cplusplus
3656}
3757#endif
Original file line number Diff line number Diff line change 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,17 @@ LLVMModuleRef mlirTranslateModuleToLLVMIR(MlirOperation module,
3433
3534 return moduleRef;
3635}
36+
37+ MlirTypeFromLLVMIRTranslator
38+ mlirTypeFromLLVMIRTranslatorCreate (MlirContext ctx) {
39+ MLIRContext *context = unwrap (ctx);
40+ auto *translator = new LLVM::TypeFromLLVMIRTranslator (*context);
41+ return wrap (translator);
42+ }
43+
44+ MlirType mlirTypeFromLLVMIRTranslatorTranslateType (
45+ MlirTypeFromLLVMIRTranslator translator, LLVMTypeRef llvmType) {
46+ LLVM::TypeFromLLVMIRTranslator *translator_ = unwrap (translator);
47+ mlir::Type type = translator_->translateType (llvm::unwrap (llvmType));
48+ return wrap (type);
49+ }
Original file line number Diff line number Diff line change @@ -58,11 +58,28 @@ static void testToLLVMIR(MlirContext ctx) {
5858 LLVMContextDispose (llvmCtx );
5959}
6060
61+ // CHECK-LABEL: testTypeFromLLVMIRTranslator
62+ static void testTypeFromLLVMIRTranslator (MlirContext ctx ) {
63+ fprintf (stderr , "testTypeFromLLVMIRTranslator\n" );
64+ LLVMContextRef llvmCtx = LLVMContextCreate ();
65+
66+ LLVMTypeRef llvmTy = LLVMInt32TypeInContext (llvmCtx );
67+ MlirTypeFromLLVMIRTranslator translator =
68+ mlirTypeFromLLVMIRTranslatorCreate (ctx );
69+ MlirType mlirTy =
70+ mlirTypeFromLLVMIRTranslatorTranslateType (translator , llvmTy );
71+ // CHECK: i32
72+ mlirTypeDump (mlirTy );
73+
74+ LLVMContextDispose (llvmCtx );
75+ }
76+
6177int main (void ) {
6278 MlirContext ctx = mlirContextCreate ();
6379 mlirDialectHandleRegisterDialect (mlirGetDialectHandle__llvm__ (), ctx );
6480 mlirContextGetOrLoadDialect (ctx , mlirStringRefCreateFromCString ("llvm" ));
6581 testToLLVMIR (ctx );
82+ testTypeFromLLVMIRTranslator (ctx );
6683 mlirContextDestroy (ctx );
6784 return 0 ;
6885}
You can’t perform that action at this time.
0 commit comments