diff options
author | Matthias Springer <me@m-sp.org> | 2023-09-06 14:28:05 +0200 |
---|---|---|
committer | Matthias Springer <me@m-sp.org> | 2023-09-06 14:28:43 +0200 |
commit | 1e1a3112f123de010c58af08ad87ae1dee20ff05 (patch) | |
tree | fa8487934caab16890d591e187e672f53727fa9c /llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | |
parent | e4d0e1209934ee8885fb4c3f046f9aa29c660d55 (diff) | |
download | llvm-1e1a3112f123de010c58af08ad87ae1dee20ff05.zip llvm-1e1a3112f123de010c58af08ad87ae1dee20ff05.tar.gz llvm-1e1a3112f123de010c58af08ad87ae1dee20ff05.tar.bz2 |
[mlir][bufferization] Privatize buffers for parallel regions
One-Shot Bufferize correctly handles RaW conflicts around repetitive regions (loops). Specical handling is needed for parallel regions. These are a special kind of repetitive regions that can have additional RaW conflicts that would not be present if the regions would be executed sequentially.
Example:
```
%0 = bufferization.alloc_tensor()
scf.forall ... {
%1 = linalg.fill ins(...) outs(%0)
...
scf.forall.in_parallel {
tensor.parallel_insert_slice %1 into ...
}
}
```
A separate (private) buffer must be allocated for each iteration of the `scf.forall` loop.
This change adds a new interface method to `BufferizableOpInterface` to detect parallel regions. By default, regions are assumed to be sequential.
A buffer is privatized if an OpOperand bufferizes to a memory read inside a parallel region that is different from the parallel region where operand's value is defined.
Differential Revision: https://reviews.llvm.org/D159286
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp')
0 files changed, 0 insertions, 0 deletions