[flang-commits] [flang] [mlir] [MLIR][OpenMP] Improve assemblyFormat handling for clause-based ops (PR #108023)
via flang-commits
flang-commits at lists.llvm.org
Tue Sep 10 06:19:19 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-openmp
Author: Sergio Afonso (skatrak)
<details>
<summary>Changes</summary>
This patch modifies the representation of `OpenMP_Clause` to allow definitions to incorporate both required and optional arguments while still allowing operations including them and overriding the `assemblyFormat` to take advantage of automatically-populated format strings.
The proposed approach is to split the `assemblyFormat` clause property into `reqAssemblyFormat` and `optAssemblyFormat`, and remove the `isRequired` template and associated `required` property. The `OpenMP_Op` class, in turn, populates the new `clausesReqAssemblyFormat` and `clausesOptAssemblyFormat` properties in addition to `clausesAssemblyFormat`. These properties can be used by clause-based OpenMP operation definitions to reconstruct parts of the clause-inherited format string in a more flexible way when overriding it.
Clause definitions are updated to follow this new approach and some operation definitions overriding the `assemblyFormat` are simplified by taking advantage of the improved flexibility, reducing code duplication. The `verify-openmp-ops` tablegen pass is updated for the new `OpenMP_Clause` representation.
Some MLIR and Flang unit tests had to be updated due to changes to the default printing order of clauses on updated operations.
---
Patch is 67.55 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/108023.diff
14 Files Affected:
- (modified) flang/test/Lower/OpenMP/parallel.f90 (+3-3)
- (modified) flang/test/Lower/OpenMP/wsloop-chunks.f90 (+3-3)
- (modified) flang/test/Lower/OpenMP/wsloop-monotonic.f90 (+1-1)
- (modified) flang/test/Lower/OpenMP/wsloop-nonmonotonic.f90 (+1-1)
- (modified) flang/test/Lower/OpenMP/wsloop-schedule.f90 (+1-1)
- (modified) flang/test/Lower/OpenMP/wsloop.f90 (+1-1)
- (modified) mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td (+128-128)
- (modified) mlir/include/mlir/Dialect/OpenMP/OpenMPOpBase.td (+27-33)
- (modified) mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td (+22-66)
- (modified) mlir/test/Conversion/OpenMPToLLVM/convert-to-llvmir.mlir (+1-1)
- (modified) mlir/test/Dialect/OpenMP/ops.mlir (+10-10)
- (modified) mlir/test/mlir-tblgen/openmp-ops-verify.td (+9-10)
- (modified) mlir/test/mlir-tblgen/openmp-ops.td (+47-14)
- (modified) mlir/tools/mlir-tblgen/OmpOpGen.cpp (+24-11)
``````````diff
diff --git a/flang/test/Lower/OpenMP/parallel.f90 b/flang/test/Lower/OpenMP/parallel.f90
index 07f4680f79ee27..4942d3a053433d 100644
--- a/flang/test/Lower/OpenMP/parallel.f90
+++ b/flang/test/Lower/OpenMP/parallel.f90
@@ -194,9 +194,9 @@ subroutine parallel_multiple_clauses(alpha, num_threads)
!CHECK: omp.terminator
!$omp end parallel
- !CHECK: omp.parallel if({{.*}}) num_threads({{.*}} : i32) allocate(
- !CHECK: %{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>
- !CHECK: ) {
+ !CHECK: omp.parallel allocate(%{{.+}} : i64 -> %{{.+}}#1 : !fir.ref<i32>)
+ !CHECK: if({{.*}}) num_threads({{.*}} : i32)
+ !CHECK: private(@{{.+}} %{{.+}}#0 -> %{{.+}} : !fir.ref<i32>) {
!$omp parallel num_threads(num_threads) if(alpha .le. 0) allocate(omp_high_bw_mem_alloc: alpha) private(alpha)
!CHECK: fir.call
call f3()
diff --git a/flang/test/Lower/OpenMP/wsloop-chunks.f90 b/flang/test/Lower/OpenMP/wsloop-chunks.f90
index 3d4e9bc505f281..cacb5b0d4b4a1e 100644
--- a/flang/test/Lower/OpenMP/wsloop-chunks.f90
+++ b/flang/test/Lower/OpenMP/wsloop-chunks.f90
@@ -20,7 +20,7 @@ program wsloop
! CHECK: %[[VAL_3:.*]] = arith.constant 1 : i32
! CHECK: %[[VAL_4:.*]] = arith.constant 9 : i32
! CHECK: %[[VAL_5:.*]] = arith.constant 1 : i32
-! CHECK: omp.wsloop schedule(static = %[[VAL_2]] : i32) nowait {
+! CHECK: omp.wsloop nowait schedule(static = %[[VAL_2]] : i32) {
! CHECK-NEXT: omp.loop_nest (%[[ARG0:.*]]) : i32 = (%[[VAL_3]]) to (%[[VAL_4]]) inclusive step (%[[VAL_5]]) {
! CHECK: fir.store %[[ARG0]] to %[[STORE_IV:.*]]#1 : !fir.ref<i32>
! CHECK: %[[LOAD_IV:.*]] = fir.load %[[STORE_IV]]#0 : !fir.ref<i32>
@@ -41,7 +41,7 @@ program wsloop
! CHECK: %[[VAL_15:.*]] = arith.constant 1 : i32
! CHECK: %[[VAL_16:.*]] = arith.constant 9 : i32
! CHECK: %[[VAL_17:.*]] = arith.constant 1 : i32
-! CHECK: omp.wsloop schedule(static = %[[VAL_14]] : i32) nowait {
+! CHECK: omp.wsloop nowait schedule(static = %[[VAL_14]] : i32) {
! CHECK-NEXT: omp.loop_nest (%[[ARG1:.*]]) : i32 = (%[[VAL_15]]) to (%[[VAL_16]]) inclusive step (%[[VAL_17]]) {
! CHECK: fir.store %[[ARG1]] to %[[STORE_IV1:.*]]#1 : !fir.ref<i32>
! CHECK: %[[VAL_24:.*]] = arith.constant 2 : i32
@@ -68,7 +68,7 @@ program wsloop
! CHECK: %[[VAL_30:.*]] = arith.constant 1 : i32
! CHECK: %[[VAL_31:.*]] = arith.constant 9 : i32
! CHECK: %[[VAL_32:.*]] = arith.constant 1 : i32
-! CHECK: omp.wsloop schedule(static = %[[VAL_29]] : i32) nowait {
+! CHECK: omp.wsloop nowait schedule(static = %[[VAL_29]] : i32) {
! CHECK-NEXT: omp.loop_nest (%[[ARG2:.*]]) : i32 = (%[[VAL_30]]) to (%[[VAL_31]]) inclusive step (%[[VAL_32]]) {
! CHECK: fir.store %[[ARG2]] to %[[STORE_IV2:.*]]#1 : !fir.ref<i32>
! CHECK: %[[VAL_39:.*]] = arith.constant 3 : i32
diff --git a/flang/test/Lower/OpenMP/wsloop-monotonic.f90 b/flang/test/Lower/OpenMP/wsloop-monotonic.f90
index 2a5cc2321c6444..ec1b216a8695fa 100644
--- a/flang/test/Lower/OpenMP/wsloop-monotonic.f90
+++ b/flang/test/Lower/OpenMP/wsloop-monotonic.f90
@@ -15,7 +15,7 @@ program wsloop_dynamic
!CHECK: %[[WS_LB:.*]] = arith.constant 1 : i32
!CHECK: %[[WS_UB:.*]] = arith.constant 9 : i32
!CHECK: %[[WS_STEP:.*]] = arith.constant 1 : i32
-!CHECK: omp.wsloop schedule(dynamic, monotonic) nowait {
+!CHECK: omp.wsloop nowait schedule(dynamic, monotonic) {
!CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%[[WS_LB]]) to (%[[WS_UB]]) inclusive step (%[[WS_STEP]]) {
!CHECK: fir.store %[[I]] to %[[ALLOCA_IV:.*]]#1 : !fir.ref<i32>
diff --git a/flang/test/Lower/OpenMP/wsloop-nonmonotonic.f90 b/flang/test/Lower/OpenMP/wsloop-nonmonotonic.f90
index 1e71807ae5b1ab..e011a8de1e69ed 100644
--- a/flang/test/Lower/OpenMP/wsloop-nonmonotonic.f90
+++ b/flang/test/Lower/OpenMP/wsloop-nonmonotonic.f90
@@ -17,7 +17,7 @@ program wsloop_dynamic
!CHECK: %[[WS_LB:.*]] = arith.constant 1 : i32
!CHECK: %[[WS_UB:.*]] = arith.constant 9 : i32
!CHECK: %[[WS_STEP:.*]] = arith.constant 1 : i32
-!CHECK: omp.wsloop schedule(dynamic, nonmonotonic) nowait {
+!CHECK: omp.wsloop nowait schedule(dynamic, nonmonotonic) {
!CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%[[WS_LB]]) to (%[[WS_UB]]) inclusive step (%[[WS_STEP]]) {
!CHECK: fir.store %[[I]] to %[[ALLOCA_IV]]#1 : !fir.ref<i32>
diff --git a/flang/test/Lower/OpenMP/wsloop-schedule.f90 b/flang/test/Lower/OpenMP/wsloop-schedule.f90
index 1df67474d65e3b..de0a2dae6b5874 100644
--- a/flang/test/Lower/OpenMP/wsloop-schedule.f90
+++ b/flang/test/Lower/OpenMP/wsloop-schedule.f90
@@ -14,7 +14,7 @@ program wsloop_dynamic
!CHECK: %[[WS_LB:.*]] = arith.constant 1 : i32
!CHECK: %[[WS_UB:.*]] = arith.constant 9 : i32
!CHECK: %[[WS_STEP:.*]] = arith.constant 1 : i32
-!CHECK: omp.wsloop schedule(runtime, simd) nowait {
+!CHECK: omp.wsloop nowait schedule(runtime, simd) {
!CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%[[WS_LB]]) to (%[[WS_UB]]) inclusive step (%[[WS_STEP]]) {
!CHECK: fir.store %[[I]] to %[[STORE:.*]]#1 : !fir.ref<i32>
diff --git a/flang/test/Lower/OpenMP/wsloop.f90 b/flang/test/Lower/OpenMP/wsloop.f90
index 6536f5b83d2cbd..6566b3cbd6d4d9 100644
--- a/flang/test/Lower/OpenMP/wsloop.f90
+++ b/flang/test/Lower/OpenMP/wsloop.f90
@@ -64,7 +64,7 @@ subroutine loop_with_schedule_nowait
! CHECK: %[[WS_LB:.*]] = arith.constant 1 : i32
! CHECK: %[[WS_UB:.*]] = arith.constant 9 : i32
! CHECK: %[[WS_STEP:.*]] = arith.constant 1 : i32
- ! CHECK: omp.wsloop schedule(runtime) nowait {
+ ! CHECK: omp.wsloop nowait schedule(runtime) {
! CHECK-NEXT: omp.loop_nest (%[[I:.*]]) : i32 = (%[[WS_LB]]) to (%[[WS_UB]]) inclusive step (%[[WS_STEP]]) {
!$OMP DO SCHEDULE(runtime)
do i=1, 9
diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
index e703c323edbc8a..c579ba6e751d2b 100644
--- a/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
+++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
@@ -29,14 +29,14 @@ include "mlir/IR/SymbolInterfaces.td"
class OpenMP_AlignedClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Variadic<OpenMP_PointerLikeType>:$aligned_vars,
OptionalAttr<I64ArrayAttr>:$alignments
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`aligned` `(` custom<AlignedClause>($aligned_vars, type($aligned_vars),
$alignments) `)`
}];
@@ -57,8 +57,8 @@ def OpenMP_AlignedClause : OpenMP_AlignedClauseSkip<>;
class OpenMP_AllocateClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Variadic<AnyType>:$allocate_vars,
Variadic<AnyType>:$allocator_vars
@@ -69,7 +69,7 @@ class OpenMP_AllocateClauseSkip<
unsigned getNumAllocatorsVars() { return getAllocatorVars().size(); }
}];
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`allocate` `(`
custom<AllocateAndAllocator>($allocate_vars, type($allocate_vars),
$allocator_vars, type($allocator_vars)) `)`
@@ -91,13 +91,13 @@ def OpenMP_AllocateClause : OpenMP_AllocateClauseSkip<>;
class OpenMP_CancelDirectiveNameClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/true, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
CancellationConstructTypeAttr:$cancel_directive
);
- let assemblyFormat = [{
+ let reqAssemblyFormat = [{
`cancellation_construct_type` `(`
custom<ClauseAttr>($cancel_directive) `)`
}];
@@ -114,14 +114,14 @@ def OpenMP_CancelDirectiveNameClause : OpenMP_CancelDirectiveNameClauseSkip<>;
class OpenMP_CopyprivateClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Variadic<OpenMP_PointerLikeType>:$copyprivate_vars,
OptionalAttr<SymbolRefArrayAttr>:$copyprivate_syms
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`copyprivate` `(`
custom<Copyprivate>($copyprivate_vars, type($copyprivate_vars),
$copyprivate_syms) `)`
@@ -143,8 +143,8 @@ def OpenMP_CopyprivateClause : OpenMP_CopyprivateClauseSkip<>;
class OpenMP_CriticalNameClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/true, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let traits = [
Symbol
];
@@ -153,7 +153,7 @@ class OpenMP_CriticalNameClauseSkip<
SymbolNameAttr:$sym_name
);
- let assemblyFormat = "$sym_name";
+ let reqAssemblyFormat = "$sym_name";
let description = [{
The `sym_name` can be used in `omp.critical` constructs in the dialect.
@@ -169,14 +169,14 @@ def OpenMP_CriticalNameClause : OpenMP_CriticalNameClauseSkip<>;
class OpenMP_DependClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
OptionalAttr<TaskDependArrayAttr>:$depend_kinds,
Variadic<OpenMP_PointerLikeType>:$depend_vars
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`depend` `(`
custom<DependVarList>($depend_vars, type($depend_vars), $depend_kinds) `)`
}];
@@ -197,13 +197,13 @@ def OpenMP_DependClause : OpenMP_DependClauseSkip<>;
class OpenMP_DeviceClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Optional<AnyInteger>:$device
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`device` `(` $device `:` type($device) `)`
}];
@@ -222,14 +222,14 @@ def OpenMP_DeviceClause : OpenMP_DeviceClauseSkip<>;
class OpenMP_DistScheduleClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
UnitAttr:$dist_schedule_static,
Optional<IntLikeType>:$dist_schedule_chunk_size
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`dist_schedule_static` $dist_schedule_static
| `dist_schedule_chunk_size` `(` $dist_schedule_chunk_size `:`
type($dist_schedule_chunk_size) `)`
@@ -252,15 +252,15 @@ def OpenMP_DistScheduleClause : OpenMP_DistScheduleClauseSkip<>;
class OpenMP_DoacrossClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/true, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
OptionalAttr<ClauseDependAttr>:$doacross_depend_type,
ConfinedAttr<OptionalAttr<I64Attr>, [IntMinValue<0>]>:$doacross_num_loops,
Variadic<AnyType>:$doacross_depend_vars
);
- let assemblyFormat = [{
+ let reqAssemblyFormat = [{
( `depend_type` `` $doacross_depend_type^ )?
( `depend_vec` `(` $doacross_depend_vars^ `:` type($doacross_depend_vars)
`)` )?
@@ -290,13 +290,13 @@ def OpenMP_DoacrossClause : OpenMP_DoacrossClauseSkip<>;
class OpenMP_FilterClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Optional<IntLikeType>:$filtered_thread_id
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`filter` `(` $filtered_thread_id `:` type($filtered_thread_id) `)`
}];
@@ -318,13 +318,13 @@ def OpenMP_FilterClause : OpenMP_FilterClauseSkip<>;
class OpenMP_FinalClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Optional<I1>:$final
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`final` `(` $final `)`
}];
@@ -346,13 +346,13 @@ def OpenMP_FinalClause : OpenMP_FinalClauseSkip<>;
class OpenMP_GrainsizeClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Optional<IntLikeType>:$grainsize
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`grainsize` `(` $grainsize `:` type($grainsize) `)`
}];
@@ -373,13 +373,13 @@ def OpenMP_GrainsizeClause : OpenMP_GrainsizeClauseSkip<>;
class OpenMP_HasDeviceAddrClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Variadic<OpenMP_PointerLikeType>:$has_device_addr_vars
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`has_device_addr` `(` $has_device_addr_vars `:` type($has_device_addr_vars)
`)`
}];
@@ -400,13 +400,13 @@ def OpenMP_HasDeviceAddrClause : OpenMP_HasDeviceAddrClauseSkip<>;
class OpenMP_HintClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
DefaultValuedOptionalAttr<I64Attr, "0">:$hint
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`hint` `(` custom<SynchronizationHint>($hint) `)`
}];
@@ -426,13 +426,13 @@ def OpenMP_HintClause : OpenMP_HintClauseSkip<>;
class OpenMP_IfClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Optional<I1>:$if_expr
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`if` `(` $if_expr `)`
}];
@@ -448,8 +448,8 @@ def OpenMP_IfClause : OpenMP_IfClauseSkip<>;
class OpenMP_InReductionClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let traits = [
ReductionClauseInterface
];
@@ -460,7 +460,7 @@ class OpenMP_InReductionClauseSkip<
OptionalAttr<SymbolRefArrayAttr>:$in_reduction_syms
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`in_reduction` `(`
custom<ReductionVarList>($in_reduction_vars, type($in_reduction_vars),
$in_reduction_byref, $in_reduction_syms) `)`
@@ -486,13 +486,13 @@ def OpenMP_InReductionClause : OpenMP_InReductionClauseSkip<>;
class OpenMP_IsDevicePtrClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Variadic<OpenMP_PointerLikeType>:$is_device_ptr_vars
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`is_device_ptr` `(` $is_device_ptr_vars `:` type($is_device_ptr_vars) `)`
}];
@@ -510,14 +510,14 @@ def OpenMP_IsDevicePtrClause : OpenMP_IsDevicePtrClauseSkip<>;
class OpenMP_LinearClauseSkip<
bit traits = false, bit arguments = false, bit assemblyFormat = false,
bit description = false, bit extraClassDeclaration = false
- > : OpenMP_Clause</*isRequired=*/false, traits, arguments, assemblyFormat,
- description, extraClassDeclaration> {
+ > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
+ extraClassDeclaration> {
let arguments = (ins
Variadic<AnyType>:$linear_vars,
Variadic<I32>:$linear_step_vars
);
- let assemblyFormat = [{
+ let optAssemblyFormat = [{
`linear` `(`
custom<LinearClause>($linear_vars, type($linear_vars),
$linear_step_vars) `)`
@@ -540,8 +540,8 @@ def OpenMP_LinearClause : OpenMP_LinearClauseSkip<>;
class OpenMP_LoopRelatedClauseSkip<
bit traits = ...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/108023
More information about the flang-commits
mailing list