Skip to content

Commit 473dd7a

Browse files
committed
[mlir][llvmir] expose TypeFromLLVMIRTranslator
1 parent c1ec5be commit 473dd7a

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

mlir/include/mlir-c/Target/LLVMIR.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
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" {
3234
MLIR_CAPI_EXPORTED LLVMModuleRef
3335
mlirTranslateModuleToLLVMIR(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

mlir/lib/CAPI/Target/LLVMIR.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@
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

2221
using 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+
}

mlir/test/CAPI/translation.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
6177
int 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
}

0 commit comments

Comments
 (0)