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 16
16
17
17
#include "mlir-c/IR.h"
18
18
#include "mlir-c/Support.h"
19
+ #include "mlir/CAPI/Wrap.h"
20
+ #include "mlir/Target/LLVMIR/TypeFromLLVM.h"
19
21
#include "llvm-c/Support.h"
20
22
21
23
#ifdef __cplusplus
@@ -32,6 +34,24 @@ extern "C" {
32
34
MLIR_CAPI_EXPORTED LLVMModuleRef
33
35
mlirTranslateModuleToLLVMIR (MlirOperation module , LLVMContextRef context );
34
36
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
+
35
55
#ifdef __cplusplus
36
56
}
37
57
#endif
Original file line number Diff line number Diff line change 8
8
// ===----------------------------------------------------------------------===//
9
9
10
10
#include " mlir-c/Target/LLVMIR.h"
11
- #include " llvm-c/Support.h"
12
11
13
12
#include " llvm/IR/LLVMContext.h"
14
13
#include " llvm/IR/Module.h"
15
- #include < memory >
14
+ #include " llvm/IR/Type.h "
16
15
17
16
#include " mlir/CAPI/IR.h"
18
- #include " mlir/CAPI/Support.h"
19
17
#include " mlir/CAPI/Wrap.h"
20
18
#include " mlir/Target/LLVMIR/ModuleTranslation.h"
19
+ #include " mlir/Target/LLVMIR/TypeFromLLVM.h"
21
20
22
21
using namespace mlir ;
23
22
@@ -34,3 +33,17 @@ LLVMModuleRef mlirTranslateModuleToLLVMIR(MlirOperation module,
34
33
35
34
return moduleRef;
36
35
}
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) {
58
58
LLVMContextDispose (llvmCtx );
59
59
}
60
60
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
+
61
77
int main (void ) {
62
78
MlirContext ctx = mlirContextCreate ();
63
79
mlirDialectHandleRegisterDialect (mlirGetDialectHandle__llvm__ (), ctx );
64
80
mlirContextGetOrLoadDialect (ctx , mlirStringRefCreateFromCString ("llvm" ));
65
81
testToLLVMIR (ctx );
82
+ testTypeFromLLVMIRTranslator (ctx );
66
83
mlirContextDestroy (ctx );
67
84
return 0 ;
68
85
}
You can’t perform that action at this time.
0 commit comments