[Mlir-commits] [mlir] [mlir][llvmir] expose TypeFromLLVMIRTranslator (PR #124864)
Maksim Levental
llvmlistbot at llvm.org
Tue Jan 28 17:01:04 PST 2025
https://github.com/makslevental updated https://github.com/llvm/llvm-project/pull/124864
>From 473dd7a95a31bf9bc388879b272d2a69b328f9ff Mon Sep 17 00:00:00 2001
From: max <maksim.levental at gmail.com>
Date: Tue, 28 Jan 2025 19:37:34 -0500
Subject: [PATCH 1/2] [mlir][llvmir] expose TypeFromLLVMIRTranslator
---
mlir/include/mlir-c/Target/LLVMIR.h | 20 ++++++++++++++++++++
mlir/lib/CAPI/Target/LLVMIR.cpp | 19 ++++++++++++++++---
mlir/test/CAPI/translation.c | 17 +++++++++++++++++
3 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/mlir/include/mlir-c/Target/LLVMIR.h b/mlir/include/mlir-c/Target/LLVMIR.h
index effa74b905ce66..28b497f5d8d832 100644
--- a/mlir/include/mlir-c/Target/LLVMIR.h
+++ b/mlir/include/mlir-c/Target/LLVMIR.h
@@ -16,6 +16,8 @@
#include "mlir-c/IR.h"
#include "mlir-c/Support.h"
+#include "mlir/CAPI/Wrap.h"
+#include "mlir/Target/LLVMIR/TypeFromLLVM.h"
#include "llvm-c/Support.h"
#ifdef __cplusplus
@@ -32,6 +34,24 @@ extern "C" {
MLIR_CAPI_EXPORTED LLVMModuleRef
mlirTranslateModuleToLLVMIR(MlirOperation module, LLVMContextRef context);
+struct MlirTypeFromLLVMIRTranslator {
+ void *ptr;
+};
+
+typedef struct MlirTypeFromLLVMIRTranslator MlirTypeFromLLVMIRTranslator;
+
+DEFINE_C_API_PTR_METHODS(MlirTypeFromLLVMIRTranslator,
+ mlir::LLVM::TypeFromLLVMIRTranslator);
+
+MLIR_CAPI_EXPORTED MlirTypeFromLLVMIRTranslator
+mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx);
+
+MLIR_CAPI_EXPORTED MlirTypeFromLLVMIRTranslator
+mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx);
+
+MLIR_CAPI_EXPORTED MlirType mlirTypeFromLLVMIRTranslatorTranslateType(
+ MlirTypeFromLLVMIRTranslator translator, LLVMTypeRef llvmType);
+
#ifdef __cplusplus
}
#endif
diff --git a/mlir/lib/CAPI/Target/LLVMIR.cpp b/mlir/lib/CAPI/Target/LLVMIR.cpp
index dc798372be7467..6606e2376e0d1e 100644
--- a/mlir/lib/CAPI/Target/LLVMIR.cpp
+++ b/mlir/lib/CAPI/Target/LLVMIR.cpp
@@ -8,16 +8,15 @@
//===----------------------------------------------------------------------===//
#include "mlir-c/Target/LLVMIR.h"
-#include "llvm-c/Support.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
-#include <memory>
+#include "llvm/IR/Type.h"
#include "mlir/CAPI/IR.h"
-#include "mlir/CAPI/Support.h"
#include "mlir/CAPI/Wrap.h"
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
+#include "mlir/Target/LLVMIR/TypeFromLLVM.h"
using namespace mlir;
@@ -34,3 +33,17 @@ LLVMModuleRef mlirTranslateModuleToLLVMIR(MlirOperation module,
return moduleRef;
}
+
+MlirTypeFromLLVMIRTranslator
+mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx) {
+ MLIRContext *context = unwrap(ctx);
+ auto *translator = new LLVM::TypeFromLLVMIRTranslator(*context);
+ return wrap(translator);
+}
+
+MlirType mlirTypeFromLLVMIRTranslatorTranslateType(
+ MlirTypeFromLLVMIRTranslator translator, LLVMTypeRef llvmType) {
+ LLVM::TypeFromLLVMIRTranslator *translator_ = unwrap(translator);
+ mlir::Type type = translator_->translateType(llvm::unwrap(llvmType));
+ return wrap(type);
+}
\ No newline at end of file
diff --git a/mlir/test/CAPI/translation.c b/mlir/test/CAPI/translation.c
index c9233d95fd5120..ddbf217c1d9862 100644
--- a/mlir/test/CAPI/translation.c
+++ b/mlir/test/CAPI/translation.c
@@ -58,11 +58,28 @@ static void testToLLVMIR(MlirContext ctx) {
LLVMContextDispose(llvmCtx);
}
+// CHECK-LABEL: testTypeFromLLVMIRTranslator
+static void testTypeFromLLVMIRTranslator(MlirContext ctx) {
+ fprintf(stderr, "testTypeFromLLVMIRTranslator\n");
+ LLVMContextRef llvmCtx = LLVMContextCreate();
+
+ LLVMTypeRef llvmTy = LLVMInt32TypeInContext(llvmCtx);
+ MlirTypeFromLLVMIRTranslator translator =
+ mlirTypeFromLLVMIRTranslatorCreate(ctx);
+ MlirType mlirTy =
+ mlirTypeFromLLVMIRTranslatorTranslateType(translator, llvmTy);
+ // CHECK: i32
+ mlirTypeDump(mlirTy);
+
+ LLVMContextDispose(llvmCtx);
+}
+
int main(void) {
MlirContext ctx = mlirContextCreate();
mlirDialectHandleRegisterDialect(mlirGetDialectHandle__llvm__(), ctx);
mlirContextGetOrLoadDialect(ctx, mlirStringRefCreateFromCString("llvm"));
testToLLVMIR(ctx);
+ testTypeFromLLVMIRTranslator(ctx);
mlirContextDestroy(ctx);
return 0;
}
>From e36c294443e8ac655582790f2d75cc26d370f691 Mon Sep 17 00:00:00 2001
From: max <maksim.levental at gmail.com>
Date: Tue, 28 Jan 2025 20:00:40 -0500
Subject: [PATCH 2/2] [mlir][llvmir] expose TypeFromLLVMIRTranslator
---
mlir/include/mlir-c/Target/LLVMIR.h | 3 ---
mlir/lib/CAPI/Target/LLVMIR.cpp | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/mlir/include/mlir-c/Target/LLVMIR.h b/mlir/include/mlir-c/Target/LLVMIR.h
index 28b497f5d8d832..8fba2b410b18c9 100644
--- a/mlir/include/mlir-c/Target/LLVMIR.h
+++ b/mlir/include/mlir-c/Target/LLVMIR.h
@@ -40,9 +40,6 @@ struct MlirTypeFromLLVMIRTranslator {
typedef struct MlirTypeFromLLVMIRTranslator MlirTypeFromLLVMIRTranslator;
-DEFINE_C_API_PTR_METHODS(MlirTypeFromLLVMIRTranslator,
- mlir::LLVM::TypeFromLLVMIRTranslator);
-
MLIR_CAPI_EXPORTED MlirTypeFromLLVMIRTranslator
mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx);
diff --git a/mlir/lib/CAPI/Target/LLVMIR.cpp b/mlir/lib/CAPI/Target/LLVMIR.cpp
index 6606e2376e0d1e..7d81b490ed0c7b 100644
--- a/mlir/lib/CAPI/Target/LLVMIR.cpp
+++ b/mlir/lib/CAPI/Target/LLVMIR.cpp
@@ -34,6 +34,9 @@ LLVMModuleRef mlirTranslateModuleToLLVMIR(MlirOperation module,
return moduleRef;
}
+DEFINE_C_API_PTR_METHODS(MlirTypeFromLLVMIRTranslator,
+ mlir::LLVM::TypeFromLLVMIRTranslator);
+
MlirTypeFromLLVMIRTranslator
mlirTypeFromLLVMIRTranslatorCreate(MlirContext ctx) {
MLIRContext *context = unwrap(ctx);
More information about the Mlir-commits
mailing list