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.
region?