[flang-commits] [flang] [llvm] [mlir] [flang][OpenMP] Enable tiling (PR #143715)

Michael Kruse via flang-commits flang-commits at lists.llvm.org
Tue Aug 19 05:09:16 PDT 2025


================
@@ -317,6 +317,38 @@ class OpenMP_DeviceClauseSkip<
 
 def OpenMP_DeviceClause : OpenMP_DeviceClauseSkip<>;
 
+//===----------------------------------------------------------------------===//
+// V5.2: [XX.X] `collapse` clause
+//===----------------------------------------------------------------------===//
+
+class OpenMP_CollapseClauseSkip<
+    bit traits = false, bit arguments = false, bit assemblyFormat = false,
+    bit description = false, bit extraClassDeclaration = false
+  > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+                    extraClassDeclaration> {
+  let arguments = (ins
+      DefaultValuedOptionalAttr<I64Attr, "1">:$num_collapse
+  );
+}
+
+def OpenMP_CollapseClause : OpenMP_CollapseClauseSkip<>;
+
+//===----------------------------------------------------------------------===//
+// V5.2: [xx.x] `sizes` clause
+//===----------------------------------------------------------------------===//
+
+class OpenMP_TileSizesClauseSkip<
+    bit traits = false, bit arguments = false, bit assemblyFormat = false,
+    bit description = false, bit extraClassDeclaration = false
+  > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+                    extraClassDeclaration> {
+  let arguments = (ins
+      OptionalAttr<DenseI64ArrayAttr>:$tile_sizes
+  );
+}
+
+def OpenMP_TileSizesClause : OpenMP_TileSizesClauseSkip<>;
----------------
Meinersbur wrote:

My current version of this is:
```suggestion
class OpenMP_SizesClauseSkip<
    bit traits = false, bit arguments = false, bit assemblyFormat = false,
    bit description = false, bit extraClassDeclaration = false
  > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
                    extraClassDeclaration> {
  let arguments = (ins
    Variadic<IntLikeType>:$sizes
  );

  let optAssemblyFormat = [{
    `sizes` `(` $sizes `:` type($sizes) `)`
  }];

  let description = [{
    `sizes` clause description # TODO: Add desctription
  }];
}

def OpenMP_SizesClause : OpenMP_SizesClauseSkip<>;
```
1. `sizes` is also used for `stripe`, so I would avoid `Tile` in the name
2. OpenMP does not require the sizes to be constants
3. Parsing can be handled by mlir-tblgen generated code (at least here it can)

https://github.com/llvm/llvm-project/pull/143715


More information about the flang-commits mailing list