Skip to content

Commit 0048337

Browse files
authored
[OpenMP] Add definitions of TASKGRAPH, GRAPH_ID and GRAPH_RESET (#157502)
This only adds the definitions of the TASKGRAPH directive and the associated clauses, plus the minimal additional changes to make everything compile without errors.
1 parent e07716d commit 0048337

File tree

5 files changed

+37
-4
lines changed

5 files changed

+37
-4
lines changed

flang/include/flang/Lower/OpenMP/Clauses.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ using Firstprivate = tomp::clause::FirstprivateT<TypeTy, IdTy, ExprTy>;
229229
using From = tomp::clause::FromT<TypeTy, IdTy, ExprTy>;
230230
using Full = tomp::clause::FullT<TypeTy, IdTy, ExprTy>;
231231
using Grainsize = tomp::clause::GrainsizeT<TypeTy, IdTy, ExprTy>;
232+
using GraphId = tomp::clause::GraphIdT<TypeTy, IdTy, ExprTy>;
233+
using GraphReset = tomp::clause::GraphResetT<TypeTy, IdTy, ExprTy>;
232234
using HasDeviceAddr = tomp::clause::HasDeviceAddrT<TypeTy, IdTy, ExprTy>;
233235
using Hint = tomp::clause::HintT<TypeTy, IdTy, ExprTy>;
234236
using Holds = tomp::clause::HoldsT<TypeTy, IdTy, ExprTy>;

flang/lib/Lower/OpenMP/Clauses.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ MAKE_EMPTY_CLASS(Capture, Capture);
221221
MAKE_EMPTY_CLASS(Compare, Compare);
222222
MAKE_EMPTY_CLASS(DynamicAllocators, DynamicAllocators);
223223
MAKE_EMPTY_CLASS(Full, Full);
224+
MAKE_EMPTY_CLASS(GraphId, GraphId);
225+
MAKE_EMPTY_CLASS(GraphReset, GraphReset);
224226
MAKE_EMPTY_CLASS(Inbranch, Inbranch);
225227
MAKE_EMPTY_CLASS(Mergeable, Mergeable);
226228
MAKE_EMPTY_CLASS(Nogroup, Nogroup);

flang/lib/Semantics/check-omp-structure.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2793,6 +2793,8 @@ CHECK_SIMPLE_CLAUSE(Final, OMPC_final)
27932793
CHECK_SIMPLE_CLAUSE(Flush, OMPC_flush)
27942794
CHECK_SIMPLE_CLAUSE(Full, OMPC_full)
27952795
CHECK_SIMPLE_CLAUSE(Grainsize, OMPC_grainsize)
2796+
CHECK_SIMPLE_CLAUSE(GraphId, OMPC_graph_id)
2797+
CHECK_SIMPLE_CLAUSE(GraphReset, OMPC_graph_reset)
27962798
CHECK_SIMPLE_CLAUSE(Holds, OMPC_holds)
27972799
CHECK_SIMPLE_CLAUSE(Inclusive, OMPC_inclusive)
27982800
CHECK_SIMPLE_CLAUSE(Initializer, OMPC_initializer)

llvm/include/llvm/Frontend/OpenMP/ClauseT.h

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,18 @@ struct GrainsizeT {
660660
std::tuple<OPT(Prescriptiveness), GrainSize> t;
661661
};
662662

663+
// [6.0:438] `graph_id` clause
664+
template <typename T, typename I, typename E> //
665+
struct GraphIdT {
666+
using EmptyTrait = std::true_type;
667+
};
668+
669+
// [6.0:438] `graph_reset` clause
670+
template <typename T, typename I, typename E> //
671+
struct GraphResetT {
672+
using EmptyTrait = std::true_type;
673+
};
674+
663675
// V5.2: [5.4.9] `has_device_addr` clause
664676
template <typename T, typename I, typename E> //
665677
struct HasDeviceAddrT {
@@ -1254,10 +1266,11 @@ using ExtensionClausesT =
12541266
template <typename T, typename I, typename E>
12551267
using EmptyClausesT = std::variant<
12561268
AcqRelT<T, I, E>, AcquireT<T, I, E>, CaptureT<T, I, E>, CompareT<T, I, E>,
1257-
DynamicAllocatorsT<T, I, E>, FullT<T, I, E>, InbranchT<T, I, E>,
1258-
MergeableT<T, I, E>, NogroupT<T, I, E>, NoOpenmpRoutinesT<T, I, E>,
1259-
NoOpenmpT<T, I, E>, NoParallelismT<T, I, E>, NotinbranchT<T, I, E>,
1260-
NowaitT<T, I, E>, ReadT<T, I, E>, RelaxedT<T, I, E>, ReleaseT<T, I, E>,
1269+
DynamicAllocatorsT<T, I, E>, FullT<T, I, E>, GraphIdT<T, I, E>,
1270+
GraphResetT<T, I, E>, InbranchT<T, I, E>, MergeableT<T, I, E>,
1271+
NogroupT<T, I, E>, NoOpenmpRoutinesT<T, I, E>, NoOpenmpT<T, I, E>,
1272+
NoParallelismT<T, I, E>, NotinbranchT<T, I, E>, NowaitT<T, I, E>,
1273+
ReadT<T, I, E>, RelaxedT<T, I, E>, ReleaseT<T, I, E>,
12611274
ReverseOffloadT<T, I, E>, SeqCstT<T, I, E>, SimdT<T, I, E>,
12621275
ThreadsT<T, I, E>, UnifiedAddressT<T, I, E>, UnifiedSharedMemoryT<T, I, E>,
12631276
UnknownT<T, I, E>, UntiedT<T, I, E>, UseT<T, I, E>, WeakT<T, I, E>,

llvm/include/llvm/Frontend/OpenMP/OMP.td

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ def OMPC_GrainSize : Clause<[Spelling<"grainsize">]> {
226226
OMP_GRAINSIZE_Unknown
227227
];
228228
}
229+
def OMPC_GraphId : Clause<[Spelling<"graph_id">]> {
230+
}
231+
def OMPC_GraphReset : Clause<[Spelling<"graph_reset">]> {
232+
}
229233
def OMPC_HasDeviceAddr : Clause<[Spelling<"has_device_addr">]> {
230234
let clangClass = "OMPHasDeviceAddrClause";
231235
let flangClass = "OmpObjectList";
@@ -1210,6 +1214,16 @@ def OMP_Task : Directive<[Spelling<"task">]> {
12101214
let association = AS_Block;
12111215
let category = CA_Executable;
12121216
}
1217+
def OMP_Taskgraph : Directive<[Spelling<"taskgraph">]> {
1218+
let allowedOnceClauses = [
1219+
VersionedClause<OMPC_GraphId, 60>,
1220+
VersionedClause<OMPC_GraphReset, 60>,
1221+
VersionedClause<OMPC_If>,
1222+
VersionedClause<OMPC_NoGroup>,
1223+
];
1224+
let association = AS_Block;
1225+
let category = CA_Executable;
1226+
}
12131227
def OMP_TaskGroup : Directive<[Spelling<"taskgroup">]> {
12141228
let allowedClauses = [
12151229
VersionedClause<OMPC_Allocate, 50>,

0 commit comments

Comments
 (0)