diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp --- a/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp +++ b/mlir/lib/Dialect/MemRef/IR/MemRefDialect.cpp @@ -46,18 +46,7 @@ llvm::Optional mlir::memref::findDealloc(Value allocValue) { Operation *dealloc = nullptr; for (Operation *user : allocValue.getUsers()) { - auto effectInterface = dyn_cast(user); - if (!effectInterface) - continue; - // Try to find a free effect that is applied to one of our values - // that will be automatically freed by our pass. - SmallVector effects; - effectInterface.getEffectsOnValue(allocValue, effects); - const bool isFree = - llvm::any_of(effects, [&](MemoryEffects::EffectInstance &it) { - return isa(it.getEffect()); - }); - if (!isFree) + if (!hasSingleEffect(user, allocValue)) continue; // If we found > 1 dealloc, return None. if (dealloc)