-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[MLIR][Python] add GetTypeID for llvm.struct_type and llvm.ptr and enable downcasting #169383
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[MLIR][Python] add GetTypeID for llvm.struct_type and llvm.ptr and enable downcasting #169383
Conversation
|
@llvm/pr-subscribers-mlir Author: Maksim Levental (makslevental) ChangesFull diff: https://github.com/llvm/llvm-project/pull/169383.diff 4 Files Affected:
diff --git a/mlir/include/mlir-c/Dialect/LLVM.h b/mlir/include/mlir-c/Dialect/LLVM.h
index c1ade9ed8617c..a0fbfd5c8227a 100644
--- a/mlir/include/mlir-c/Dialect/LLVM.h
+++ b/mlir/include/mlir-c/Dialect/LLVM.h
@@ -58,6 +58,8 @@ MLIR_CAPI_EXPORTED MlirType mlirLLVMFunctionTypeGetReturnType(MlirType type);
/// Returns `true` if the type is an LLVM dialect struct type.
MLIR_CAPI_EXPORTED bool mlirTypeIsALLVMStructType(MlirType type);
+MLIR_CAPI_EXPORTED MlirTypeID mlirLLVMStructTypeGetTypeID();
+
/// Returns `true` if the type is a literal (unnamed) LLVM struct type.
MLIR_CAPI_EXPORTED bool mlirLLVMStructTypeIsLiteral(MlirType type);
diff --git a/mlir/lib/Bindings/Python/DialectLLVM.cpp b/mlir/lib/Bindings/Python/DialectLLVM.cpp
index 870a713b8edcb..63aa707a4adde 100644
--- a/mlir/lib/Bindings/Python/DialectLLVM.cpp
+++ b/mlir/lib/Bindings/Python/DialectLLVM.cpp
@@ -31,8 +31,8 @@ static void populateDialectLLVMSubmodule(nanobind::module_ &m) {
// StructType
//===--------------------------------------------------------------------===//
- auto llvmStructType =
- mlir_type_subclass(m, "StructType", mlirTypeIsALLVMStructType);
+ auto llvmStructType = mlir_type_subclass(
+ m, "StructType", mlirTypeIsALLVMStructType, mlirLLVMStructTypeGetTypeID);
llvmStructType
.def_classmethod(
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index 6636f0ea73ec9..560148abf4c91 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -73,6 +73,10 @@ bool mlirTypeIsALLVMStructType(MlirType type) {
return isa<LLVM::LLVMStructType>(unwrap(type));
}
+MlirTypeID mlirLLVMStructTypeGetTypeID() {
+ return wrap(LLVM::LLVMStructType::getTypeID());
+}
+
bool mlirLLVMStructTypeIsLiteral(MlirType type) {
return !cast<LLVM::LLVMStructType>(unwrap(type)).isIdentified();
}
diff --git a/mlir/test/python/dialects/llvm.py b/mlir/test/python/dialects/llvm.py
index 8ea0fddee3f7c..547e541b43bdf 100644
--- a/mlir/test/python/dialects/llvm.py
+++ b/mlir/test/python/dialects/llvm.py
@@ -98,6 +98,9 @@ def testStructType():
assert opaque.opaque
# CHECK: !llvm.struct<"opaque", opaque>
+ typ = Type.parse('!llvm.struct<"zoo", (i32, i64)>')
+ assert isinstance(type, llvm.StructType)
+
# CHECK-LABEL: testSmoke
@constructAndPrintInModule
|
|
@llvm/pr-subscribers-mlir-llvm Author: Maksim Levental (makslevental) ChangesFull diff: https://github.com/llvm/llvm-project/pull/169383.diff 4 Files Affected:
diff --git a/mlir/include/mlir-c/Dialect/LLVM.h b/mlir/include/mlir-c/Dialect/LLVM.h
index c1ade9ed8617c..a0fbfd5c8227a 100644
--- a/mlir/include/mlir-c/Dialect/LLVM.h
+++ b/mlir/include/mlir-c/Dialect/LLVM.h
@@ -58,6 +58,8 @@ MLIR_CAPI_EXPORTED MlirType mlirLLVMFunctionTypeGetReturnType(MlirType type);
/// Returns `true` if the type is an LLVM dialect struct type.
MLIR_CAPI_EXPORTED bool mlirTypeIsALLVMStructType(MlirType type);
+MLIR_CAPI_EXPORTED MlirTypeID mlirLLVMStructTypeGetTypeID();
+
/// Returns `true` if the type is a literal (unnamed) LLVM struct type.
MLIR_CAPI_EXPORTED bool mlirLLVMStructTypeIsLiteral(MlirType type);
diff --git a/mlir/lib/Bindings/Python/DialectLLVM.cpp b/mlir/lib/Bindings/Python/DialectLLVM.cpp
index 870a713b8edcb..63aa707a4adde 100644
--- a/mlir/lib/Bindings/Python/DialectLLVM.cpp
+++ b/mlir/lib/Bindings/Python/DialectLLVM.cpp
@@ -31,8 +31,8 @@ static void populateDialectLLVMSubmodule(nanobind::module_ &m) {
// StructType
//===--------------------------------------------------------------------===//
- auto llvmStructType =
- mlir_type_subclass(m, "StructType", mlirTypeIsALLVMStructType);
+ auto llvmStructType = mlir_type_subclass(
+ m, "StructType", mlirTypeIsALLVMStructType, mlirLLVMStructTypeGetTypeID);
llvmStructType
.def_classmethod(
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index 6636f0ea73ec9..560148abf4c91 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -73,6 +73,10 @@ bool mlirTypeIsALLVMStructType(MlirType type) {
return isa<LLVM::LLVMStructType>(unwrap(type));
}
+MlirTypeID mlirLLVMStructTypeGetTypeID() {
+ return wrap(LLVM::LLVMStructType::getTypeID());
+}
+
bool mlirLLVMStructTypeIsLiteral(MlirType type) {
return !cast<LLVM::LLVMStructType>(unwrap(type)).isIdentified();
}
diff --git a/mlir/test/python/dialects/llvm.py b/mlir/test/python/dialects/llvm.py
index 8ea0fddee3f7c..547e541b43bdf 100644
--- a/mlir/test/python/dialects/llvm.py
+++ b/mlir/test/python/dialects/llvm.py
@@ -98,6 +98,9 @@ def testStructType():
assert opaque.opaque
# CHECK: !llvm.struct<"opaque", opaque>
+ typ = Type.parse('!llvm.struct<"zoo", (i32, i64)>')
+ assert isinstance(type, llvm.StructType)
+
# CHECK-LABEL: testSmoke
@constructAndPrintInModule
|
ca34a23 to
b8d0de7
Compare
ashermancinelli
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Big QoL improvement, thanks again! Does !llvm.ptr need the same thing?
Done |
060fe70 to
605dbe2
Compare
…able downcasting (llvm#169383)
No description provided.