[Mlir-commits] [flang] [llvm] [mlir] [flang][OpenMP] Enable tiling (PR #143715)
Michael Kruse
llvmlistbot at llvm.org
Tue Aug 26 02:55:25 PDT 2025
================
@@ -3449,13 +3500,9 @@ static void genOMPDispatch(lower::AbstractConverter &converter,
newOp = genTeamsOp(converter, symTable, stmtCtx, semaCtx, eval, loc, queue,
item);
break;
- case llvm::omp::Directive::OMPD_tile: {
- unsigned version = semaCtx.langOptions().OpenMPVersion;
- if (!semaCtx.langOptions().OpenMPSimd)
- TODO(loc, "Unhandled loop directive (" +
- llvm::omp::getOpenMPDirectiveName(dir, version) + ")");
+ case llvm::omp::Directive::OMPD_tile:
+ newOp = genLoopOp(converter, symTable, semaCtx, eval, loc, queue, item);
----------------
Meinersbur wrote:
[serious] `genLoopOp` is for generating IR for `!$omp loop`. That is, this wraps the `omp.loop_nest` into a `omp.loop`. That is,
```fortran
!$omp do
!$omp tile sizes(2)
do i = 1, a
```
generates this:
```mlir
"omp.loop"(%8#0) <{operandSegmentSizes = array<i32: 1, 0>, private_syms = [@_QFEi_private_i32]}> ({
^bb0(%arg0: !fir.ref<i32>):
"omp.loop_nest"(%22, %23, %24) <{loop_inclusive, tile_sizes = array<i64: 2>}> ({
^bb0(%arg1: i32):
...
"omp.wsloop"(%16#0, %8#0) <{operandSegmentSizes = array<i32: 0, 0, 0, 0, 2, 0, 0>, private_syms = [@_QFEy_firstprivate_i32, @_QFEi_private_i32]}> ({
^bb0(%arg6: !fir.ref<i32>, %arg7: !fir.ref<i32>):
"omp.loop_nest"(%26, %27, %28) <{loop_inclusive, tile_sizes = array<i64: 2>}> ({
^bb0(%arg8: i32):
..
```
There should be just a single `omp.wsloop` and no `omp.loop`
https://github.com/llvm/llvm-project/pull/143715
More information about the Mlir-commits
mailing list