[Mlir-commits] [mlir] [mlir][memref] Support folding memref.load from global splat constants (PR #176627)

Jakub Kuderski llvmlistbot at llvm.org
Sun Jan 18 05:13:59 PST 2026


================
@@ -1705,6 +1705,26 @@ OpFoldResult LoadOp::fold(FoldAdaptor adaptor) {
   /// load(memrefcast) -> load
   if (succeeded(foldMemRefCast(*this)))
     return getResult();
+
+  // Fold load from a global constant memref.
+  auto getGlobalOp = getMemref().getDefiningOp<memref::GetGlobalOp>();
+  if (!getGlobalOp)
+    return {};
+
+  // Get to the memref.global defining the symbol.
+  auto global = SymbolTable::lookupNearestSymbolFrom<memref::GlobalOp>(
+      getGlobalOp, getGlobalOp.getNameAttr());
+  if (!global)
+    return {};
+  // Check if the global memref is a constant.
+  auto cstAttr =
+      dyn_cast_or_null<DenseElementsAttr>(global.getConstantInitValue());
----------------
kuhar wrote:

You can directly check for SplatElementsAttr

https://github.com/llvm/llvm-project/pull/176627


More information about the Mlir-commits mailing list