Skip to content

Commit 20213d5

Browse files
committed
[MLIR][OpenMP] Add missing clauses to OpenMP op definitions
This patch adds the missing `OpenMP_Clause` definitions to all existing `OpenMP_Op`s and updates their operand structure based builders to initialize the new arguments. The result of this change is that operation operand structures are now based in the same list of clauses as their tablegen counterparts. This means that all of the information needed is now in place to automatically generate OpenMP operand structures from tablegen defitions. Since this change doesn't involve the introduction of actual support for these clauses, new arguments are not initialized from values stored in the corresponding operand structure fields but rather set to empty or null. Those should be updated when support for these clauses on the corresponding operation is added.
1 parent dd05f1e commit 20213d5

File tree

4 files changed

+91
-72
lines changed

4 files changed

+91
-72
lines changed

mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,9 @@ def TerminatorOp : OpenMP_Op<"terminator", [Terminator, Pure]> {
195195
def TeamsOp : OpenMP_Op<"teams", traits = [
196196
AttrSizedOperandSegments, RecursiveMemoryEffects
197197
], clauses = [
198-
// TODO: Complete clause list (private).
199198
// TODO: Sort clauses alphabetically.
200199
OpenMP_NumTeamsClause, OpenMP_IfClause, OpenMP_ThreadLimitClause,
201-
OpenMP_AllocateClause, OpenMP_ReductionClause
200+
OpenMP_AllocateClause, OpenMP_ReductionClause, OpenMP_PrivateClause
202201
], singleRegion = true> {
203202
let summary = "teams construct";
204203
let description = [{
@@ -238,9 +237,9 @@ def SectionOp : OpenMP_Op<"section", [HasParent<"SectionsOp">],
238237
def SectionsOp : OpenMP_Op<"sections", traits = [
239238
AttrSizedOperandSegments
240239
], clauses = [
241-
// TODO: Complete clause list (private).
242240
// TODO: Sort clauses alphabetically.
243-
OpenMP_ReductionClause, OpenMP_AllocateClause, OpenMP_NowaitClause
241+
OpenMP_ReductionClause, OpenMP_AllocateClause, OpenMP_NowaitClause,
242+
OpenMP_PrivateClause
244243
], singleRegion = true> {
245244
let summary = "sections construct";
246245
let description = [{
@@ -271,8 +270,8 @@ def SectionsOp : OpenMP_Op<"sections", traits = [
271270
def SingleOp : OpenMP_Op<"single", traits = [
272271
AttrSizedOperandSegments
273272
], clauses = [
274-
// TODO: Complete clause list (private).
275-
OpenMP_AllocateClause, OpenMP_CopyprivateClause, OpenMP_NowaitClause
273+
OpenMP_AllocateClause, OpenMP_CopyprivateClause, OpenMP_NowaitClause,
274+
OpenMP_PrivateClause
276275
], singleRegion = true> {
277276
let summary = "single directive";
278277
let description = [{
@@ -363,14 +362,15 @@ def WsloopOp : OpenMP_Op<"wsloop", traits = [
363362
AttrSizedOperandSegments, DeclareOpInterfaceMethods<LoopWrapperInterface>,
364363
RecursiveMemoryEffects, SingleBlock
365364
], clauses = [
366-
// TODO: Complete clause list (allocate, private).
367365
// TODO: Sort clauses alphabetically.
368366
OpenMP_LinearClauseSkip<assemblyFormat = true>,
369367
OpenMP_ReductionClauseSkip<assemblyFormat = true>,
370368
OpenMP_ScheduleClauseSkip<assemblyFormat = true>,
371369
OpenMP_NowaitClauseSkip<assemblyFormat = true>,
372370
OpenMP_OrderedClauseSkip<assemblyFormat = true>,
373-
OpenMP_OrderClauseSkip<assemblyFormat = true>
371+
OpenMP_OrderClauseSkip<assemblyFormat = true>,
372+
OpenMP_AllocateClauseSkip<assemblyFormat = true>,
373+
OpenMP_PrivateClauseSkip<assemblyFormat = true>
374374
], singleRegion = true> {
375375
let summary = "worksharing-loop construct";
376376
let description = [{
@@ -417,6 +417,13 @@ def WsloopOp : OpenMP_Op<"wsloop", traits = [
417417
|`nowait` $nowait
418418
|`ordered` `(` $ordered `)`
419419
|`order` `(` custom<OrderClause>($order, $order_mod) `)`
420+
|`allocate` `(`
421+
custom<AllocateAndAllocator>(
422+
$allocate_vars, type($allocate_vars), $allocator_vars,
423+
type($allocator_vars)) `)`
424+
|`private` `(`
425+
custom<PrivateList>(
426+
$private_vars, type($private_vars), $private_syms) `)`
420427
) custom<Wsloop>($region, $reduction_vars, type($reduction_vars),
421428
$reduction_byref, $reduction_syms) attr-dict
422429
}];
@@ -432,9 +439,10 @@ def SimdOp : OpenMP_Op<"simd", traits = [
432439
AttrSizedOperandSegments, DeclareOpInterfaceMethods<LoopWrapperInterface>,
433440
RecursiveMemoryEffects, SingleBlock
434441
], clauses = [
435-
// TODO: Complete clause list (linear, private, reduction).
442+
// TODO: Complete clause list (linear).
436443
OpenMP_AlignedClause, OpenMP_IfClause, OpenMP_NontemporalClause,
437-
OpenMP_OrderClause, OpenMP_SafelenClause, OpenMP_SimdlenClause
444+
OpenMP_OrderClause, OpenMP_PrivateClause, OpenMP_ReductionClause,
445+
OpenMP_SafelenClause, OpenMP_SimdlenClause
438446
], singleRegion = true> {
439447
let summary = "simd construct";
440448
let description = [{
@@ -499,9 +507,9 @@ def DistributeOp : OpenMP_Op<"distribute", traits = [
499507
AttrSizedOperandSegments, DeclareOpInterfaceMethods<LoopWrapperInterface>,
500508
RecursiveMemoryEffects, SingleBlock
501509
], clauses = [
502-
// TODO: Complete clause list (private).
503510
// TODO: Sort clauses alphabetically.
504-
OpenMP_DistScheduleClause, OpenMP_AllocateClause, OpenMP_OrderClause
511+
OpenMP_DistScheduleClause, OpenMP_AllocateClause, OpenMP_OrderClause,
512+
OpenMP_PrivateClause
505513
], singleRegion = true> {
506514
let summary = "distribute construct";
507515
let description = [{
@@ -552,11 +560,12 @@ def TaskOp : OpenMP_Op<"task", traits = [
552560
AttrSizedOperandSegments, AutomaticAllocationScope,
553561
OutlineableOpenMPOpInterface
554562
], clauses = [
555-
// TODO: Complete clause list (affinity, detach, private).
563+
// TODO: Complete clause list (affinity, detach).
556564
// TODO: Sort clauses alphabetically.
557565
OpenMP_IfClause, OpenMP_FinalClause, OpenMP_UntiedClause,
558566
OpenMP_MergeableClause, OpenMP_InReductionClause,
559-
OpenMP_PriorityClause, OpenMP_DependClause, OpenMP_AllocateClause
567+
OpenMP_PriorityClause, OpenMP_DependClause, OpenMP_AllocateClause,
568+
OpenMP_PrivateClause
560569
], singleRegion = true> {
561570
let summary = "task construct";
562571
let description = [{
@@ -589,14 +598,13 @@ def TaskloopOp : OpenMP_Op<"taskloop", traits = [
589598
DeclareOpInterfaceMethods<LoopWrapperInterface>, RecursiveMemoryEffects,
590599
SingleBlock
591600
], clauses = [
592-
// TODO: Complete clause list (private).
593601
// TODO: Sort clauses alphabetically.
594602
OpenMP_IfClause, OpenMP_FinalClause, OpenMP_UntiedClause,
595603
OpenMP_MergeableClause,
596604
OpenMP_InReductionClauseSkip<extraClassDeclaration = true>,
597605
OpenMP_ReductionClauseSkip<extraClassDeclaration = true>,
598606
OpenMP_PriorityClause, OpenMP_AllocateClause, OpenMP_GrainsizeClause,
599-
OpenMP_NumTasksClause, OpenMP_NogroupClause
607+
OpenMP_NumTasksClause, OpenMP_NogroupClause, OpenMP_PrivateClause
600608
], singleRegion = true> {
601609
let summary = "taskloop construct";
602610
let description = [{
@@ -1076,12 +1084,12 @@ def TargetUpdateOp: OpenMP_Op<"target_update", traits = [
10761084
def TargetOp : OpenMP_Op<"target", traits = [
10771085
AttrSizedOperandSegments, IsolatedFromAbove, OutlineableOpenMPOpInterface
10781086
], clauses = [
1079-
// TODO: Complete clause list (allocate, defaultmap, in_reduction,
1080-
// uses_allocators).
1087+
// TODO: Complete clause list (defaultmap, uses_allocators).
10811088
// TODO: Sort clauses alphabetically.
10821089
OpenMP_IfClause, OpenMP_DeviceClause, OpenMP_ThreadLimitClause,
10831090
OpenMP_DependClause, OpenMP_NowaitClause, OpenMP_IsDevicePtrClause,
1084-
OpenMP_HasDeviceAddrClause, OpenMP_MapClause, OpenMP_PrivateClause
1091+
OpenMP_HasDeviceAddrClause, OpenMP_MapClause, OpenMP_PrivateClause,
1092+
OpenMP_AllocateClause, OpenMP_InReductionClause
10851093
], singleRegion = true> {
10861094
let summary = "target construct";
10871095
let description = [{
@@ -1209,7 +1217,7 @@ def OrderedRegionOp : OpenMP_Op<"ordered.region", clauses = [
12091217
//===----------------------------------------------------------------------===//
12101218

12111219
def TaskwaitOp : OpenMP_Op<"taskwait", clauses = [
1212-
// TODO: Complete clause list (depend, nowait).
1220+
OpenMP_DependClause, OpenMP_NowaitClause
12131221
]> {
12141222
let summary = "taskwait construct";
12151223
let description = [{
@@ -1220,9 +1228,6 @@ def TaskwaitOp : OpenMP_Op<"taskwait", clauses = [
12201228
let builders = [
12211229
OpBuilder<(ins CArg<"const TaskwaitOperands &">:$clauses)>
12221230
];
1223-
1224-
// TODO: Remove overriden `assemblyFormat` once a clause is added.
1225-
let assemblyFormat = "attr-dict";
12261231
}
12271232

12281233
//===----------------------------------------------------------------------===//

mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,13 +1451,15 @@ void TargetOp::build(OpBuilder &builder, OperationState &state,
14511451
const TargetOperands &clauses) {
14521452
MLIRContext *ctx = builder.getContext();
14531453
// TODO Store clauses in op: allocateVars, allocatorVars, inReductionVars,
1454-
// inReduceVarByRef, inReductionDeclSymbols, reductionVars, reduceVarByRef,
1455-
// reductionDeclSymbols.
1454+
// inReductionByref, inReductionSyms.
14561455
TargetOp::build(builder, state, clauses.ifVar, clauses.device,
14571456
clauses.threadLimit, makeArrayAttr(ctx, clauses.dependKinds),
14581457
clauses.dependVars, clauses.nowait, clauses.isDevicePtrVars,
14591458
clauses.hasDeviceAddrVars, clauses.mapVars,
1460-
clauses.privateVars, makeArrayAttr(ctx, clauses.privateSyms));
1459+
clauses.privateVars, makeArrayAttr(ctx, clauses.privateSyms),
1460+
/*allocate_vars=*/{}, /*allocator_vars=*/{},
1461+
/*in_reduction_vars=*/{}, /*in_reduction_byref=*/nullptr,
1462+
/*in_reduction_syms=*/nullptr);
14611463
}
14621464

14631465
LogicalResult TargetOp::verify() {
@@ -1584,7 +1586,8 @@ void TeamsOp::build(OpBuilder &builder, OperationState &state,
15841586
clauses.ifVar, clauses.threadLimit, clauses.allocateVars,
15851587
clauses.allocatorVars, clauses.reductionVars,
15861588
makeDenseBoolArrayAttr(ctx, clauses.reductionByref),
1587-
makeArrayAttr(ctx, clauses.reductionSyms));
1589+
makeArrayAttr(ctx, clauses.reductionSyms), /*private_vars=*/{},
1590+
/*private_syms=*/nullptr);
15881591
}
15891592

15901593
LogicalResult TeamsOp::verify() {
@@ -1630,8 +1633,8 @@ void SectionsOp::build(OpBuilder &builder, OperationState &state,
16301633
SectionsOp::build(builder, state, clauses.reductionVars,
16311634
makeDenseBoolArrayAttr(ctx, clauses.reductionByref),
16321635
makeArrayAttr(ctx, clauses.reductionSyms),
1633-
clauses.allocateVars, clauses.allocatorVars,
1634-
clauses.nowait);
1636+
clauses.allocateVars, clauses.allocatorVars, clauses.nowait,
1637+
/*private_vars=*/{}, /*private_syms=*/nullptr);
16351638
}
16361639

16371640
LogicalResult SectionsOp::verify() {
@@ -1664,7 +1667,8 @@ void SingleOp::build(OpBuilder &builder, OperationState &state,
16641667
// TODO Store clauses in op: privateVars, privateSyms.
16651668
SingleOp::build(builder, state, clauses.allocateVars, clauses.allocatorVars,
16661669
clauses.copyprivateVars,
1667-
makeArrayAttr(ctx, clauses.copyprivateSyms), clauses.nowait);
1670+
makeArrayAttr(ctx, clauses.copyprivateSyms), clauses.nowait,
1671+
/*private_vars=*/{}, /*private_syms=*/nullptr);
16681672
}
16691673

16701674
LogicalResult SingleOp::verify() {
@@ -1716,7 +1720,9 @@ void WsloopOp::build(OpBuilder &builder, OperationState &state,
17161720
/*reduction_byref=*/nullptr, /*reduction_syms=*/nullptr,
17171721
/*schedule_kind=*/nullptr, /*schedule_chunk=*/nullptr,
17181722
/*schedule_mod=*/nullptr, /*schedule_simd=*/false, /*nowait=*/false,
1719-
/*ordered=*/nullptr, /*order=*/nullptr, /*order_mod=*/nullptr);
1723+
/*ordered=*/nullptr, /*order=*/nullptr, /*order_mod=*/nullptr,
1724+
/*allocate_vars=*/{}, /*allocator_vars=*/{}, /*private_vars=*/{},
1725+
/*private_syms=*/nullptr);
17201726
state.addAttributes(attributes);
17211727
}
17221728

@@ -1731,7 +1737,9 @@ void WsloopOp::build(OpBuilder &builder, OperationState &state,
17311737
makeArrayAttr(ctx, clauses.reductionSyms),
17321738
clauses.scheduleKind, clauses.scheduleChunk,
17331739
clauses.scheduleMod, clauses.scheduleSimd, clauses.nowait,
1734-
clauses.ordered, clauses.order, clauses.orderMod);
1740+
clauses.ordered, clauses.order, clauses.orderMod,
1741+
/*allocate_vars=*/{}, /*allocator_vars=*/{},
1742+
/*private_vars=*/{}, /*private_syms=*/nullptr);
17351743
}
17361744

17371745
LogicalResult WsloopOp::verify() {
@@ -1757,11 +1765,13 @@ void SimdOp::build(OpBuilder &builder, OperationState &state,
17571765
const SimdOperands &clauses) {
17581766
MLIRContext *ctx = builder.getContext();
17591767
// TODO Store clauses in op: privateVars, privateSyms, reductionVars,
1760-
// reduceVarByRef, reductionDeclSymbols.
1768+
// reductionByref, reductionSyms.
17611769
SimdOp::build(builder, state, clauses.alignedVars,
17621770
makeArrayAttr(ctx, clauses.alignments), clauses.ifVar,
17631771
clauses.nontemporalVars, clauses.order, clauses.orderMod,
1764-
clauses.safelen, clauses.simdlen);
1772+
/*private_vars=*/{}, /*private_syms=*/nullptr,
1773+
/*reduction_vars=*/{}, /*reduction_byref=*/nullptr,
1774+
/*reduction_syms=*/nullptr, clauses.safelen, clauses.simdlen);
17651775
}
17661776

17671777
LogicalResult SimdOp::verify() {
@@ -1795,7 +1805,8 @@ void DistributeOp::build(OpBuilder &builder, OperationState &state,
17951805
// TODO Store clauses in op: privateVars, privateSyms.
17961806
DistributeOp::build(builder, state, clauses.distScheduleStatic,
17971807
clauses.distScheduleChunkSize, clauses.allocateVars,
1798-
clauses.allocatorVars, clauses.order, clauses.orderMod);
1808+
clauses.allocatorVars, clauses.order, clauses.orderMod,
1809+
/*private_vars=*/{}, /*private_syms=*/nullptr);
17991810
}
18001811

18011812
LogicalResult DistributeOp::verify() {
@@ -1927,7 +1938,8 @@ void TaskOp::build(OpBuilder &builder, OperationState &state,
19271938
makeDenseBoolArrayAttr(ctx, clauses.inReductionByref),
19281939
makeArrayAttr(ctx, clauses.inReductionSyms), clauses.priority,
19291940
makeArrayAttr(ctx, clauses.dependKinds), clauses.dependVars,
1930-
clauses.allocateVars, clauses.allocatorVars);
1941+
clauses.allocateVars, clauses.allocatorVars,
1942+
/*private_vars=*/{}, /*private_syms=*/nullptr);
19311943
}
19321944

19331945
LogicalResult TaskOp::verify() {
@@ -1975,7 +1987,8 @@ void TaskloopOp::build(OpBuilder &builder, OperationState &state,
19751987
makeDenseBoolArrayAttr(ctx, clauses.reductionByref),
19761988
makeArrayAttr(ctx, clauses.reductionSyms), clauses.priority,
19771989
clauses.allocateVars, clauses.allocatorVars,
1978-
clauses.grainsize, clauses.numTasks, clauses.nogroup);
1990+
clauses.grainsize, clauses.numTasks, clauses.nogroup,
1991+
/*private_vars=*/{}, /*private_syms=*/nullptr);
19791992
}
19801993

19811994
SmallVector<Value> TaskloopOp::getAllReductionVars() {
@@ -2225,8 +2238,9 @@ LogicalResult OrderedRegionOp::verify() {
22252238

22262239
void TaskwaitOp::build(OpBuilder &builder, OperationState &state,
22272240
const TaskwaitOperands &clauses) {
2228-
// TODO Store clauses in op: dependTypeAttrs, dependVars, nowaitAttr.
2229-
TaskwaitOp::build(builder, state);
2241+
// TODO Store clauses in op: dependKinds, dependVars, nowait.
2242+
TaskwaitOp::build(builder, state, /*depend_kinds=*/nullptr,
2243+
/*depend_vars=*/{}, /*nowait=*/nullptr);
22302244
}
22312245

22322246
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)