If the tile_sizes
with three entries [4,4,4] here mean applying tiling to the loops with index %c0
, %d0
and %y0
then there is probably no need to distinguish the loops with the loops
attribute/operand. So it can effectively be simplified to the following. The omp.ws
operation applies worksharing to the outermost loop formed after the tiling operation.
omp.ws
omp.tile { tile_sizes=[4,4,4] }
omp.canonical_loop for (%c0) to (%c10) step (%c1) {
omp.canonical_loop for (%d0) to (%d10) step (%d1) {
omp.canonical_loop for (%y0) to (%y10) step (%y1) {
....
}
}
}
The question I was asking is whether nesting sufficient to model the loop transformation operations in the OpenMP standard?