[Mlir-commits] [mlir] [mlir][MemRefToLLVM] Fix crash with unconvertable memory space (PR #132323)
Longsheng Mou
llvmlistbot at llvm.org
Mon Mar 24 08:25:16 PDT 2025
https://github.com/CoTinker updated https://github.com/llvm/llvm-project/pull/132323
>From 924870363a406635b82ca1c0a3bc441358cd8b5b Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Fri, 21 Mar 2025 11:27:30 +0800
Subject: [PATCH] [mlir][MemRefToLLVM] Fix crash with unconvertable memory
space
This PR adds handling when the `memref.alloca` with unconvertable memory space to prevent a crash.
---
mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp | 7 +++++--
mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir | 9 +++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp
index fe0ee11d84adb..cb4317ef1bcec 100644
--- a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp
+++ b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp
@@ -105,8 +105,11 @@ struct AllocaOpLowering : public AllocLikeOpLLVMLowering {
auto allocaOp = cast<memref::AllocaOp>(op);
auto elementType =
typeConverter->convertType(allocaOp.getType().getElementType());
- unsigned addrSpace =
- *getTypeConverter()->getMemRefAddressSpace(allocaOp.getType());
+ FailureOr<unsigned> maybeAddressSpace =
+ getTypeConverter()->getMemRefAddressSpace(allocaOp.getType());
+ if (failed(maybeAddressSpace))
+ return std::make_tuple(Value(), Value());
+ unsigned addrSpace = *maybeAddressSpace;
auto elementPtrType =
LLVM::LLVMPointerType::get(rewriter.getContext(), addrSpace);
diff --git a/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir b/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir
index 523e894aaef8d..5f5578144adc2 100644
--- a/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir
+++ b/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir
@@ -654,3 +654,12 @@ func.func @store_non_temporal(%input : memref<32xf32, affine_map<(d0) -> (d0)>>,
memref.store %2, %output[%1] {nontemporal = true} : memref<32xf32, affine_map<(d0) -> (d0)>>
func.return
}
+
+// -----
+
+// CHECK-LABEL: @alloca_unconvertable_memory_space
+func.func @alloca_unconvertable_memory_space() {
+ // CHECK: memref.alloca
+ %alloca = memref.alloca() : memref<1x32x33xi32, #spirv.storage_class<StorageBuffer>>
+ func.return
+}
More information about the Mlir-commits
mailing list