`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