[Mlir-commits] [mlir] [MLIR][SideEffects] Added 'Init' Memory Effect which defines an Idempotent MemWrite effect and modified LICM pass (PR #153281)

Mo Bagherbeik llvmlistbot at llvm.org
Wed Aug 13 14:00:18 PDT 2025


================
@@ -329,13 +356,99 @@ bool mlir::isMemoryEffectFree(Operation *op) {
 
   // Recurse into the regions and ensure that all nested ops are memory effect
   // free.
-  for (Region &region : op->getRegions())
-    for (Operation &op : region.getOps())
-      if (!isMemoryEffectFree(&op))
+  for (Region &region : op->getRegions()) {
+    for (Operation &op : region.getOps()) {
+      if (!isMemoryEffectFree(&op)) {
         return false;
+      }
+    }
+  }
   return true;
 }
 
+bool mlir::isMemoryInitMovable(Operation *op) {
+  if (auto memInterface = dyn_cast<MemoryEffectOpInterface>(op)) {
+    // gather all effects on op
+    llvm::SmallVector<MemoryEffects::EffectInstance> effects;
+    memInterface.getEffects(effects);
+
+    // op has interface but no effects, be conservative
+    if (effects.empty()) {
+      return false;
+    }
+
+    std::unordered_map<std::string, int> resources;
+
+    // ensure op only has Init effects and gather unique
+    // resource names
+    for (const MemoryEffects::EffectInstance &effect : effects) {
+      if (!isa<MemoryEffects::Init>(effect.getEffect())) {
+        return false;
+      }
+
+      std::string name = effect.getResource()->getName().str();
+      resources.try_emplace(name, 0);
----------------
mbagherbeikTT wrote:

perfect, thank you!

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


More information about the Mlir-commits mailing list