[Mlir-commits] [mlir] [mlir][memref] Fix mem2reg crash on zero-extent alloca (PR #216851)
Jianhui Li
llvmlistbot at llvm.org
Tue Aug 18 10:10:22 PDT 2026
================
@@ -103,15 +103,21 @@ SmallVector<MemorySlot> memref::AllocaOp::getPromotableSlots() {
// is only ever accessed as a whole buffer (e.g. through whole-buffer
// `vector.transfer_read`/`vector.transfer_write`).
if (VectorType::isValidElementType(type.getElementType())) {
+ // Vector types require strictly positive extents, so a memref with a zero
+ // extent has nothing to promote.
+ if (llvm::is_contained(type.getShape(), 0))
+ return {};
+
// Static shape: a fixed-size vector of the same extents.
if (type.hasStaticShape())
return {MemorySlot{getResult(), VectorType::get(type.getShape(),
type.getElementType())}};
// A 1-D memref whose single dynamic extent is `vector.vscale * C` maps to a
- // scalable `vector<[C]x...>` slot.
+ // scalable `vector<[C]x...>` slot, for a strictly positive `C`.
if (type.getRank() == 1 && type.isDynamicDim(0)) {
- if (std::optional<int64_t> c = matchVScaleMultiple(getDynamicSizes()[0]))
+ if (std::optional<int64_t> c = matchVScaleMultiple(getDynamicSizes()[0]);
----------------
Jianhui-Li wrote:
nit: consider a more meaningful name for "c", like "multiple".
https://github.com/llvm/llvm-project/pull/216851
More information about the Mlir-commits
mailing list