Flang supports lowering collapse clause to MLIR for worksharing loops and simd loops. Simd collapse clause is represented in MLIR code as a simd-loop having a list of indices, bounds and steps where the size of the list is equal to the collapse value.
Support for simd collapse clause was added by several patches:
- https://reviews.llvm.org/D118065 -> basic support for simd-loop in MLIR. Loop collapsing is done in the same way as for worksharing loops: https://reviews.llvm.org/D105706
- https://reviews.llvm.org/D125282 -> support for lowering simd clause from Fortran into MLIR.
- https://reviews.llvm.org/D125302 -> lowering collapse clause from Fortran to MLIR. Lowering collapse clause is done before simd-specific function is called.
- https://reviews.llvm.org/D128338 -> modified the MLIR representation of collapse clause. Removed collapse keyword in OpenMP MLIR dialect. Use loop list to represent collapse clause. This loop list is created by changes from patch: https://reviews.llvm.org/D125302 and it is passed to function responsible for lowering of simd directive which was implemented in patch: https://reviews.llvm.org/D125282