[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