[mlir][bufferize] Improve analysis of external functions
authorMatthias Springer <springerm@google.com>
Fri, 9 Dec 2022 13:30:08 +0000 (14:30 +0100)
committerMatthias Springer <springerm@google.com>
Fri, 9 Dec 2022 13:36:33 +0000 (14:36 +0100)
commit4002eaaa01b71ab1f74fc15b151c72c0626d9d2d
treeb3eeadb7c4c3dfbf46608dbf02d9ed1257fd6331
parent66692c822aee47baa2cb71f92090d58a8dc01116
[mlir][bufferize] Improve analysis of external functions

External functions have no body, so they cannot be analyzed. Assume conservatively that each tensor bbArg may be aliasing with each tensor result. Furthermore, assume that each function arg is read and written-to after bufferization. This default behavior can be controlled with `bufferization.access` (similar to `bufferization.memory_layout`) in test cases.

Also fix a bug in the dialect attribute verifier, which did not run for region argument attributes.

Differential Revision: https://reviews.llvm.org/D139517
mlir/include/mlir/Dialect/Bufferization/IR/BufferizationBase.td
mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize-analysis.mlir
mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize-invalid.mlir
mlir/test/Dialect/Bufferization/invalid.mlir
mlir/test/Dialect/SCF/one-shot-bufferize.mlir