[Mlir-commits] [mlir] [MLIR][SideEffects][MemoryEffects] Modified LICM to be more aggressive when checking movability of ops with MemWrite effects (PR #155344)
Mehdi Amini
llvmlistbot at llvm.org
Sat Sep 13 03:19:19 PDT 2025
================
@@ -58,13 +60,170 @@ static bool canBeHoisted(Operation *op,
op, [&](OpOperand &operand) { return definedOutside(operand.get()); });
}
+/// Merges srcEffect's Memory Effect on its resource into the
+/// resourceConflicts map, flagging the resource if the srcEffect
+/// results in a conflict.
+///
+/// \param resourceConflicts The map to store resources' conflicts status.
+/// \param srcEffect The effect to merge into the resourceConflicts map.
+/// \param srcHasConflict Whether the srcEffect results in a conflict based
+/// on higher level analysis.
+///
+/// resourceConflicts is modified by the function and will be non-empty
+static void
+mergeResource(DenseMap<TypeID, std::pair<bool, MemoryEffects::EffectInstance>>
+ &resourceConflicts,
+ const MemoryEffects::EffectInstance &srcEffect,
+ bool srcHasConflict) {
+
+ TypeID srcResourceID = srcEffect.getResource()->getResourceID();
+
+ bool srcIsAllocOrFree = isa<MemoryEffects::Allocate>(srcEffect.getEffect()) ||
+ isa<MemoryEffects::Free>(srcEffect.getEffect());
+
+ bool conflict = srcHasConflict || srcIsAllocOrFree;
+
+ auto dstIt = resourceConflicts.find(srcResourceID);
+
+ // if it doesn't already exist, create entry for resource in map
+ if (dstIt == resourceConflicts.end()) {
+ resourceConflicts.insert(
+ std::make_pair(srcResourceID, std::make_pair(conflict, srcEffect)));
+ return;
+ }
----------------
joker-eph wrote:
```suggestion
auto [dstIt, inserted] = resourceConflicts.insert(
std::make_pair(srcResourceID, std::make_pair(conflict, srcEffect)));
if (inserted)
return;
```
Nit: reduce the number of hash map lookups.
https://github.com/llvm/llvm-project/pull/155344
More information about the Mlir-commits
mailing list