Skip to content

Commit c80e6f1

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 52ec167 commit c80e6f1

File tree

6 files changed

+144
-87
lines changed

6 files changed

+144
-87
lines changed

mlir/include/mlir/Dialect/OpenMP/OpenMPClauseOperands.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,10 @@ using ParallelOperands =
272272
using SectionsOperands = detail::Clauses<AllocateClauseOps, NowaitClauseOps,
273273
PrivateClauseOps, ReductionClauseOps>;
274274

275-
// TODO `linear` clause.
276275
using SimdOperands =
277-
detail::Clauses<AlignedClauseOps, IfClauseOps, NontemporalClauseOps,
278-
OrderClauseOps, PrivateClauseOps, ReductionClauseOps,
279-
SafelenClauseOps, SimdlenClauseOps>;
276+
detail::Clauses<AlignedClauseOps, IfClauseOps, LinearClauseOps,
277+
NontemporalClauseOps, OrderClauseOps, PrivateClauseOps,
278+
ReductionClauseOps, SafelenClauseOps, SimdlenClauseOps>;
280279

281280
using SingleOperands = detail::Clauses<AllocateClauseOps, CopyprivateClauseOps,
282281
NowaitClauseOps, PrivateClauseOps>;

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

Lines changed: 28 additions & 24 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,9 @@ def SimdOp : OpenMP_Op<"simd", traits = [
432439
AttrSizedOperandSegments, DeclareOpInterfaceMethods<LoopWrapperInterface>,
433440
RecursiveMemoryEffects, SingleBlock
434441
], clauses = [
435-
// TODO: Complete clause list (linear, private, reduction).
436-
OpenMP_AlignedClause, OpenMP_IfClause, OpenMP_NontemporalClause,
437-
OpenMP_OrderClause, OpenMP_SafelenClause, OpenMP_SimdlenClause
442+
OpenMP_AlignedClause, OpenMP_IfClause, OpenMP_LinearClause,
443+
OpenMP_NontemporalClause, OpenMP_OrderClause, OpenMP_PrivateClause,
444+
OpenMP_ReductionClause, OpenMP_SafelenClause, OpenMP_SimdlenClause
438445
], singleRegion = true> {
439446
let summary = "simd construct";
440447
let description = [{
@@ -499,9 +506,9 @@ def DistributeOp : OpenMP_Op<"distribute", traits = [
499506
AttrSizedOperandSegments, DeclareOpInterfaceMethods<LoopWrapperInterface>,
500507
RecursiveMemoryEffects, SingleBlock
501508
], clauses = [
502-
// TODO: Complete clause list (private).
503509
// TODO: Sort clauses alphabetically.
504-
OpenMP_DistScheduleClause, OpenMP_AllocateClause, OpenMP_OrderClause
510+
OpenMP_DistScheduleClause, OpenMP_AllocateClause, OpenMP_OrderClause,
511+
OpenMP_PrivateClause
505512
], singleRegion = true> {
506513
let summary = "distribute construct";
507514
let description = [{
@@ -552,11 +559,12 @@ def TaskOp : OpenMP_Op<"task", traits = [
552559
AttrSizedOperandSegments, AutomaticAllocationScope,
553560
OutlineableOpenMPOpInterface
554561
], clauses = [
555-
// TODO: Complete clause list (affinity, detach, private).
562+
// TODO: Complete clause list (affinity, detach).
556563
// TODO: Sort clauses alphabetically.
557564
OpenMP_IfClause, OpenMP_FinalClause, OpenMP_UntiedClause,
558565
OpenMP_MergeableClause, OpenMP_InReductionClause,
559-
OpenMP_PriorityClause, OpenMP_DependClause, OpenMP_AllocateClause
566+
OpenMP_PriorityClause, OpenMP_DependClause, OpenMP_AllocateClause,
567+
OpenMP_PrivateClause
560568
], singleRegion = true> {
561569
let summary = "task construct";
562570
let description = [{
@@ -589,14 +597,13 @@ def TaskloopOp : OpenMP_Op<"taskloop", traits = [
589597
DeclareOpInterfaceMethods<LoopWrapperInterface>, RecursiveMemoryEffects,
590598
SingleBlock
591599
], clauses = [
592-
// TODO: Complete clause list (private).
593600
// TODO: Sort clauses alphabetically.
594601
OpenMP_IfClause, OpenMP_FinalClause, OpenMP_UntiedClause,
595602
OpenMP_MergeableClause,
596603
OpenMP_InReductionClauseSkip<extraClassDeclaration = true>,
597604
OpenMP_ReductionClauseSkip<extraClassDeclaration = true>,
598605
OpenMP_PriorityClause, OpenMP_AllocateClause, OpenMP_GrainsizeClause,
599-
OpenMP_NumTasksClause, OpenMP_NogroupClause
606+
OpenMP_NumTasksClause, OpenMP_NogroupClause, OpenMP_PrivateClause
600607
], singleRegion = true> {
601608
let summary = "taskloop construct";
602609
let description = [{
@@ -1076,12 +1083,12 @@ def TargetUpdateOp: OpenMP_Op<"target_update", traits = [
10761083
def TargetOp : OpenMP_Op<"target", traits = [
10771084
AttrSizedOperandSegments, IsolatedFromAbove, OutlineableOpenMPOpInterface
10781085
], clauses = [
1079-
// TODO: Complete clause list (allocate, defaultmap, in_reduction,
1080-
// uses_allocators).
1086+
// TODO: Complete clause list (defaultmap, uses_allocators).
10811087
// TODO: Sort clauses alphabetically.
10821088
OpenMP_IfClause, OpenMP_DeviceClause, OpenMP_ThreadLimitClause,
10831089
OpenMP_DependClause, OpenMP_NowaitClause, OpenMP_IsDevicePtrClause,
1084-
OpenMP_HasDeviceAddrClause, OpenMP_MapClause, OpenMP_PrivateClause
1090+
OpenMP_HasDeviceAddrClause, OpenMP_MapClause, OpenMP_PrivateClause,
1091+
OpenMP_AllocateClause, OpenMP_InReductionClause
10851092
], singleRegion = true> {
10861093
let summary = "target construct";
10871094
let description = [{
@@ -1207,7 +1214,7 @@ def OrderedRegionOp : OpenMP_Op<"ordered.region", clauses = [
12071214
//===----------------------------------------------------------------------===//
12081215

12091216
def TaskwaitOp : OpenMP_Op<"taskwait", clauses = [
1210-
// TODO: Complete clause list (depend, nowait).
1217+
OpenMP_DependClause, OpenMP_NowaitClause
12111218
]> {
12121219
let summary = "taskwait construct";
12131220
let description = [{
@@ -1218,9 +1225,6 @@ def TaskwaitOp : OpenMP_Op<"taskwait", clauses = [
12181225
let builders = [
12191226
OpBuilder<(ins CArg<"const TaskwaitOperands &">:$clauses)>
12201227
];
1221-
1222-
// TODO: Remove overriden `assemblyFormat` once a clause is added.
1223-
let assemblyFormat = "attr-dict";
12241228
}
12251229

12261230
//===----------------------------------------------------------------------===//

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

Lines changed: 32 additions & 17 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() {
@@ -1756,12 +1764,15 @@ LogicalResult WsloopOp::verify() {
17561764
void SimdOp::build(OpBuilder &builder, OperationState &state,
17571765
const SimdOperands &clauses) {
17581766
MLIRContext *ctx = builder.getContext();
1759-
// TODO Store clauses in op: privateVars, privateSyms, reductionVars,
1760-
// reduceVarByRef, reductionDeclSymbols.
1767+
// TODO Store clauses in op: linearVars, linearStepVars, privateVars,
1768+
// privateSyms, reductionVars, reductionByref, reductionSyms.
17611769
SimdOp::build(builder, state, clauses.alignedVars,
17621770
makeArrayAttr(ctx, clauses.alignments), clauses.ifVar,
1771+
/*linear_vars=*/{}, /*linear_step_vars=*/{},
17631772
clauses.nontemporalVars, clauses.order, clauses.orderMod,
1764-
clauses.safelen, clauses.simdlen);
1773+
/*private_vars=*/{}, /*private_syms=*/nullptr,
1774+
/*reduction_vars=*/{}, /*reduction_byref=*/nullptr,
1775+
/*reduction_syms=*/nullptr, clauses.safelen, clauses.simdlen);
17651776
}
17661777

17671778
LogicalResult SimdOp::verify() {
@@ -1795,7 +1806,8 @@ void DistributeOp::build(OpBuilder &builder, OperationState &state,
17951806
// TODO Store clauses in op: privateVars, privateSyms.
17961807
DistributeOp::build(builder, state, clauses.distScheduleStatic,
17971808
clauses.distScheduleChunkSize, clauses.allocateVars,
1798-
clauses.allocatorVars, clauses.order, clauses.orderMod);
1809+
clauses.allocatorVars, clauses.order, clauses.orderMod,
1810+
/*private_vars=*/{}, /*private_syms=*/nullptr);
17991811
}
18001812

18011813
LogicalResult DistributeOp::verify() {
@@ -1927,7 +1939,8 @@ void TaskOp::build(OpBuilder &builder, OperationState &state,
19271939
makeDenseBoolArrayAttr(ctx, clauses.inReductionByref),
19281940
makeArrayAttr(ctx, clauses.inReductionSyms), clauses.priority,
19291941
makeArrayAttr(ctx, clauses.dependKinds), clauses.dependVars,
1930-
clauses.allocateVars, clauses.allocatorVars);
1942+
clauses.allocateVars, clauses.allocatorVars,
1943+
/*private_vars=*/{}, /*private_syms=*/nullptr);
19311944
}
19321945

19331946
LogicalResult TaskOp::verify() {
@@ -1975,7 +1988,8 @@ void TaskloopOp::build(OpBuilder &builder, OperationState &state,
19751988
makeDenseBoolArrayAttr(ctx, clauses.reductionByref),
19761989
makeArrayAttr(ctx, clauses.reductionSyms), clauses.priority,
19771990
clauses.allocateVars, clauses.allocatorVars,
1978-
clauses.grainsize, clauses.numTasks, clauses.nogroup);
1991+
clauses.grainsize, clauses.numTasks, clauses.nogroup,
1992+
/*private_vars=*/{}, /*private_syms=*/nullptr);
19791993
}
19801994

19811995
SmallVector<Value> TaskloopOp::getAllReductionVars() {
@@ -2225,8 +2239,9 @@ LogicalResult OrderedRegionOp::verify() {
22252239

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

22322247
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)