[mlir][Linalg] Add support for CallOp bufferization (10/n)
Cross function boundary bufferization support is added. This is enabled by cross-function boundary alias analysis, for which the bufferization process is extended: it can now modify the BufferizationAliasInfo as new ops are introduced. A number of simplifying assumptions are made: 1. by default we bufferize to the most dynamic strided memref type, further memref::CastOp canonicalizations are expected to clean up the IR. 2. in the current implementation, the stride information is always erased at function boundaries. A subsequent pass will be required to analyze the meet of all call ops to a function and decide whether more static buffer types can be used. This will potentially clone functions when it is deemed profitable to do so (e.g. when the stride-1 dimension may vary). 3. external function always bufferize to the most dynamic strided memref version. This may require special annotations for specifying that particular operands of top-level functions have contiguous buffer layout. An alternative to point 3. would be to support tensor layout annotations, which is currently not supported in MLIR. Differential revision: https://reviews.llvm.org/D104873
Loading
Please sign in to comment