[Mlir-commits] [mlir] 5e24884 - [mlir][bufferization] Skip read collection when no writes exist (#231771)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Oct 14 20:15:00 PDT 2026
Author: Akun
Date: 2026-10-15T12:14:54+09:00
New Revision: 5e24884521ecb3f665a3b34491eebdb468c4d43d
URL: https://github.com/llvm/llvm-project/commit/5e24884521ecb3f665a3b34491eebdb468c4d43d
DIFF: https://github.com/llvm/llvm-project/commit/5e24884521ecb3f665a3b34491eebdb468c4d43d.diff
LOG: [mlir][bufferization] Skip read collection when no writes exist (#231771)
Collect aliasing writes before reads in the One-Shot Bufferization RaW
interference check. When there are no in-place writes, return without
collecting aliasing reads.
This avoids unnecessary read scans during pre-bufferization checks and
other cases without writes.
Added:
Modified:
mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp b/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp
index e8b3404843217..4a5752c8b7fbe 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp
@@ -1176,15 +1176,21 @@ static bool wouldCreateReadAfterWriteInterference(
OpOperand &operand, const DominanceInfo &domInfo,
OneShotAnalysisState &state, bool checkConsistencyOnly = false) {
// Collect reads and writes of all aliases of OpOperand and OpResult.
- DenseSet<OpOperand *> usesRead, usesWrite;
- getAliasingReads(usesRead, operand.get(), state);
+ // Collect writes before reads: without a write, there can be no conflict.
+ DenseSet<OpOperand *> usesWrite;
getAliasingInplaceWrites(usesWrite, operand.get(), state);
- for (AliasingValue alias : state.getAliasingValues(operand)) {
- getAliasingReads(usesRead, alias.value, state);
+ AliasingValueList aliases = state.getAliasingValues(operand);
+ for (AliasingValue alias : aliases)
getAliasingInplaceWrites(usesWrite, alias.value, state);
- }
if (!checkConsistencyOnly && state.bufferizesToMemoryWrite(operand))
usesWrite.insert(&operand);
+ if (usesWrite.empty())
+ return false;
+
+ DenseSet<OpOperand *> usesRead;
+ getAliasingReads(usesRead, operand.get(), state);
+ for (AliasingValue alias : aliases)
+ getAliasingReads(usesRead, alias.value, state);
return hasReadAfterWriteInterference(usesRead, usesWrite, domInfo, state);
}
More information about the Mlir-commits
mailing list