Chi-Chun, Chen 5e5c4acd4e
[mlir][OpenMP] Introduce 'omp.iterators' for OpenMP iterator modifiers (#182218)
`omp.iterator` provides information of induction variables and iterator
range in OpenMP iterator modifier.

Example:
```
  %it = omp.iterator(%i0: index, %i1: index) =
        (%lb0 to %ub0 step %st0,
         %lb1 to %ub1 step %st1) {
    omp.yield(%i0, %i1 : index, index)
  } -> !omp.iterated<!llvm.struct<(!llvm.ptr, i64)>>
```

Here's how we can use the omp.iterater to generate multi-dimensional
loop in llvm ir:
```
  // Induction variables can be translated from the block arguments
  // in omp.iterator.
  // lbs, ubs, and steps is encoded in omp.iterator
  for (int i0 = lbs[0]; i0 < ubs[0]; i0 += steps[0]) {
      for (int i0 = lbs[1]; i1 < ubs[1]; i1 += steps[1]) {
          // the result of iterated is <ptr, i64> from the example
          iterated = omp.iterators(i, j);
      }
  }
```

1/3 in stack for implementing affinity clause with iterator modifier
1/3 #182218
2/3 #182222
3/3 #182223
2026-02-25 11:16:10 -06:00
..