[Mlir-commits] [mlir] [MLIR][Python] add mlirLLVMStructTypeGetTypeID and enable downcasting for StructType (PR #169383)
Maksim Levental
llvmlistbot at llvm.org
Mon Nov 24 10:20:22 PST 2025
https://github.com/makslevental created https://github.com/llvm/llvm-project/pull/169383
None
>From ca34a23ad44fc5a5cc2f43533efa8045f70b94c0 Mon Sep 17 00:00:00 2001
From: Maksim Levental <maksim.levental at gmail.com>
Date: Mon, 24 Nov 2025 10:19:20 -0800
Subject: [PATCH] [MLIR][Python] add mlirLLVMStructTypeGetTypeID and enable
downcasting for StructType
---
mlir/include/mlir-c/Dialect/LLVM.h | 2 ++
mlir/lib/Bindings/Python/DialectLLVM.cpp | 4 ++--
mlir/lib/CAPI/Dialect/LLVM.cpp | 4 ++++
mlir/test/python/dialects/llvm.py | 3 +++
4 files changed, 11 insertions(+), 2 deletions(-)
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
More information about the Mlir-commits
mailing list