[Mlir-commits] [mlir] [MLIR] Fix memref load vector element crash (PR #224834)
purnima shrivastava
llvmlistbot at llvm.org
Sat Sep 19 07:26:39 PDT 2026
https://github.com/purnima-nlp updated https://github.com/llvm/llvm-project/pull/224834
>From 29c0d1907cc296f54dfaafed95b47e56bd94f755 Mon Sep 17 00:00:00 2001
From: Purnima Shrivastava <purnimashrivastava05 at .com>
Date: Sat, 19 Sep 2026 19:30:00 +0530
Subject: [PATCH] [mlir][memref] Avoid crash on vector element load in narrow
type emulation
---
mlir/lib/Dialect/MemRef/Transforms/EmulateNarrowType.cpp | 2 ++
mlir/test/Dialect/MemRef/emulate-narrow-type-invalid.mlir | 7 +++++++
2 files changed, 9 insertions(+)
create mode 100644 mlir/test/Dialect/MemRef/emulate-narrow-type-invalid.mlir
diff --git a/mlir/lib/Dialect/MemRef/Transforms/EmulateNarrowType.cpp b/mlir/lib/Dialect/MemRef/Transforms/EmulateNarrowType.cpp
index a11e14faa54757..2a62fe7a7ecfe4 100644
--- a/mlir/lib/Dialect/MemRef/Transforms/EmulateNarrowType.cpp
+++ b/mlir/lib/Dialect/MemRef/Transforms/EmulateNarrowType.cpp
@@ -331,6 +331,8 @@ struct ConvertMemRefLoad final : OpConversionPattern<memref::LoadOp> {
auto convertedType = cast<MemRefType>(adaptor.getMemref().getType());
auto convertedElementType = convertedType.getElementType();
auto oldElementType = op.getMemRefType().getElementType();
+ if (!oldElementType.isIntOrFloat() || !convertedElementType.isIntOrFloat())
+ return failure();
int srcBits = oldElementType.getIntOrFloatBitWidth();
int dstBits = convertedElementType.getIntOrFloatBitWidth();
if (dstBits % srcBits != 0) {
diff --git a/mlir/test/Dialect/MemRef/emulate-narrow-type-invalid.mlir b/mlir/test/Dialect/MemRef/emulate-narrow-type-invalid.mlir
new file mode 100644
index 00000000000000..07e2c89e6b0967
--- /dev/null
+++ b/mlir/test/Dialect/MemRef/emulate-narrow-type-invalid.mlir
@@ -0,0 +1,7 @@
+// RUN: mlir-opt --test-emulate-narrow-int --verify-diagnostics %s
+
+func.func @memref_load_vector_element(%arg0: memref<4xvector<1xi1>>, %idx: index) {
+ // expected-error @+1 {{failed to legalize operation 'memref.load'}}
+ %0 = memref.load %arg0[%idx] : memref<4xvector<1xi1>>
+ return
+}
More information about the Mlir-commits
mailing list