[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