[Mlir-commits] [mlir] f5fa773 - [MemRefToEmitC] avoid crash when lower global from MemRef to EmitC (#182984)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Feb 24 05:52:45 PST 2026
Author: Congcong Cai
Date: 2026-02-24T21:52:41+08:00
New Revision: f5fa773d4bcb45a1f8a1c0592951046fa9d41ef3
URL: https://github.com/llvm/llvm-project/commit/f5fa773d4bcb45a1f8a1c0592951046fa9d41ef3
DIFF: https://github.com/llvm/llvm-project/commit/f5fa773d4bcb45a1f8a1c0592951046fa9d41ef3.diff
LOG: [MemRefToEmitC] avoid crash when lower global from MemRef to EmitC (#182984)
Fixed #181533.
Improve the robust when handling rank 0 special case
Added:
Modified:
mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
index 14702a9ec5c84..c0c0d87289704 100644
--- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
+++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
@@ -285,8 +285,12 @@ struct ConvertGlobal final : public OpConversionPattern<memref::GlobalOp> {
Attribute initialValue = operands.getInitialValueAttr();
if (opTy.getRank() == 0) {
- auto elementsAttr = llvm::cast<ElementsAttr>(*op.getInitialValue());
- initialValue = elementsAttr.getSplatValue<Attribute>();
+ // special case for `variable : memref<i32> = dense<-1>`
+ if (std::optional<Attribute> initValueAttr = op.getInitialValue()) {
+ if (auto elementsAttr = llvm::dyn_cast<ElementsAttr>(*initValueAttr)) {
+ initialValue = elementsAttr.getSplatValue<Attribute>();
+ }
+ }
}
if (isa_and_present<UnitAttr>(initialValue))
initialValue = {};
diff --git a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
index c7b043b8e2370..5ae22490ff05e 100644
--- a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
+++ b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
@@ -58,3 +58,13 @@ module @globals {
return
}
}
+
+// -----
+
+// CHECK-LABEL: rank0_globals
+module @rank0_globals {
+ memref.global @extern_global : memref<f32>
+ // CHECK-NEXT: emitc.global extern @extern_global : f32
+ memref.global @uninitialized_global : memref<f32> = uninitialized
+ // CHECK-NEXT: emitc.global extern @uninitialized_global : f32
+}
More information about the Mlir-commits
mailing list