[mlir][OpenMP] Separate OutlinableInterface from taskloop LoopWrapper
Separate taskloop context and loop lowering into different operations.
This allows us to have separate operations representing the outlinable
interface and the loop wrapper interface so that there is somewhere
better than the loop body to put task-local allocations:
```
omp.taskloop.context {
llvm.alloca ...
omp.taskloop {
omp.loop_nest ... {
...
}
}
omp.terminator
}
```
The tests for the real functional change are
- flang/test/Integration/OpenMP/taskloop-alloca-placement.f90
- mlir/test/Target/LLVMIR/openmp-taskloop-context-alloca.mlir
RFC: https://discourse.llvm.org/t/rfc-openmp-alloca-placement-for-openmp-loop-wrappers/89512/7
This commit keeps all of the clauses on the omp.taskloop op to minimise
changes that have to go into this one commit. I will follow this by
moving clauses to the operation in which they generate code.
Patch 1/3