[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