llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
25.96k stars 10.6k forks source link

[mlir][bufferization][NFC] More documentation for `runOneShotBufferize` #90445

Closed matthias-springer closed 2 weeks ago

llvmbot commented 2 weeks ago

@llvm/pr-subscribers-mlir-bufferization

@llvm/pr-subscribers-mlir

Author: Matthias Springer (matthias-springer)

Changes --- Full diff: https://github.com/llvm/llvm-project/pull/90445.diff 1 Files Affected: - (modified) mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp (+17-4) ``````````diff diff --git a/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp b/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp index 531016130d1d8e..2d329a1f3d8892 100644 --- a/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp +++ b/mlir/lib/Dialect/Bufferization/Transforms/OneShotAnalysis.cpp @@ -1382,14 +1382,27 @@ LogicalResult bufferization::runOneShotBufferize(Operation *op, const OneShotBufferizationOptions &options, BufferizationStatistics *statistics) { + // copy-before-write deactivates the analysis. It cannot be used together with + // test-analysis-only. assert(!(options.copyBeforeWrite && options.testAnalysisOnly) && "invalid combination of bufferization flags"); - if (!options.copyBeforeWrite) { - // If a buffer is copied before every write, no analysis is needed. + + if (options.copyBeforeWrite) { + // Copy buffer before each write. No analysis is needed. + } else { + // Run One-Shot Analysis and insert buffer copies (on the tensor level) + // only where needed. This is the default and much more efficient than + // copy-before-write. if (failed(insertTensorCopies(op, options, statistics))) return failure(); + + // If test-analysis-only is set, the IR was annotated with RaW conflict + // markers (attributes) during One-Shot Analysis. + if (options.testAnalysisOnly) + return success(); } - if (options.testAnalysisOnly) - return success(); + + // Bufferize the op and its nested ops. If options.copyBeforeWrite is set, + // a new buffer copy is allocated every time a buffer is written to. return bufferizeOp(op, options, statistics); } ``````````