1e5dd7070Spatrick //===--- StmtOpenMP.cpp - Classes for OpenMP directives -------------------===//
2e5dd7070Spatrick //
3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5dd7070Spatrick //
7e5dd7070Spatrick //===----------------------------------------------------------------------===//
8e5dd7070Spatrick //
9e5dd7070Spatrick // This file implements the subclesses of Stmt class declared in StmtOpenMP.h
10e5dd7070Spatrick //
11e5dd7070Spatrick //===----------------------------------------------------------------------===//
12e5dd7070Spatrick
13e5dd7070Spatrick #include "clang/AST/ASTContext.h"
14ec727ea7Spatrick #include "clang/AST/StmtOpenMP.h"
15e5dd7070Spatrick
16e5dd7070Spatrick using namespace clang;
17e5dd7070Spatrick using namespace llvm::omp;
18e5dd7070Spatrick
size(unsigned NumClauses,bool HasAssociatedStmt,unsigned NumChildren)19a9ac8606Spatrick size_t OMPChildren::size(unsigned NumClauses, bool HasAssociatedStmt,
20a9ac8606Spatrick unsigned NumChildren) {
21a9ac8606Spatrick return llvm::alignTo(
22a9ac8606Spatrick totalSizeToAlloc<OMPClause *, Stmt *>(
23a9ac8606Spatrick NumClauses, NumChildren + (HasAssociatedStmt ? 1 : 0)),
24a9ac8606Spatrick alignof(OMPChildren));
25a9ac8606Spatrick }
26a9ac8606Spatrick
setClauses(ArrayRef<OMPClause * > Clauses)27a9ac8606Spatrick void OMPChildren::setClauses(ArrayRef<OMPClause *> Clauses) {
28a9ac8606Spatrick assert(Clauses.size() == NumClauses &&
29e5dd7070Spatrick "Number of clauses is not the same as the preallocated buffer");
30a9ac8606Spatrick llvm::copy(Clauses, getTrailingObjects<OMPClause *>());
31a9ac8606Spatrick }
32a9ac8606Spatrick
getChildren()33a9ac8606Spatrick MutableArrayRef<Stmt *> OMPChildren::getChildren() {
34*12c85518Srobert return llvm::MutableArrayRef(getTrailingObjects<Stmt *>(), NumChildren);
35a9ac8606Spatrick }
36a9ac8606Spatrick
Create(void * Mem,ArrayRef<OMPClause * > Clauses)37a9ac8606Spatrick OMPChildren *OMPChildren::Create(void *Mem, ArrayRef<OMPClause *> Clauses) {
38a9ac8606Spatrick auto *Data = CreateEmpty(Mem, Clauses.size());
39a9ac8606Spatrick Data->setClauses(Clauses);
40a9ac8606Spatrick return Data;
41a9ac8606Spatrick }
42a9ac8606Spatrick
Create(void * Mem,ArrayRef<OMPClause * > Clauses,Stmt * S,unsigned NumChildren)43a9ac8606Spatrick OMPChildren *OMPChildren::Create(void *Mem, ArrayRef<OMPClause *> Clauses,
44a9ac8606Spatrick Stmt *S, unsigned NumChildren) {
45a9ac8606Spatrick auto *Data = CreateEmpty(Mem, Clauses.size(), S, NumChildren);
46a9ac8606Spatrick Data->setClauses(Clauses);
47a9ac8606Spatrick if (S)
48a9ac8606Spatrick Data->setAssociatedStmt(S);
49a9ac8606Spatrick return Data;
50a9ac8606Spatrick }
51a9ac8606Spatrick
CreateEmpty(void * Mem,unsigned NumClauses,bool HasAssociatedStmt,unsigned NumChildren)52a9ac8606Spatrick OMPChildren *OMPChildren::CreateEmpty(void *Mem, unsigned NumClauses,
53a9ac8606Spatrick bool HasAssociatedStmt,
54a9ac8606Spatrick unsigned NumChildren) {
55a9ac8606Spatrick return new (Mem) OMPChildren(NumClauses, NumChildren, HasAssociatedStmt);
56e5dd7070Spatrick }
57e5dd7070Spatrick
isStandaloneDirective() const58e5dd7070Spatrick bool OMPExecutableDirective::isStandaloneDirective() const {
59e5dd7070Spatrick // Special case: 'omp target enter data', 'omp target exit data',
60e5dd7070Spatrick // 'omp target update' are stand-alone directives, but for implementation
61e5dd7070Spatrick // reasons they have empty synthetic structured block, to simplify codegen.
62e5dd7070Spatrick if (isa<OMPTargetEnterDataDirective>(this) ||
63e5dd7070Spatrick isa<OMPTargetExitDataDirective>(this) ||
64e5dd7070Spatrick isa<OMPTargetUpdateDirective>(this))
65e5dd7070Spatrick return true;
66a9ac8606Spatrick return !hasAssociatedStmt();
67e5dd7070Spatrick }
68e5dd7070Spatrick
getStructuredBlock()69a9ac8606Spatrick Stmt *OMPExecutableDirective::getStructuredBlock() {
70e5dd7070Spatrick assert(!isStandaloneDirective() &&
71e5dd7070Spatrick "Standalone Executable Directives don't have Structured Blocks.");
72e5dd7070Spatrick if (auto *LD = dyn_cast<OMPLoopDirective>(this))
73e5dd7070Spatrick return LD->getBody();
74a9ac8606Spatrick return getRawStmt();
75e5dd7070Spatrick }
76e5dd7070Spatrick
77a9ac8606Spatrick Stmt *
tryToFindNextInnerLoop(Stmt * CurStmt,bool TryImperfectlyNestedLoops)78a9ac8606Spatrick OMPLoopBasedDirective::tryToFindNextInnerLoop(Stmt *CurStmt,
79e5dd7070Spatrick bool TryImperfectlyNestedLoops) {
80e5dd7070Spatrick Stmt *OrigStmt = CurStmt;
81e5dd7070Spatrick CurStmt = CurStmt->IgnoreContainers();
82e5dd7070Spatrick // Additional work for imperfectly nested loops, introduced in OpenMP 5.0.
83e5dd7070Spatrick if (TryImperfectlyNestedLoops) {
84e5dd7070Spatrick if (auto *CS = dyn_cast<CompoundStmt>(CurStmt)) {
85e5dd7070Spatrick CurStmt = nullptr;
86e5dd7070Spatrick SmallVector<CompoundStmt *, 4> Statements(1, CS);
87e5dd7070Spatrick SmallVector<CompoundStmt *, 4> NextStatements;
88e5dd7070Spatrick while (!Statements.empty()) {
89e5dd7070Spatrick CS = Statements.pop_back_val();
90e5dd7070Spatrick if (!CS)
91e5dd7070Spatrick continue;
92e5dd7070Spatrick for (Stmt *S : CS->body()) {
93e5dd7070Spatrick if (!S)
94e5dd7070Spatrick continue;
95a9ac8606Spatrick if (auto *CanonLoop = dyn_cast<OMPCanonicalLoop>(S))
96a9ac8606Spatrick S = CanonLoop->getLoopStmt();
97a9ac8606Spatrick if (isa<ForStmt>(S) || isa<CXXForRangeStmt>(S) ||
98a9ac8606Spatrick (isa<OMPLoopBasedDirective>(S) && !isa<OMPLoopDirective>(S))) {
99e5dd7070Spatrick // Only single loop construct is allowed.
100e5dd7070Spatrick if (CurStmt) {
101e5dd7070Spatrick CurStmt = OrigStmt;
102e5dd7070Spatrick break;
103e5dd7070Spatrick }
104e5dd7070Spatrick CurStmt = S;
105e5dd7070Spatrick continue;
106e5dd7070Spatrick }
107e5dd7070Spatrick S = S->IgnoreContainers();
108e5dd7070Spatrick if (auto *InnerCS = dyn_cast_or_null<CompoundStmt>(S))
109e5dd7070Spatrick NextStatements.push_back(InnerCS);
110e5dd7070Spatrick }
111e5dd7070Spatrick if (Statements.empty()) {
112e5dd7070Spatrick // Found single inner loop or multiple loops - exit.
113e5dd7070Spatrick if (CurStmt)
114e5dd7070Spatrick break;
115e5dd7070Spatrick Statements.swap(NextStatements);
116e5dd7070Spatrick }
117e5dd7070Spatrick }
118e5dd7070Spatrick if (!CurStmt)
119e5dd7070Spatrick CurStmt = OrigStmt;
120e5dd7070Spatrick }
121e5dd7070Spatrick }
122e5dd7070Spatrick return CurStmt;
123e5dd7070Spatrick }
124e5dd7070Spatrick
doForAllLoops(Stmt * CurStmt,bool TryImperfectlyNestedLoops,unsigned NumLoops,llvm::function_ref<bool (unsigned,Stmt *)> Callback,llvm::function_ref<void (OMPLoopTransformationDirective *)> OnTransformationCallback)125a9ac8606Spatrick bool OMPLoopBasedDirective::doForAllLoops(
126a9ac8606Spatrick Stmt *CurStmt, bool TryImperfectlyNestedLoops, unsigned NumLoops,
127a9ac8606Spatrick llvm::function_ref<bool(unsigned, Stmt *)> Callback,
128*12c85518Srobert llvm::function_ref<void(OMPLoopTransformationDirective *)>
129a9ac8606Spatrick OnTransformationCallback) {
130a9ac8606Spatrick CurStmt = CurStmt->IgnoreContainers();
131a9ac8606Spatrick for (unsigned Cnt = 0; Cnt < NumLoops; ++Cnt) {
132a9ac8606Spatrick while (true) {
133*12c85518Srobert auto *Dir = dyn_cast<OMPLoopTransformationDirective>(CurStmt);
134*12c85518Srobert if (!Dir)
135a9ac8606Spatrick break;
136*12c85518Srobert
137*12c85518Srobert OnTransformationCallback(Dir);
138*12c85518Srobert
139*12c85518Srobert Stmt *TransformedStmt = Dir->getTransformedStmt();
140*12c85518Srobert if (!TransformedStmt) {
141*12c85518Srobert unsigned NumGeneratedLoops = Dir->getNumGeneratedLoops();
142*12c85518Srobert if (NumGeneratedLoops == 0) {
143*12c85518Srobert // May happen if the loop transformation does not result in a
144*12c85518Srobert // generated loop (such as full unrolling).
145*12c85518Srobert break;
146*12c85518Srobert }
147*12c85518Srobert if (NumGeneratedLoops > 0) {
148*12c85518Srobert // The loop transformation construct has generated loops, but these
149*12c85518Srobert // may not have been generated yet due to being in a dependent
150*12c85518Srobert // context.
151*12c85518Srobert return true;
152*12c85518Srobert }
153a9ac8606Spatrick }
154a9ac8606Spatrick
155*12c85518Srobert CurStmt = TransformedStmt;
156a9ac8606Spatrick }
157a9ac8606Spatrick if (auto *CanonLoop = dyn_cast<OMPCanonicalLoop>(CurStmt))
158a9ac8606Spatrick CurStmt = CanonLoop->getLoopStmt();
159a9ac8606Spatrick if (Callback(Cnt, CurStmt))
160a9ac8606Spatrick return false;
161a9ac8606Spatrick // Move on to the next nested for loop, or to the loop body.
162a9ac8606Spatrick // OpenMP [2.8.1, simd construct, Restrictions]
163a9ac8606Spatrick // All loops associated with the construct must be perfectly nested; that
164a9ac8606Spatrick // is, there must be no intervening code nor any OpenMP directive between
165a9ac8606Spatrick // any two loops.
166a9ac8606Spatrick if (auto *For = dyn_cast<ForStmt>(CurStmt)) {
167a9ac8606Spatrick CurStmt = For->getBody();
168a9ac8606Spatrick } else {
169a9ac8606Spatrick assert(isa<CXXForRangeStmt>(CurStmt) &&
170a9ac8606Spatrick "Expected canonical for or range-based for loops.");
171a9ac8606Spatrick CurStmt = cast<CXXForRangeStmt>(CurStmt)->getBody();
172a9ac8606Spatrick }
173a9ac8606Spatrick CurStmt = OMPLoopBasedDirective::tryToFindNextInnerLoop(
174a9ac8606Spatrick CurStmt, TryImperfectlyNestedLoops);
175a9ac8606Spatrick }
176a9ac8606Spatrick return true;
177a9ac8606Spatrick }
178a9ac8606Spatrick
doForAllLoopsBodies(Stmt * CurStmt,bool TryImperfectlyNestedLoops,unsigned NumLoops,llvm::function_ref<void (unsigned,Stmt *,Stmt *)> Callback)179a9ac8606Spatrick void OMPLoopBasedDirective::doForAllLoopsBodies(
180a9ac8606Spatrick Stmt *CurStmt, bool TryImperfectlyNestedLoops, unsigned NumLoops,
181a9ac8606Spatrick llvm::function_ref<void(unsigned, Stmt *, Stmt *)> Callback) {
182a9ac8606Spatrick bool Res = OMPLoopBasedDirective::doForAllLoops(
183a9ac8606Spatrick CurStmt, TryImperfectlyNestedLoops, NumLoops,
184a9ac8606Spatrick [Callback](unsigned Cnt, Stmt *Loop) {
185a9ac8606Spatrick Stmt *Body = nullptr;
186a9ac8606Spatrick if (auto *For = dyn_cast<ForStmt>(Loop)) {
187a9ac8606Spatrick Body = For->getBody();
188a9ac8606Spatrick } else {
189a9ac8606Spatrick assert(isa<CXXForRangeStmt>(Loop) &&
190a9ac8606Spatrick "Expected canonical for or range-based for loops.");
191a9ac8606Spatrick Body = cast<CXXForRangeStmt>(Loop)->getBody();
192a9ac8606Spatrick }
193a9ac8606Spatrick if (auto *CanonLoop = dyn_cast<OMPCanonicalLoop>(Body))
194a9ac8606Spatrick Body = CanonLoop->getLoopStmt();
195a9ac8606Spatrick Callback(Cnt, Loop, Body);
196a9ac8606Spatrick return false;
197a9ac8606Spatrick });
198a9ac8606Spatrick assert(Res && "Expected only loops");
199a9ac8606Spatrick (void)Res;
200a9ac8606Spatrick }
201a9ac8606Spatrick
getBody()202e5dd7070Spatrick Stmt *OMPLoopDirective::getBody() {
203e5dd7070Spatrick // This relies on the loop form is already checked by Sema.
204a9ac8606Spatrick Stmt *Body = nullptr;
205a9ac8606Spatrick OMPLoopBasedDirective::doForAllLoopsBodies(
206a9ac8606Spatrick Data->getRawStmt(), /*TryImperfectlyNestedLoops=*/true,
207a9ac8606Spatrick NumAssociatedLoops,
208a9ac8606Spatrick [&Body](unsigned, Stmt *, Stmt *BodyStmt) { Body = BodyStmt; });
209e5dd7070Spatrick return Body;
210e5dd7070Spatrick }
211e5dd7070Spatrick
setCounters(ArrayRef<Expr * > A)212e5dd7070Spatrick void OMPLoopDirective::setCounters(ArrayRef<Expr *> A) {
213a9ac8606Spatrick assert(A.size() == getLoopsNumber() &&
214e5dd7070Spatrick "Number of loop counters is not the same as the collapsed number");
215a9ac8606Spatrick llvm::copy(A, getCounters().begin());
216e5dd7070Spatrick }
217e5dd7070Spatrick
setPrivateCounters(ArrayRef<Expr * > A)218e5dd7070Spatrick void OMPLoopDirective::setPrivateCounters(ArrayRef<Expr *> A) {
219a9ac8606Spatrick assert(A.size() == getLoopsNumber() && "Number of loop private counters "
220e5dd7070Spatrick "is not the same as the collapsed "
221e5dd7070Spatrick "number");
222a9ac8606Spatrick llvm::copy(A, getPrivateCounters().begin());
223e5dd7070Spatrick }
224e5dd7070Spatrick
setInits(ArrayRef<Expr * > A)225e5dd7070Spatrick void OMPLoopDirective::setInits(ArrayRef<Expr *> A) {
226a9ac8606Spatrick assert(A.size() == getLoopsNumber() &&
227e5dd7070Spatrick "Number of counter inits is not the same as the collapsed number");
228a9ac8606Spatrick llvm::copy(A, getInits().begin());
229e5dd7070Spatrick }
230e5dd7070Spatrick
setUpdates(ArrayRef<Expr * > A)231e5dd7070Spatrick void OMPLoopDirective::setUpdates(ArrayRef<Expr *> A) {
232a9ac8606Spatrick assert(A.size() == getLoopsNumber() &&
233e5dd7070Spatrick "Number of counter updates is not the same as the collapsed number");
234a9ac8606Spatrick llvm::copy(A, getUpdates().begin());
235e5dd7070Spatrick }
236e5dd7070Spatrick
setFinals(ArrayRef<Expr * > A)237e5dd7070Spatrick void OMPLoopDirective::setFinals(ArrayRef<Expr *> A) {
238a9ac8606Spatrick assert(A.size() == getLoopsNumber() &&
239e5dd7070Spatrick "Number of counter finals is not the same as the collapsed number");
240a9ac8606Spatrick llvm::copy(A, getFinals().begin());
241e5dd7070Spatrick }
242e5dd7070Spatrick
setDependentCounters(ArrayRef<Expr * > A)243e5dd7070Spatrick void OMPLoopDirective::setDependentCounters(ArrayRef<Expr *> A) {
244e5dd7070Spatrick assert(
245a9ac8606Spatrick A.size() == getLoopsNumber() &&
246e5dd7070Spatrick "Number of dependent counters is not the same as the collapsed number");
247e5dd7070Spatrick llvm::copy(A, getDependentCounters().begin());
248e5dd7070Spatrick }
249e5dd7070Spatrick
setDependentInits(ArrayRef<Expr * > A)250e5dd7070Spatrick void OMPLoopDirective::setDependentInits(ArrayRef<Expr *> A) {
251a9ac8606Spatrick assert(A.size() == getLoopsNumber() &&
252e5dd7070Spatrick "Number of dependent inits is not the same as the collapsed number");
253e5dd7070Spatrick llvm::copy(A, getDependentInits().begin());
254e5dd7070Spatrick }
255e5dd7070Spatrick
setFinalsConditions(ArrayRef<Expr * > A)256e5dd7070Spatrick void OMPLoopDirective::setFinalsConditions(ArrayRef<Expr *> A) {
257a9ac8606Spatrick assert(A.size() == getLoopsNumber() &&
258e5dd7070Spatrick "Number of finals conditions is not the same as the collapsed number");
259e5dd7070Spatrick llvm::copy(A, getFinalsConditions().begin());
260e5dd7070Spatrick }
261e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Stmt * IfStmt)262*12c85518Srobert OMPMetaDirective *OMPMetaDirective::Create(const ASTContext &C,
263*12c85518Srobert SourceLocation StartLoc,
264*12c85518Srobert SourceLocation EndLoc,
265*12c85518Srobert ArrayRef<OMPClause *> Clauses,
266*12c85518Srobert Stmt *AssociatedStmt, Stmt *IfStmt) {
267*12c85518Srobert auto *Dir = createDirective<OMPMetaDirective>(
268*12c85518Srobert C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
269*12c85518Srobert Dir->setIfStmt(IfStmt);
270*12c85518Srobert return Dir;
271*12c85518Srobert }
272*12c85518Srobert
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)273*12c85518Srobert OMPMetaDirective *OMPMetaDirective::CreateEmpty(const ASTContext &C,
274*12c85518Srobert unsigned NumClauses,
275*12c85518Srobert EmptyShell) {
276*12c85518Srobert return createEmptyDirective<OMPMetaDirective>(C, NumClauses,
277*12c85518Srobert /*HasAssociatedStmt=*/true,
278*12c85518Srobert /*NumChildren=*/1);
279*12c85518Srobert }
280*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * TaskRedRef,bool HasCancel)281e5dd7070Spatrick OMPParallelDirective *OMPParallelDirective::Create(
282e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
283ec727ea7Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
284ec727ea7Spatrick bool HasCancel) {
285a9ac8606Spatrick auto *Dir = createDirective<OMPParallelDirective>(
286a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
287ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
288e5dd7070Spatrick Dir->setHasCancel(HasCancel);
289e5dd7070Spatrick return Dir;
290e5dd7070Spatrick }
291e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)292e5dd7070Spatrick OMPParallelDirective *OMPParallelDirective::CreateEmpty(const ASTContext &C,
293e5dd7070Spatrick unsigned NumClauses,
294e5dd7070Spatrick EmptyShell) {
295a9ac8606Spatrick return createEmptyDirective<OMPParallelDirective>(C, NumClauses,
296a9ac8606Spatrick /*HasAssociatedStmt=*/true,
297a9ac8606Spatrick /*NumChildren=*/1);
298e5dd7070Spatrick }
299e5dd7070Spatrick
300e5dd7070Spatrick OMPSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)301e5dd7070Spatrick OMPSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
302e5dd7070Spatrick SourceLocation EndLoc, unsigned CollapsedNum,
303e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
304e5dd7070Spatrick const HelperExprs &Exprs) {
305a9ac8606Spatrick auto *Dir = createDirective<OMPSimdDirective>(
306a9ac8606Spatrick C, Clauses, AssociatedStmt, numLoopChildren(CollapsedNum, OMPD_simd),
307a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
308e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
309e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
310e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
311e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
312e5dd7070Spatrick Dir->setCond(Exprs.Cond);
313e5dd7070Spatrick Dir->setInit(Exprs.Init);
314e5dd7070Spatrick Dir->setInc(Exprs.Inc);
315e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
316e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
317e5dd7070Spatrick Dir->setInits(Exprs.Inits);
318e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
319e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
320e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
321e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
322e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
323e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
324e5dd7070Spatrick return Dir;
325e5dd7070Spatrick }
326e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)327e5dd7070Spatrick OMPSimdDirective *OMPSimdDirective::CreateEmpty(const ASTContext &C,
328e5dd7070Spatrick unsigned NumClauses,
329e5dd7070Spatrick unsigned CollapsedNum,
330e5dd7070Spatrick EmptyShell) {
331a9ac8606Spatrick return createEmptyDirective<OMPSimdDirective>(
332a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
333a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_simd), CollapsedNum);
334e5dd7070Spatrick }
335e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,Expr * TaskRedRef,bool HasCancel)336ec727ea7Spatrick OMPForDirective *OMPForDirective::Create(
337ec727ea7Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
338ec727ea7Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
339ec727ea7Spatrick const HelperExprs &Exprs, Expr *TaskRedRef, bool HasCancel) {
340a9ac8606Spatrick auto *Dir = createDirective<OMPForDirective>(
341a9ac8606Spatrick C, Clauses, AssociatedStmt, numLoopChildren(CollapsedNum, OMPD_for) + 1,
342a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
343e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
344e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
345e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
346e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
347e5dd7070Spatrick Dir->setCond(Exprs.Cond);
348e5dd7070Spatrick Dir->setInit(Exprs.Init);
349e5dd7070Spatrick Dir->setInc(Exprs.Inc);
350e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
351e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
352e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
353e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
354e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
355e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
356e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
357e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
358e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
359e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
360e5dd7070Spatrick Dir->setInits(Exprs.Inits);
361e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
362e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
363e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
364e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
365e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
366e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
367ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
368e5dd7070Spatrick Dir->setHasCancel(HasCancel);
369e5dd7070Spatrick return Dir;
370e5dd7070Spatrick }
371e5dd7070Spatrick
getTransformedStmt() const372*12c85518Srobert Stmt *OMPLoopTransformationDirective::getTransformedStmt() const {
373*12c85518Srobert switch (getStmtClass()) {
374*12c85518Srobert #define STMT(CLASS, PARENT)
375*12c85518Srobert #define ABSTRACT_STMT(CLASS)
376*12c85518Srobert #define OMPLOOPTRANSFORMATIONDIRECTIVE(CLASS, PARENT) \
377*12c85518Srobert case Stmt::CLASS##Class: \
378*12c85518Srobert return static_cast<const CLASS *>(this)->getTransformedStmt();
379*12c85518Srobert #include "clang/AST/StmtNodes.inc"
380*12c85518Srobert default:
381*12c85518Srobert llvm_unreachable("Not a loop transformation");
382*12c85518Srobert }
383*12c85518Srobert }
384*12c85518Srobert
getPreInits() const385*12c85518Srobert Stmt *OMPLoopTransformationDirective::getPreInits() const {
386*12c85518Srobert switch (getStmtClass()) {
387*12c85518Srobert #define STMT(CLASS, PARENT)
388*12c85518Srobert #define ABSTRACT_STMT(CLASS)
389*12c85518Srobert #define OMPLOOPTRANSFORMATIONDIRECTIVE(CLASS, PARENT) \
390*12c85518Srobert case Stmt::CLASS##Class: \
391*12c85518Srobert return static_cast<const CLASS *>(this)->getPreInits();
392*12c85518Srobert #include "clang/AST/StmtNodes.inc"
393*12c85518Srobert default:
394*12c85518Srobert llvm_unreachable("Not a loop transformation");
395*12c85518Srobert }
396*12c85518Srobert }
397*12c85518Srobert
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)398e5dd7070Spatrick OMPForDirective *OMPForDirective::CreateEmpty(const ASTContext &C,
399e5dd7070Spatrick unsigned NumClauses,
400e5dd7070Spatrick unsigned CollapsedNum,
401e5dd7070Spatrick EmptyShell) {
402a9ac8606Spatrick return createEmptyDirective<OMPForDirective>(
403a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
404a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_for) + 1, CollapsedNum);
405a9ac8606Spatrick }
406a9ac8606Spatrick
407a9ac8606Spatrick OMPTileDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,unsigned NumLoops,Stmt * AssociatedStmt,Stmt * TransformedStmt,Stmt * PreInits)408a9ac8606Spatrick OMPTileDirective::Create(const ASTContext &C, SourceLocation StartLoc,
409a9ac8606Spatrick SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
410a9ac8606Spatrick unsigned NumLoops, Stmt *AssociatedStmt,
411a9ac8606Spatrick Stmt *TransformedStmt, Stmt *PreInits) {
412a9ac8606Spatrick OMPTileDirective *Dir = createDirective<OMPTileDirective>(
413a9ac8606Spatrick C, Clauses, AssociatedStmt, TransformedStmtOffset + 1, StartLoc, EndLoc,
414a9ac8606Spatrick NumLoops);
415a9ac8606Spatrick Dir->setTransformedStmt(TransformedStmt);
416a9ac8606Spatrick Dir->setPreInits(PreInits);
417a9ac8606Spatrick return Dir;
418a9ac8606Spatrick }
419a9ac8606Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned NumLoops)420a9ac8606Spatrick OMPTileDirective *OMPTileDirective::CreateEmpty(const ASTContext &C,
421a9ac8606Spatrick unsigned NumClauses,
422a9ac8606Spatrick unsigned NumLoops) {
423a9ac8606Spatrick return createEmptyDirective<OMPTileDirective>(
424a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true, TransformedStmtOffset + 1,
425a9ac8606Spatrick SourceLocation(), SourceLocation(), NumLoops);
426a9ac8606Spatrick }
427a9ac8606Spatrick
428a9ac8606Spatrick OMPUnrollDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,unsigned NumGeneratedLoops,Stmt * TransformedStmt,Stmt * PreInits)429a9ac8606Spatrick OMPUnrollDirective::Create(const ASTContext &C, SourceLocation StartLoc,
430a9ac8606Spatrick SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
431*12c85518Srobert Stmt *AssociatedStmt, unsigned NumGeneratedLoops,
432*12c85518Srobert Stmt *TransformedStmt, Stmt *PreInits) {
433*12c85518Srobert assert(NumGeneratedLoops <= 1 && "Unrolling generates at most one loop");
434*12c85518Srobert
435a9ac8606Spatrick auto *Dir = createDirective<OMPUnrollDirective>(
436a9ac8606Spatrick C, Clauses, AssociatedStmt, TransformedStmtOffset + 1, StartLoc, EndLoc);
437*12c85518Srobert Dir->setNumGeneratedLoops(NumGeneratedLoops);
438a9ac8606Spatrick Dir->setTransformedStmt(TransformedStmt);
439a9ac8606Spatrick Dir->setPreInits(PreInits);
440a9ac8606Spatrick return Dir;
441a9ac8606Spatrick }
442a9ac8606Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses)443a9ac8606Spatrick OMPUnrollDirective *OMPUnrollDirective::CreateEmpty(const ASTContext &C,
444a9ac8606Spatrick unsigned NumClauses) {
445a9ac8606Spatrick return createEmptyDirective<OMPUnrollDirective>(
446a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true, TransformedStmtOffset + 1,
447a9ac8606Spatrick SourceLocation(), SourceLocation());
448e5dd7070Spatrick }
449e5dd7070Spatrick
450e5dd7070Spatrick OMPForSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)451e5dd7070Spatrick OMPForSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
452e5dd7070Spatrick SourceLocation EndLoc, unsigned CollapsedNum,
453e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
454e5dd7070Spatrick const HelperExprs &Exprs) {
455a9ac8606Spatrick auto *Dir = createDirective<OMPForSimdDirective>(
456a9ac8606Spatrick C, Clauses, AssociatedStmt, numLoopChildren(CollapsedNum, OMPD_for_simd),
457a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
458e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
459e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
460e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
461e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
462e5dd7070Spatrick Dir->setCond(Exprs.Cond);
463e5dd7070Spatrick Dir->setInit(Exprs.Init);
464e5dd7070Spatrick Dir->setInc(Exprs.Inc);
465e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
466e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
467e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
468e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
469e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
470e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
471e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
472e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
473e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
474e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
475e5dd7070Spatrick Dir->setInits(Exprs.Inits);
476e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
477e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
478e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
479e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
480e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
481e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
482e5dd7070Spatrick return Dir;
483e5dd7070Spatrick }
484e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)485e5dd7070Spatrick OMPForSimdDirective *OMPForSimdDirective::CreateEmpty(const ASTContext &C,
486e5dd7070Spatrick unsigned NumClauses,
487e5dd7070Spatrick unsigned CollapsedNum,
488e5dd7070Spatrick EmptyShell) {
489a9ac8606Spatrick return createEmptyDirective<OMPForSimdDirective>(
490a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
491a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_for_simd), CollapsedNum);
492e5dd7070Spatrick }
493e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * TaskRedRef,bool HasCancel)494e5dd7070Spatrick OMPSectionsDirective *OMPSectionsDirective::Create(
495e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
496ec727ea7Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
497ec727ea7Spatrick bool HasCancel) {
498a9ac8606Spatrick auto *Dir = createDirective<OMPSectionsDirective>(C, Clauses, AssociatedStmt,
499a9ac8606Spatrick /*NumChildren=*/1, StartLoc,
500a9ac8606Spatrick EndLoc);
501ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
502e5dd7070Spatrick Dir->setHasCancel(HasCancel);
503e5dd7070Spatrick return Dir;
504e5dd7070Spatrick }
505e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)506e5dd7070Spatrick OMPSectionsDirective *OMPSectionsDirective::CreateEmpty(const ASTContext &C,
507e5dd7070Spatrick unsigned NumClauses,
508e5dd7070Spatrick EmptyShell) {
509a9ac8606Spatrick return createEmptyDirective<OMPSectionsDirective>(C, NumClauses,
510a9ac8606Spatrick /*HasAssociatedStmt=*/true,
511a9ac8606Spatrick /*NumChildren=*/1);
512e5dd7070Spatrick }
513e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,Stmt * AssociatedStmt,bool HasCancel)514e5dd7070Spatrick OMPSectionDirective *OMPSectionDirective::Create(const ASTContext &C,
515e5dd7070Spatrick SourceLocation StartLoc,
516e5dd7070Spatrick SourceLocation EndLoc,
517e5dd7070Spatrick Stmt *AssociatedStmt,
518e5dd7070Spatrick bool HasCancel) {
519a9ac8606Spatrick auto *Dir =
520*12c85518Srobert createDirective<OMPSectionDirective>(C, std::nullopt, AssociatedStmt,
521*12c85518Srobert /*NumChildren=*/0, StartLoc, EndLoc);
522e5dd7070Spatrick Dir->setHasCancel(HasCancel);
523e5dd7070Spatrick return Dir;
524e5dd7070Spatrick }
525e5dd7070Spatrick
CreateEmpty(const ASTContext & C,EmptyShell)526e5dd7070Spatrick OMPSectionDirective *OMPSectionDirective::CreateEmpty(const ASTContext &C,
527e5dd7070Spatrick EmptyShell) {
528a9ac8606Spatrick return createEmptyDirective<OMPSectionDirective>(C, /*NumClauses=*/0,
529a9ac8606Spatrick /*HasAssociatedStmt=*/true);
530e5dd7070Spatrick }
531e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)532e5dd7070Spatrick OMPSingleDirective *OMPSingleDirective::Create(const ASTContext &C,
533e5dd7070Spatrick SourceLocation StartLoc,
534e5dd7070Spatrick SourceLocation EndLoc,
535e5dd7070Spatrick ArrayRef<OMPClause *> Clauses,
536e5dd7070Spatrick Stmt *AssociatedStmt) {
537a9ac8606Spatrick return createDirective<OMPSingleDirective>(C, Clauses, AssociatedStmt,
538a9ac8606Spatrick /*NumChildren=*/0, StartLoc,
539a9ac8606Spatrick EndLoc);
540e5dd7070Spatrick }
541e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)542e5dd7070Spatrick OMPSingleDirective *OMPSingleDirective::CreateEmpty(const ASTContext &C,
543e5dd7070Spatrick unsigned NumClauses,
544e5dd7070Spatrick EmptyShell) {
545a9ac8606Spatrick return createEmptyDirective<OMPSingleDirective>(C, NumClauses,
546a9ac8606Spatrick /*HasAssociatedStmt=*/true);
547e5dd7070Spatrick }
548e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,Stmt * AssociatedStmt)549e5dd7070Spatrick OMPMasterDirective *OMPMasterDirective::Create(const ASTContext &C,
550e5dd7070Spatrick SourceLocation StartLoc,
551e5dd7070Spatrick SourceLocation EndLoc,
552e5dd7070Spatrick Stmt *AssociatedStmt) {
553*12c85518Srobert return createDirective<OMPMasterDirective>(C, std::nullopt, AssociatedStmt,
554a9ac8606Spatrick /*NumChildren=*/0, StartLoc,
555a9ac8606Spatrick EndLoc);
556e5dd7070Spatrick }
557e5dd7070Spatrick
CreateEmpty(const ASTContext & C,EmptyShell)558e5dd7070Spatrick OMPMasterDirective *OMPMasterDirective::CreateEmpty(const ASTContext &C,
559e5dd7070Spatrick EmptyShell) {
560a9ac8606Spatrick return createEmptyDirective<OMPMasterDirective>(C, /*NumClauses=*/0,
561a9ac8606Spatrick /*HasAssociatedStmt=*/true);
562e5dd7070Spatrick }
563e5dd7070Spatrick
Create(const ASTContext & C,const DeclarationNameInfo & Name,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)564e5dd7070Spatrick OMPCriticalDirective *OMPCriticalDirective::Create(
565e5dd7070Spatrick const ASTContext &C, const DeclarationNameInfo &Name,
566e5dd7070Spatrick SourceLocation StartLoc, SourceLocation EndLoc,
567e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
568a9ac8606Spatrick return createDirective<OMPCriticalDirective>(C, Clauses, AssociatedStmt,
569a9ac8606Spatrick /*NumChildren=*/0, Name,
570a9ac8606Spatrick StartLoc, EndLoc);
571e5dd7070Spatrick }
572e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)573e5dd7070Spatrick OMPCriticalDirective *OMPCriticalDirective::CreateEmpty(const ASTContext &C,
574e5dd7070Spatrick unsigned NumClauses,
575e5dd7070Spatrick EmptyShell) {
576a9ac8606Spatrick return createEmptyDirective<OMPCriticalDirective>(C, NumClauses,
577a9ac8606Spatrick /*HasAssociatedStmt=*/true);
578e5dd7070Spatrick }
579e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,Expr * TaskRedRef,bool HasCancel)580e5dd7070Spatrick OMPParallelForDirective *OMPParallelForDirective::Create(
581e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
582e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
583ec727ea7Spatrick const HelperExprs &Exprs, Expr *TaskRedRef, bool HasCancel) {
584a9ac8606Spatrick auto *Dir = createDirective<OMPParallelForDirective>(
585a9ac8606Spatrick C, Clauses, AssociatedStmt,
586a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_for) + 1, StartLoc, EndLoc,
587a9ac8606Spatrick CollapsedNum);
588e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
589e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
590e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
591e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
592e5dd7070Spatrick Dir->setCond(Exprs.Cond);
593e5dd7070Spatrick Dir->setInit(Exprs.Init);
594e5dd7070Spatrick Dir->setInc(Exprs.Inc);
595e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
596e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
597e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
598e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
599e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
600e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
601e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
602e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
603e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
604e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
605e5dd7070Spatrick Dir->setInits(Exprs.Inits);
606e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
607e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
608e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
609e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
610e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
611e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
612ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
613e5dd7070Spatrick Dir->setHasCancel(HasCancel);
614e5dd7070Spatrick return Dir;
615e5dd7070Spatrick }
616e5dd7070Spatrick
617e5dd7070Spatrick OMPParallelForDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)618e5dd7070Spatrick OMPParallelForDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
619e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
620a9ac8606Spatrick return createEmptyDirective<OMPParallelForDirective>(
621a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
622a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_for) + 1, CollapsedNum);
623e5dd7070Spatrick }
624e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)625e5dd7070Spatrick OMPParallelForSimdDirective *OMPParallelForSimdDirective::Create(
626e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
627e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
628e5dd7070Spatrick const HelperExprs &Exprs) {
629a9ac8606Spatrick auto *Dir = createDirective<OMPParallelForSimdDirective>(
630a9ac8606Spatrick C, Clauses, AssociatedStmt,
631a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_for_simd), StartLoc, EndLoc,
632a9ac8606Spatrick CollapsedNum);
633e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
634e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
635e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
636e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
637e5dd7070Spatrick Dir->setCond(Exprs.Cond);
638e5dd7070Spatrick Dir->setInit(Exprs.Init);
639e5dd7070Spatrick Dir->setInc(Exprs.Inc);
640e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
641e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
642e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
643e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
644e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
645e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
646e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
647e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
648e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
649e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
650e5dd7070Spatrick Dir->setInits(Exprs.Inits);
651e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
652e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
653e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
654e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
655e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
656e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
657e5dd7070Spatrick return Dir;
658e5dd7070Spatrick }
659e5dd7070Spatrick
660e5dd7070Spatrick OMPParallelForSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)661e5dd7070Spatrick OMPParallelForSimdDirective::CreateEmpty(const ASTContext &C,
662e5dd7070Spatrick unsigned NumClauses,
663e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
664a9ac8606Spatrick return createEmptyDirective<OMPParallelForSimdDirective>(
665a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
666a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_for_simd), CollapsedNum);
667e5dd7070Spatrick }
668e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * TaskRedRef)669e5dd7070Spatrick OMPParallelMasterDirective *OMPParallelMasterDirective::Create(
670e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
671ec727ea7Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef) {
672a9ac8606Spatrick auto *Dir = createDirective<OMPParallelMasterDirective>(
673a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
674ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
675e5dd7070Spatrick return Dir;
676e5dd7070Spatrick }
677e5dd7070Spatrick
678a9ac8606Spatrick OMPParallelMasterDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)679a9ac8606Spatrick OMPParallelMasterDirective::CreateEmpty(const ASTContext &C,
680a9ac8606Spatrick unsigned NumClauses, EmptyShell) {
681a9ac8606Spatrick return createEmptyDirective<OMPParallelMasterDirective>(
682a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true, /*NumChildren=*/1);
683e5dd7070Spatrick }
684e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * TaskRedRef)685*12c85518Srobert OMPParallelMaskedDirective *OMPParallelMaskedDirective::Create(
686*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
687*12c85518Srobert ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef) {
688*12c85518Srobert auto *Dir = createDirective<OMPParallelMaskedDirective>(
689*12c85518Srobert C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
690*12c85518Srobert Dir->setTaskReductionRefExpr(TaskRedRef);
691*12c85518Srobert return Dir;
692*12c85518Srobert }
693*12c85518Srobert
694*12c85518Srobert OMPParallelMaskedDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)695*12c85518Srobert OMPParallelMaskedDirective::CreateEmpty(const ASTContext &C,
696*12c85518Srobert unsigned NumClauses, EmptyShell) {
697*12c85518Srobert return createEmptyDirective<OMPParallelMaskedDirective>(
698*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true, /*NumChildren=*/1);
699*12c85518Srobert }
700*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * TaskRedRef,bool HasCancel)701e5dd7070Spatrick OMPParallelSectionsDirective *OMPParallelSectionsDirective::Create(
702e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
703ec727ea7Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
704ec727ea7Spatrick bool HasCancel) {
705a9ac8606Spatrick auto *Dir = createDirective<OMPParallelSectionsDirective>(
706a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
707ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
708e5dd7070Spatrick Dir->setHasCancel(HasCancel);
709e5dd7070Spatrick return Dir;
710e5dd7070Spatrick }
711e5dd7070Spatrick
712e5dd7070Spatrick OMPParallelSectionsDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)713e5dd7070Spatrick OMPParallelSectionsDirective::CreateEmpty(const ASTContext &C,
714e5dd7070Spatrick unsigned NumClauses, EmptyShell) {
715a9ac8606Spatrick return createEmptyDirective<OMPParallelSectionsDirective>(
716a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true, /*NumChildren=*/1);
717e5dd7070Spatrick }
718e5dd7070Spatrick
719e5dd7070Spatrick OMPTaskDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,bool HasCancel)720e5dd7070Spatrick OMPTaskDirective::Create(const ASTContext &C, SourceLocation StartLoc,
721e5dd7070Spatrick SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
722e5dd7070Spatrick Stmt *AssociatedStmt, bool HasCancel) {
723a9ac8606Spatrick auto *Dir = createDirective<OMPTaskDirective>(
724a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
725e5dd7070Spatrick Dir->setHasCancel(HasCancel);
726e5dd7070Spatrick return Dir;
727e5dd7070Spatrick }
728e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)729e5dd7070Spatrick OMPTaskDirective *OMPTaskDirective::CreateEmpty(const ASTContext &C,
730e5dd7070Spatrick unsigned NumClauses,
731e5dd7070Spatrick EmptyShell) {
732a9ac8606Spatrick return createEmptyDirective<OMPTaskDirective>(C, NumClauses,
733a9ac8606Spatrick /*HasAssociatedStmt=*/true);
734e5dd7070Spatrick }
735e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc)736e5dd7070Spatrick OMPTaskyieldDirective *OMPTaskyieldDirective::Create(const ASTContext &C,
737e5dd7070Spatrick SourceLocation StartLoc,
738e5dd7070Spatrick SourceLocation EndLoc) {
739a9ac8606Spatrick return new (C) OMPTaskyieldDirective(StartLoc, EndLoc);
740e5dd7070Spatrick }
741e5dd7070Spatrick
CreateEmpty(const ASTContext & C,EmptyShell)742e5dd7070Spatrick OMPTaskyieldDirective *OMPTaskyieldDirective::CreateEmpty(const ASTContext &C,
743e5dd7070Spatrick EmptyShell) {
744a9ac8606Spatrick return new (C) OMPTaskyieldDirective();
745e5dd7070Spatrick }
746e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses)747*12c85518Srobert OMPErrorDirective *OMPErrorDirective::Create(const ASTContext &C,
748*12c85518Srobert SourceLocation StartLoc,
749*12c85518Srobert SourceLocation EndLoc,
750*12c85518Srobert ArrayRef<OMPClause *> Clauses) {
751*12c85518Srobert return createDirective<OMPErrorDirective>(
752*12c85518Srobert C, Clauses, /*AssociatedStmt=*/nullptr, /*NumChildren=*/0, StartLoc,
753*12c85518Srobert EndLoc);
754*12c85518Srobert }
755*12c85518Srobert
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)756*12c85518Srobert OMPErrorDirective *OMPErrorDirective::CreateEmpty(const ASTContext &C,
757*12c85518Srobert unsigned NumClauses,
758*12c85518Srobert EmptyShell) {
759*12c85518Srobert return createEmptyDirective<OMPErrorDirective>(C, NumClauses);
760*12c85518Srobert }
761*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc)762e5dd7070Spatrick OMPBarrierDirective *OMPBarrierDirective::Create(const ASTContext &C,
763e5dd7070Spatrick SourceLocation StartLoc,
764e5dd7070Spatrick SourceLocation EndLoc) {
765a9ac8606Spatrick return new (C) OMPBarrierDirective(StartLoc, EndLoc);
766e5dd7070Spatrick }
767e5dd7070Spatrick
CreateEmpty(const ASTContext & C,EmptyShell)768e5dd7070Spatrick OMPBarrierDirective *OMPBarrierDirective::CreateEmpty(const ASTContext &C,
769e5dd7070Spatrick EmptyShell) {
770a9ac8606Spatrick return new (C) OMPBarrierDirective();
771e5dd7070Spatrick }
772e5dd7070Spatrick
773*12c85518Srobert OMPTaskwaitDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses)774*12c85518Srobert OMPTaskwaitDirective::Create(const ASTContext &C, SourceLocation StartLoc,
775*12c85518Srobert SourceLocation EndLoc,
776*12c85518Srobert ArrayRef<OMPClause *> Clauses) {
777*12c85518Srobert return createDirective<OMPTaskwaitDirective>(
778*12c85518Srobert C, Clauses, /*AssociatedStmt=*/nullptr, /*NumChildren=*/0, StartLoc,
779*12c85518Srobert EndLoc);
780e5dd7070Spatrick }
781e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)782e5dd7070Spatrick OMPTaskwaitDirective *OMPTaskwaitDirective::CreateEmpty(const ASTContext &C,
783*12c85518Srobert unsigned NumClauses,
784e5dd7070Spatrick EmptyShell) {
785*12c85518Srobert return createEmptyDirective<OMPTaskwaitDirective>(C, NumClauses);
786e5dd7070Spatrick }
787e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * ReductionRef)788e5dd7070Spatrick OMPTaskgroupDirective *OMPTaskgroupDirective::Create(
789e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
790e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *ReductionRef) {
791a9ac8606Spatrick auto *Dir = createDirective<OMPTaskgroupDirective>(
792a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
793e5dd7070Spatrick Dir->setReductionRef(ReductionRef);
794e5dd7070Spatrick return Dir;
795e5dd7070Spatrick }
796e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)797e5dd7070Spatrick OMPTaskgroupDirective *OMPTaskgroupDirective::CreateEmpty(const ASTContext &C,
798e5dd7070Spatrick unsigned NumClauses,
799e5dd7070Spatrick EmptyShell) {
800a9ac8606Spatrick return createEmptyDirective<OMPTaskgroupDirective>(
801a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true, /*NumChildren=*/1);
802e5dd7070Spatrick }
803e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,OpenMPDirectiveKind CancelRegion)804e5dd7070Spatrick OMPCancellationPointDirective *OMPCancellationPointDirective::Create(
805e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
806e5dd7070Spatrick OpenMPDirectiveKind CancelRegion) {
807a9ac8606Spatrick auto *Dir = new (C) OMPCancellationPointDirective(StartLoc, EndLoc);
808e5dd7070Spatrick Dir->setCancelRegion(CancelRegion);
809e5dd7070Spatrick return Dir;
810e5dd7070Spatrick }
811e5dd7070Spatrick
812e5dd7070Spatrick OMPCancellationPointDirective *
CreateEmpty(const ASTContext & C,EmptyShell)813e5dd7070Spatrick OMPCancellationPointDirective::CreateEmpty(const ASTContext &C, EmptyShell) {
814a9ac8606Spatrick return new (C) OMPCancellationPointDirective();
815e5dd7070Spatrick }
816e5dd7070Spatrick
817e5dd7070Spatrick OMPCancelDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,OpenMPDirectiveKind CancelRegion)818e5dd7070Spatrick OMPCancelDirective::Create(const ASTContext &C, SourceLocation StartLoc,
819e5dd7070Spatrick SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
820e5dd7070Spatrick OpenMPDirectiveKind CancelRegion) {
821a9ac8606Spatrick auto *Dir = createDirective<OMPCancelDirective>(
822a9ac8606Spatrick C, Clauses, /*AssociatedStmt=*/nullptr, /*NumChildren=*/0, StartLoc,
823a9ac8606Spatrick EndLoc);
824e5dd7070Spatrick Dir->setCancelRegion(CancelRegion);
825e5dd7070Spatrick return Dir;
826e5dd7070Spatrick }
827e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)828e5dd7070Spatrick OMPCancelDirective *OMPCancelDirective::CreateEmpty(const ASTContext &C,
829e5dd7070Spatrick unsigned NumClauses,
830e5dd7070Spatrick EmptyShell) {
831a9ac8606Spatrick return createEmptyDirective<OMPCancelDirective>(C, NumClauses);
832e5dd7070Spatrick }
833e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses)834e5dd7070Spatrick OMPFlushDirective *OMPFlushDirective::Create(const ASTContext &C,
835e5dd7070Spatrick SourceLocation StartLoc,
836e5dd7070Spatrick SourceLocation EndLoc,
837e5dd7070Spatrick ArrayRef<OMPClause *> Clauses) {
838a9ac8606Spatrick return createDirective<OMPFlushDirective>(
839a9ac8606Spatrick C, Clauses, /*AssociatedStmt=*/nullptr, /*NumChildren=*/0, StartLoc,
840a9ac8606Spatrick EndLoc);
841e5dd7070Spatrick }
842e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)843e5dd7070Spatrick OMPFlushDirective *OMPFlushDirective::CreateEmpty(const ASTContext &C,
844e5dd7070Spatrick unsigned NumClauses,
845e5dd7070Spatrick EmptyShell) {
846a9ac8606Spatrick return createEmptyDirective<OMPFlushDirective>(C, NumClauses);
847e5dd7070Spatrick }
848e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses)849ec727ea7Spatrick OMPDepobjDirective *OMPDepobjDirective::Create(const ASTContext &C,
850ec727ea7Spatrick SourceLocation StartLoc,
851ec727ea7Spatrick SourceLocation EndLoc,
852ec727ea7Spatrick ArrayRef<OMPClause *> Clauses) {
853a9ac8606Spatrick return createDirective<OMPDepobjDirective>(
854a9ac8606Spatrick C, Clauses, /*AssociatedStmt=*/nullptr,
855a9ac8606Spatrick /*NumChildren=*/0, StartLoc, EndLoc);
856ec727ea7Spatrick }
857ec727ea7Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)858ec727ea7Spatrick OMPDepobjDirective *OMPDepobjDirective::CreateEmpty(const ASTContext &C,
859ec727ea7Spatrick unsigned NumClauses,
860ec727ea7Spatrick EmptyShell) {
861a9ac8606Spatrick return createEmptyDirective<OMPDepobjDirective>(C, NumClauses);
862ec727ea7Spatrick }
863ec727ea7Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses)864ec727ea7Spatrick OMPScanDirective *OMPScanDirective::Create(const ASTContext &C,
865ec727ea7Spatrick SourceLocation StartLoc,
866ec727ea7Spatrick SourceLocation EndLoc,
867ec727ea7Spatrick ArrayRef<OMPClause *> Clauses) {
868a9ac8606Spatrick return createDirective<OMPScanDirective>(C, Clauses,
869a9ac8606Spatrick /*AssociatedStmt=*/nullptr,
870a9ac8606Spatrick /*NumChildren=*/0, StartLoc, EndLoc);
871ec727ea7Spatrick }
872ec727ea7Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)873ec727ea7Spatrick OMPScanDirective *OMPScanDirective::CreateEmpty(const ASTContext &C,
874ec727ea7Spatrick unsigned NumClauses,
875ec727ea7Spatrick EmptyShell) {
876a9ac8606Spatrick return createEmptyDirective<OMPScanDirective>(C, NumClauses);
877ec727ea7Spatrick }
878ec727ea7Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)879e5dd7070Spatrick OMPOrderedDirective *OMPOrderedDirective::Create(const ASTContext &C,
880e5dd7070Spatrick SourceLocation StartLoc,
881e5dd7070Spatrick SourceLocation EndLoc,
882e5dd7070Spatrick ArrayRef<OMPClause *> Clauses,
883e5dd7070Spatrick Stmt *AssociatedStmt) {
884a9ac8606Spatrick return createDirective<OMPOrderedDirective>(
885a9ac8606Spatrick C, Clauses, cast_or_null<CapturedStmt>(AssociatedStmt),
886a9ac8606Spatrick /*NumChildren=*/0, StartLoc, EndLoc);
887e5dd7070Spatrick }
888e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,bool IsStandalone,EmptyShell)889e5dd7070Spatrick OMPOrderedDirective *OMPOrderedDirective::CreateEmpty(const ASTContext &C,
890e5dd7070Spatrick unsigned NumClauses,
891a9ac8606Spatrick bool IsStandalone,
892e5dd7070Spatrick EmptyShell) {
893a9ac8606Spatrick return createEmptyDirective<OMPOrderedDirective>(C, NumClauses,
894a9ac8606Spatrick !IsStandalone);
895e5dd7070Spatrick }
896e5dd7070Spatrick
897*12c85518Srobert OMPAtomicDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expressions Exprs)898*12c85518Srobert OMPAtomicDirective::Create(const ASTContext &C, SourceLocation StartLoc,
899*12c85518Srobert SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
900*12c85518Srobert Stmt *AssociatedStmt, Expressions Exprs) {
901a9ac8606Spatrick auto *Dir = createDirective<OMPAtomicDirective>(
902*12c85518Srobert C, Clauses, AssociatedStmt, /*NumChildren=*/7, StartLoc, EndLoc);
903*12c85518Srobert Dir->setX(Exprs.X);
904*12c85518Srobert Dir->setV(Exprs.V);
905*12c85518Srobert Dir->setR(Exprs.R);
906*12c85518Srobert Dir->setExpr(Exprs.E);
907*12c85518Srobert Dir->setUpdateExpr(Exprs.UE);
908*12c85518Srobert Dir->setD(Exprs.D);
909*12c85518Srobert Dir->setCond(Exprs.Cond);
910*12c85518Srobert Dir->Flags.IsXLHSInRHSPart = Exprs.IsXLHSInRHSPart ? 1 : 0;
911*12c85518Srobert Dir->Flags.IsPostfixUpdate = Exprs.IsPostfixUpdate ? 1 : 0;
912*12c85518Srobert Dir->Flags.IsFailOnly = Exprs.IsFailOnly ? 1 : 0;
913e5dd7070Spatrick return Dir;
914e5dd7070Spatrick }
915e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)916e5dd7070Spatrick OMPAtomicDirective *OMPAtomicDirective::CreateEmpty(const ASTContext &C,
917e5dd7070Spatrick unsigned NumClauses,
918e5dd7070Spatrick EmptyShell) {
919a9ac8606Spatrick return createEmptyDirective<OMPAtomicDirective>(
920*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true, /*NumChildren=*/7);
921e5dd7070Spatrick }
922e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)923e5dd7070Spatrick OMPTargetDirective *OMPTargetDirective::Create(const ASTContext &C,
924e5dd7070Spatrick SourceLocation StartLoc,
925e5dd7070Spatrick SourceLocation EndLoc,
926e5dd7070Spatrick ArrayRef<OMPClause *> Clauses,
927e5dd7070Spatrick Stmt *AssociatedStmt) {
928a9ac8606Spatrick return createDirective<OMPTargetDirective>(
929a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
930e5dd7070Spatrick }
931e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)932e5dd7070Spatrick OMPTargetDirective *OMPTargetDirective::CreateEmpty(const ASTContext &C,
933e5dd7070Spatrick unsigned NumClauses,
934e5dd7070Spatrick EmptyShell) {
935a9ac8606Spatrick return createEmptyDirective<OMPTargetDirective>(C, NumClauses,
936a9ac8606Spatrick /*HasAssociatedStmt=*/true);
937e5dd7070Spatrick }
938e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,Expr * TaskRedRef,bool HasCancel)939e5dd7070Spatrick OMPTargetParallelDirective *OMPTargetParallelDirective::Create(
940e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
941ec727ea7Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *TaskRedRef,
942ec727ea7Spatrick bool HasCancel) {
943a9ac8606Spatrick auto *Dir = createDirective<OMPTargetParallelDirective>(
944a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/1, StartLoc, EndLoc);
945ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
946ec727ea7Spatrick Dir->setHasCancel(HasCancel);
947e5dd7070Spatrick return Dir;
948e5dd7070Spatrick }
949e5dd7070Spatrick
950e5dd7070Spatrick OMPTargetParallelDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)951e5dd7070Spatrick OMPTargetParallelDirective::CreateEmpty(const ASTContext &C,
952e5dd7070Spatrick unsigned NumClauses, EmptyShell) {
953a9ac8606Spatrick return createEmptyDirective<OMPTargetParallelDirective>(
954a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true, /*NumChildren=*/1);
955e5dd7070Spatrick }
956e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,Expr * TaskRedRef,bool HasCancel)957e5dd7070Spatrick OMPTargetParallelForDirective *OMPTargetParallelForDirective::Create(
958e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
959e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
960ec727ea7Spatrick const HelperExprs &Exprs, Expr *TaskRedRef, bool HasCancel) {
961a9ac8606Spatrick auto *Dir = createDirective<OMPTargetParallelForDirective>(
962a9ac8606Spatrick C, Clauses, AssociatedStmt,
963a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_parallel_for) + 1, StartLoc,
964a9ac8606Spatrick EndLoc, CollapsedNum);
965e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
966e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
967e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
968e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
969e5dd7070Spatrick Dir->setCond(Exprs.Cond);
970e5dd7070Spatrick Dir->setInit(Exprs.Init);
971e5dd7070Spatrick Dir->setInc(Exprs.Inc);
972e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
973e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
974e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
975e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
976e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
977e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
978e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
979e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
980e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
981e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
982e5dd7070Spatrick Dir->setInits(Exprs.Inits);
983e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
984e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
985e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
986e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
987e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
988e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
989ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
990e5dd7070Spatrick Dir->setHasCancel(HasCancel);
991e5dd7070Spatrick return Dir;
992e5dd7070Spatrick }
993e5dd7070Spatrick
994e5dd7070Spatrick OMPTargetParallelForDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)995e5dd7070Spatrick OMPTargetParallelForDirective::CreateEmpty(const ASTContext &C,
996e5dd7070Spatrick unsigned NumClauses,
997e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
998a9ac8606Spatrick return createEmptyDirective<OMPTargetParallelForDirective>(
999a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1000a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_parallel_for) + 1,
1001a9ac8606Spatrick CollapsedNum);
1002e5dd7070Spatrick }
1003e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)1004e5dd7070Spatrick OMPTargetDataDirective *OMPTargetDataDirective::Create(
1005e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1006e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1007a9ac8606Spatrick return createDirective<OMPTargetDataDirective>(
1008a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
1009e5dd7070Spatrick }
1010e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned N,EmptyShell)1011e5dd7070Spatrick OMPTargetDataDirective *OMPTargetDataDirective::CreateEmpty(const ASTContext &C,
1012e5dd7070Spatrick unsigned N,
1013e5dd7070Spatrick EmptyShell) {
1014a9ac8606Spatrick return createEmptyDirective<OMPTargetDataDirective>(
1015a9ac8606Spatrick C, N, /*HasAssociatedStmt=*/true);
1016e5dd7070Spatrick }
1017e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)1018e5dd7070Spatrick OMPTargetEnterDataDirective *OMPTargetEnterDataDirective::Create(
1019e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1020e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1021a9ac8606Spatrick return createDirective<OMPTargetEnterDataDirective>(
1022a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
1023e5dd7070Spatrick }
1024e5dd7070Spatrick
1025e5dd7070Spatrick OMPTargetEnterDataDirective *
CreateEmpty(const ASTContext & C,unsigned N,EmptyShell)1026e5dd7070Spatrick OMPTargetEnterDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
1027e5dd7070Spatrick EmptyShell) {
1028a9ac8606Spatrick return createEmptyDirective<OMPTargetEnterDataDirective>(
1029a9ac8606Spatrick C, N, /*HasAssociatedStmt=*/true);
1030e5dd7070Spatrick }
1031e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)1032e5dd7070Spatrick OMPTargetExitDataDirective *OMPTargetExitDataDirective::Create(
1033e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1034e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1035a9ac8606Spatrick return createDirective<OMPTargetExitDataDirective>(
1036a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
1037e5dd7070Spatrick }
1038e5dd7070Spatrick
1039e5dd7070Spatrick OMPTargetExitDataDirective *
CreateEmpty(const ASTContext & C,unsigned N,EmptyShell)1040e5dd7070Spatrick OMPTargetExitDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
1041e5dd7070Spatrick EmptyShell) {
1042a9ac8606Spatrick return createEmptyDirective<OMPTargetExitDataDirective>(
1043a9ac8606Spatrick C, N, /*HasAssociatedStmt=*/true);
1044e5dd7070Spatrick }
1045e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)1046e5dd7070Spatrick OMPTeamsDirective *OMPTeamsDirective::Create(const ASTContext &C,
1047e5dd7070Spatrick SourceLocation StartLoc,
1048e5dd7070Spatrick SourceLocation EndLoc,
1049e5dd7070Spatrick ArrayRef<OMPClause *> Clauses,
1050e5dd7070Spatrick Stmt *AssociatedStmt) {
1051a9ac8606Spatrick return createDirective<OMPTeamsDirective>(
1052a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
1053e5dd7070Spatrick }
1054e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)1055e5dd7070Spatrick OMPTeamsDirective *OMPTeamsDirective::CreateEmpty(const ASTContext &C,
1056e5dd7070Spatrick unsigned NumClauses,
1057e5dd7070Spatrick EmptyShell) {
1058a9ac8606Spatrick return createEmptyDirective<OMPTeamsDirective>(C, NumClauses,
1059a9ac8606Spatrick /*HasAssociatedStmt=*/true);
1060e5dd7070Spatrick }
1061e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,bool HasCancel)1062e5dd7070Spatrick OMPTaskLoopDirective *OMPTaskLoopDirective::Create(
1063e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1064e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1065ec727ea7Spatrick const HelperExprs &Exprs, bool HasCancel) {
1066a9ac8606Spatrick auto *Dir = createDirective<OMPTaskLoopDirective>(
1067a9ac8606Spatrick C, Clauses, AssociatedStmt, numLoopChildren(CollapsedNum, OMPD_taskloop),
1068a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
1069e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1070e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1071e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1072e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1073e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1074e5dd7070Spatrick Dir->setInit(Exprs.Init);
1075e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1076e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1077e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1078e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1079e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1080e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1081e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1082e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1083e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1084e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1085e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1086e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1087e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1088e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1089e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1090e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1091e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1092e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1093ec727ea7Spatrick Dir->setHasCancel(HasCancel);
1094e5dd7070Spatrick return Dir;
1095e5dd7070Spatrick }
1096e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1097e5dd7070Spatrick OMPTaskLoopDirective *OMPTaskLoopDirective::CreateEmpty(const ASTContext &C,
1098e5dd7070Spatrick unsigned NumClauses,
1099e5dd7070Spatrick unsigned CollapsedNum,
1100e5dd7070Spatrick EmptyShell) {
1101a9ac8606Spatrick return createEmptyDirective<OMPTaskLoopDirective>(
1102a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1103a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_taskloop), CollapsedNum);
1104e5dd7070Spatrick }
1105e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1106e5dd7070Spatrick OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create(
1107e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1108e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1109e5dd7070Spatrick const HelperExprs &Exprs) {
1110a9ac8606Spatrick auto *Dir = createDirective<OMPTaskLoopSimdDirective>(
1111a9ac8606Spatrick C, Clauses, AssociatedStmt,
1112a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_taskloop_simd), StartLoc, EndLoc,
1113a9ac8606Spatrick CollapsedNum);
1114e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1115e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1116e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1117e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1118e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1119e5dd7070Spatrick Dir->setInit(Exprs.Init);
1120e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1121e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1122e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1123e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1124e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1125e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1126e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1127e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1128e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1129e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1130e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1131e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1132e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1133e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1134e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1135e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1136e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1137e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1138e5dd7070Spatrick return Dir;
1139e5dd7070Spatrick }
1140e5dd7070Spatrick
1141e5dd7070Spatrick OMPTaskLoopSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1142e5dd7070Spatrick OMPTaskLoopSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1143e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1144a9ac8606Spatrick return createEmptyDirective<OMPTaskLoopSimdDirective>(
1145a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1146a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_taskloop_simd), CollapsedNum);
1147e5dd7070Spatrick }
1148e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,bool HasCancel)1149e5dd7070Spatrick OMPMasterTaskLoopDirective *OMPMasterTaskLoopDirective::Create(
1150e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1151e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1152ec727ea7Spatrick const HelperExprs &Exprs, bool HasCancel) {
1153a9ac8606Spatrick auto *Dir = createDirective<OMPMasterTaskLoopDirective>(
1154a9ac8606Spatrick C, Clauses, AssociatedStmt,
1155a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_master_taskloop), StartLoc, EndLoc,
1156a9ac8606Spatrick CollapsedNum);
1157e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1158e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1159e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1160e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1161e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1162e5dd7070Spatrick Dir->setInit(Exprs.Init);
1163e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1164e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1165e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1166e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1167e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1168e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1169e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1170e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1171e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1172e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1173e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1174e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1175e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1176e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1177e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1178e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1179e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1180e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1181ec727ea7Spatrick Dir->setHasCancel(HasCancel);
1182e5dd7070Spatrick return Dir;
1183e5dd7070Spatrick }
1184e5dd7070Spatrick
1185e5dd7070Spatrick OMPMasterTaskLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1186e5dd7070Spatrick OMPMasterTaskLoopDirective::CreateEmpty(const ASTContext &C,
1187e5dd7070Spatrick unsigned NumClauses,
1188e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1189a9ac8606Spatrick return createEmptyDirective<OMPMasterTaskLoopDirective>(
1190a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1191a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_master_taskloop), CollapsedNum);
1192e5dd7070Spatrick }
1193e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,bool HasCancel)1194*12c85518Srobert OMPMaskedTaskLoopDirective *OMPMaskedTaskLoopDirective::Create(
1195*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1196*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1197*12c85518Srobert const HelperExprs &Exprs, bool HasCancel) {
1198*12c85518Srobert auto *Dir = createDirective<OMPMaskedTaskLoopDirective>(
1199*12c85518Srobert C, Clauses, AssociatedStmt,
1200*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_masked_taskloop), StartLoc, EndLoc,
1201*12c85518Srobert CollapsedNum);
1202*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
1203*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
1204*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1205*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
1206*12c85518Srobert Dir->setCond(Exprs.Cond);
1207*12c85518Srobert Dir->setInit(Exprs.Init);
1208*12c85518Srobert Dir->setInc(Exprs.Inc);
1209*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
1210*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
1211*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
1212*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
1213*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
1214*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
1215*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
1216*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
1217*12c85518Srobert Dir->setCounters(Exprs.Counters);
1218*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
1219*12c85518Srobert Dir->setInits(Exprs.Inits);
1220*12c85518Srobert Dir->setUpdates(Exprs.Updates);
1221*12c85518Srobert Dir->setFinals(Exprs.Finals);
1222*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
1223*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
1224*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
1225*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
1226*12c85518Srobert Dir->setHasCancel(HasCancel);
1227*12c85518Srobert return Dir;
1228*12c85518Srobert }
1229*12c85518Srobert
1230*12c85518Srobert OMPMaskedTaskLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1231*12c85518Srobert OMPMaskedTaskLoopDirective::CreateEmpty(const ASTContext &C,
1232*12c85518Srobert unsigned NumClauses,
1233*12c85518Srobert unsigned CollapsedNum, EmptyShell) {
1234*12c85518Srobert return createEmptyDirective<OMPMaskedTaskLoopDirective>(
1235*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
1236*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_masked_taskloop), CollapsedNum);
1237*12c85518Srobert }
1238*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1239e5dd7070Spatrick OMPMasterTaskLoopSimdDirective *OMPMasterTaskLoopSimdDirective::Create(
1240e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1241e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1242e5dd7070Spatrick const HelperExprs &Exprs) {
1243a9ac8606Spatrick auto *Dir = createDirective<OMPMasterTaskLoopSimdDirective>(
1244a9ac8606Spatrick C, Clauses, AssociatedStmt,
1245a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_master_taskloop_simd), StartLoc,
1246a9ac8606Spatrick EndLoc, CollapsedNum);
1247e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1248e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1249e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1250e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1251e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1252e5dd7070Spatrick Dir->setInit(Exprs.Init);
1253e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1254e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1255e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1256e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1257e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1258e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1259e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1260e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1261e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1262e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1263e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1264e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1265e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1266e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1267e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1268e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1269e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1270e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1271e5dd7070Spatrick return Dir;
1272e5dd7070Spatrick }
1273e5dd7070Spatrick
1274e5dd7070Spatrick OMPMasterTaskLoopSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1275e5dd7070Spatrick OMPMasterTaskLoopSimdDirective::CreateEmpty(const ASTContext &C,
1276e5dd7070Spatrick unsigned NumClauses,
1277e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1278a9ac8606Spatrick return createEmptyDirective<OMPMasterTaskLoopSimdDirective>(
1279a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1280a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_master_taskloop_simd), CollapsedNum);
1281e5dd7070Spatrick }
1282e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1283*12c85518Srobert OMPMaskedTaskLoopSimdDirective *OMPMaskedTaskLoopSimdDirective::Create(
1284*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1285*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1286*12c85518Srobert const HelperExprs &Exprs) {
1287*12c85518Srobert auto *Dir = createDirective<OMPMaskedTaskLoopSimdDirective>(
1288*12c85518Srobert C, Clauses, AssociatedStmt,
1289*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_masked_taskloop_simd), StartLoc,
1290*12c85518Srobert EndLoc, CollapsedNum);
1291*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
1292*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
1293*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1294*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
1295*12c85518Srobert Dir->setCond(Exprs.Cond);
1296*12c85518Srobert Dir->setInit(Exprs.Init);
1297*12c85518Srobert Dir->setInc(Exprs.Inc);
1298*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
1299*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
1300*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
1301*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
1302*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
1303*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
1304*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
1305*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
1306*12c85518Srobert Dir->setCounters(Exprs.Counters);
1307*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
1308*12c85518Srobert Dir->setInits(Exprs.Inits);
1309*12c85518Srobert Dir->setUpdates(Exprs.Updates);
1310*12c85518Srobert Dir->setFinals(Exprs.Finals);
1311*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
1312*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
1313*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
1314*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
1315*12c85518Srobert return Dir;
1316*12c85518Srobert }
1317*12c85518Srobert
1318*12c85518Srobert OMPMaskedTaskLoopSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1319*12c85518Srobert OMPMaskedTaskLoopSimdDirective::CreateEmpty(const ASTContext &C,
1320*12c85518Srobert unsigned NumClauses,
1321*12c85518Srobert unsigned CollapsedNum, EmptyShell) {
1322*12c85518Srobert return createEmptyDirective<OMPMaskedTaskLoopSimdDirective>(
1323*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
1324*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_masked_taskloop_simd), CollapsedNum);
1325*12c85518Srobert }
1326*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,bool HasCancel)1327e5dd7070Spatrick OMPParallelMasterTaskLoopDirective *OMPParallelMasterTaskLoopDirective::Create(
1328e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1329e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1330ec727ea7Spatrick const HelperExprs &Exprs, bool HasCancel) {
1331a9ac8606Spatrick auto *Dir = createDirective<OMPParallelMasterTaskLoopDirective>(
1332a9ac8606Spatrick C, Clauses, AssociatedStmt,
1333a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_master_taskloop), StartLoc,
1334a9ac8606Spatrick EndLoc, CollapsedNum);
1335e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1336e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1337e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1338e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1339e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1340e5dd7070Spatrick Dir->setInit(Exprs.Init);
1341e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1342e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1343e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1344e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1345e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1346e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1347e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1348e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1349e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1350e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1351e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1352e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1353e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1354e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1355e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1356e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1357e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1358e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1359ec727ea7Spatrick Dir->setHasCancel(HasCancel);
1360e5dd7070Spatrick return Dir;
1361e5dd7070Spatrick }
1362e5dd7070Spatrick
1363e5dd7070Spatrick OMPParallelMasterTaskLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1364e5dd7070Spatrick OMPParallelMasterTaskLoopDirective::CreateEmpty(const ASTContext &C,
1365e5dd7070Spatrick unsigned NumClauses,
1366e5dd7070Spatrick unsigned CollapsedNum,
1367e5dd7070Spatrick EmptyShell) {
1368a9ac8606Spatrick return createEmptyDirective<OMPParallelMasterTaskLoopDirective>(
1369a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1370a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_master_taskloop),
1371a9ac8606Spatrick CollapsedNum);
1372e5dd7070Spatrick }
1373e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,bool HasCancel)1374*12c85518Srobert OMPParallelMaskedTaskLoopDirective *OMPParallelMaskedTaskLoopDirective::Create(
1375*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1376*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1377*12c85518Srobert const HelperExprs &Exprs, bool HasCancel) {
1378*12c85518Srobert auto *Dir = createDirective<OMPParallelMaskedTaskLoopDirective>(
1379*12c85518Srobert C, Clauses, AssociatedStmt,
1380*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_parallel_masked_taskloop), StartLoc,
1381*12c85518Srobert EndLoc, CollapsedNum);
1382*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
1383*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
1384*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1385*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
1386*12c85518Srobert Dir->setCond(Exprs.Cond);
1387*12c85518Srobert Dir->setInit(Exprs.Init);
1388*12c85518Srobert Dir->setInc(Exprs.Inc);
1389*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
1390*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
1391*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
1392*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
1393*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
1394*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
1395*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
1396*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
1397*12c85518Srobert Dir->setCounters(Exprs.Counters);
1398*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
1399*12c85518Srobert Dir->setInits(Exprs.Inits);
1400*12c85518Srobert Dir->setUpdates(Exprs.Updates);
1401*12c85518Srobert Dir->setFinals(Exprs.Finals);
1402*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
1403*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
1404*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
1405*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
1406*12c85518Srobert Dir->setHasCancel(HasCancel);
1407*12c85518Srobert return Dir;
1408*12c85518Srobert }
1409*12c85518Srobert
1410*12c85518Srobert OMPParallelMaskedTaskLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1411*12c85518Srobert OMPParallelMaskedTaskLoopDirective::CreateEmpty(const ASTContext &C,
1412*12c85518Srobert unsigned NumClauses,
1413*12c85518Srobert unsigned CollapsedNum,
1414*12c85518Srobert EmptyShell) {
1415*12c85518Srobert return createEmptyDirective<OMPParallelMaskedTaskLoopDirective>(
1416*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
1417*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_parallel_masked_taskloop),
1418*12c85518Srobert CollapsedNum);
1419*12c85518Srobert }
1420*12c85518Srobert
1421e5dd7070Spatrick OMPParallelMasterTaskLoopSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1422e5dd7070Spatrick OMPParallelMasterTaskLoopSimdDirective::Create(
1423e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1424e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1425e5dd7070Spatrick const HelperExprs &Exprs) {
1426a9ac8606Spatrick auto *Dir = createDirective<OMPParallelMasterTaskLoopSimdDirective>(
1427a9ac8606Spatrick C, Clauses, AssociatedStmt,
1428a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_master_taskloop_simd),
1429a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
1430e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1431e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1432e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1433e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1434e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1435e5dd7070Spatrick Dir->setInit(Exprs.Init);
1436e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1437e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1438e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1439e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1440e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1441e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1442e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1443e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1444e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1445e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1446e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1447e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1448e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1449e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1450e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1451e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1452e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1453e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1454e5dd7070Spatrick return Dir;
1455e5dd7070Spatrick }
1456e5dd7070Spatrick
1457e5dd7070Spatrick OMPParallelMasterTaskLoopSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1458e5dd7070Spatrick OMPParallelMasterTaskLoopSimdDirective::CreateEmpty(const ASTContext &C,
1459e5dd7070Spatrick unsigned NumClauses,
1460e5dd7070Spatrick unsigned CollapsedNum,
1461e5dd7070Spatrick EmptyShell) {
1462a9ac8606Spatrick return createEmptyDirective<OMPParallelMasterTaskLoopSimdDirective>(
1463a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1464a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_parallel_master_taskloop_simd),
1465a9ac8606Spatrick CollapsedNum);
1466e5dd7070Spatrick }
1467e5dd7070Spatrick
1468*12c85518Srobert OMPParallelMaskedTaskLoopSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1469*12c85518Srobert OMPParallelMaskedTaskLoopSimdDirective::Create(
1470*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1471*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1472*12c85518Srobert const HelperExprs &Exprs) {
1473*12c85518Srobert auto *Dir = createDirective<OMPParallelMaskedTaskLoopSimdDirective>(
1474*12c85518Srobert C, Clauses, AssociatedStmt,
1475*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_parallel_masked_taskloop_simd),
1476*12c85518Srobert StartLoc, EndLoc, CollapsedNum);
1477*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
1478*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
1479*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1480*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
1481*12c85518Srobert Dir->setCond(Exprs.Cond);
1482*12c85518Srobert Dir->setInit(Exprs.Init);
1483*12c85518Srobert Dir->setInc(Exprs.Inc);
1484*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
1485*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
1486*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
1487*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
1488*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
1489*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
1490*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
1491*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
1492*12c85518Srobert Dir->setCounters(Exprs.Counters);
1493*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
1494*12c85518Srobert Dir->setInits(Exprs.Inits);
1495*12c85518Srobert Dir->setUpdates(Exprs.Updates);
1496*12c85518Srobert Dir->setFinals(Exprs.Finals);
1497*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
1498*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
1499*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
1500*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
1501*12c85518Srobert return Dir;
1502*12c85518Srobert }
1503*12c85518Srobert
1504*12c85518Srobert OMPParallelMaskedTaskLoopSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1505*12c85518Srobert OMPParallelMaskedTaskLoopSimdDirective::CreateEmpty(const ASTContext &C,
1506*12c85518Srobert unsigned NumClauses,
1507*12c85518Srobert unsigned CollapsedNum,
1508*12c85518Srobert EmptyShell) {
1509*12c85518Srobert return createEmptyDirective<OMPParallelMaskedTaskLoopSimdDirective>(
1510*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
1511*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_parallel_masked_taskloop_simd),
1512*12c85518Srobert CollapsedNum);
1513*12c85518Srobert }
1514*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1515e5dd7070Spatrick OMPDistributeDirective *OMPDistributeDirective::Create(
1516e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1517e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1518e5dd7070Spatrick const HelperExprs &Exprs) {
1519a9ac8606Spatrick auto *Dir = createDirective<OMPDistributeDirective>(
1520a9ac8606Spatrick C, Clauses, AssociatedStmt,
1521a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute), StartLoc, EndLoc,
1522a9ac8606Spatrick CollapsedNum);
1523e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1524e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1525e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1526e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1527e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1528e5dd7070Spatrick Dir->setInit(Exprs.Init);
1529e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1530e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1531e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1532e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1533e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1534e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1535e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1536e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1537e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1538e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1539e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1540e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1541e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1542e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1543e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1544e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1545e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1546e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1547e5dd7070Spatrick return Dir;
1548e5dd7070Spatrick }
1549e5dd7070Spatrick
1550e5dd7070Spatrick OMPDistributeDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1551e5dd7070Spatrick OMPDistributeDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1552e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1553a9ac8606Spatrick return createEmptyDirective<OMPDistributeDirective>(
1554a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1555a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute), CollapsedNum);
1556e5dd7070Spatrick }
1557e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)1558e5dd7070Spatrick OMPTargetUpdateDirective *OMPTargetUpdateDirective::Create(
1559e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1560e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1561a9ac8606Spatrick return createDirective<OMPTargetUpdateDirective>(C, Clauses, AssociatedStmt,
1562a9ac8606Spatrick /*NumChildren=*/0, StartLoc,
1563a9ac8606Spatrick EndLoc);
1564e5dd7070Spatrick }
1565e5dd7070Spatrick
1566e5dd7070Spatrick OMPTargetUpdateDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)1567e5dd7070Spatrick OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1568e5dd7070Spatrick EmptyShell) {
1569a9ac8606Spatrick return createEmptyDirective<OMPTargetUpdateDirective>(
1570a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true);
1571e5dd7070Spatrick }
1572e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,Expr * TaskRedRef,bool HasCancel)1573e5dd7070Spatrick OMPDistributeParallelForDirective *OMPDistributeParallelForDirective::Create(
1574e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1575e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1576ec727ea7Spatrick const HelperExprs &Exprs, Expr *TaskRedRef, bool HasCancel) {
1577a9ac8606Spatrick auto *Dir = createDirective<OMPDistributeParallelForDirective>(
1578a9ac8606Spatrick C, Clauses, AssociatedStmt,
1579a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for) + 1, StartLoc,
1580a9ac8606Spatrick EndLoc, CollapsedNum);
1581e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1582e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1583e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1584e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1585e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1586e5dd7070Spatrick Dir->setInit(Exprs.Init);
1587e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1588e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1589e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1590e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1591e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1592e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1593e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1594e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1595e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1596e5dd7070Spatrick Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1597e5dd7070Spatrick Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1598e5dd7070Spatrick Dir->setDistInc(Exprs.DistInc);
1599e5dd7070Spatrick Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1600e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1601e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1602e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1603e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1604e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1605e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1606e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1607e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1608e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1609e5dd7070Spatrick Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1610e5dd7070Spatrick Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1611e5dd7070Spatrick Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1612e5dd7070Spatrick Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1613e5dd7070Spatrick Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1614e5dd7070Spatrick Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1615e5dd7070Spatrick Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1616e5dd7070Spatrick Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1617e5dd7070Spatrick Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1618ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
1619e5dd7070Spatrick Dir->HasCancel = HasCancel;
1620e5dd7070Spatrick return Dir;
1621e5dd7070Spatrick }
1622e5dd7070Spatrick
1623e5dd7070Spatrick OMPDistributeParallelForDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1624e5dd7070Spatrick OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1625e5dd7070Spatrick unsigned NumClauses,
1626e5dd7070Spatrick unsigned CollapsedNum,
1627e5dd7070Spatrick EmptyShell) {
1628a9ac8606Spatrick return createEmptyDirective<OMPDistributeParallelForDirective>(
1629a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1630a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for) + 1,
1631a9ac8606Spatrick CollapsedNum);
1632e5dd7070Spatrick }
1633e5dd7070Spatrick
1634e5dd7070Spatrick OMPDistributeParallelForSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1635e5dd7070Spatrick OMPDistributeParallelForSimdDirective::Create(
1636e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1637e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1638e5dd7070Spatrick const HelperExprs &Exprs) {
1639a9ac8606Spatrick auto *Dir = createDirective<OMPDistributeParallelForSimdDirective>(
1640a9ac8606Spatrick C, Clauses, AssociatedStmt,
1641a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd),
1642a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
1643e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1644e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1645e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1646e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1647e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1648e5dd7070Spatrick Dir->setInit(Exprs.Init);
1649e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1650e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1651e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1652e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1653e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1654e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1655e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1656e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1657e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1658e5dd7070Spatrick Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1659e5dd7070Spatrick Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1660e5dd7070Spatrick Dir->setDistInc(Exprs.DistInc);
1661e5dd7070Spatrick Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1662e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1663e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1664e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1665e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1666e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1667e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1668e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1669e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1670e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1671e5dd7070Spatrick Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1672e5dd7070Spatrick Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1673e5dd7070Spatrick Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1674e5dd7070Spatrick Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1675e5dd7070Spatrick Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1676e5dd7070Spatrick Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1677e5dd7070Spatrick Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1678e5dd7070Spatrick Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1679e5dd7070Spatrick Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1680e5dd7070Spatrick return Dir;
1681e5dd7070Spatrick }
1682e5dd7070Spatrick
1683e5dd7070Spatrick OMPDistributeParallelForSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1684e5dd7070Spatrick OMPDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1685e5dd7070Spatrick unsigned NumClauses,
1686e5dd7070Spatrick unsigned CollapsedNum,
1687e5dd7070Spatrick EmptyShell) {
1688a9ac8606Spatrick return createEmptyDirective<OMPDistributeParallelForSimdDirective>(
1689a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1690a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd),
1691a9ac8606Spatrick CollapsedNum);
1692e5dd7070Spatrick }
1693e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1694e5dd7070Spatrick OMPDistributeSimdDirective *OMPDistributeSimdDirective::Create(
1695e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1696e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1697e5dd7070Spatrick const HelperExprs &Exprs) {
1698a9ac8606Spatrick auto *Dir = createDirective<OMPDistributeSimdDirective>(
1699a9ac8606Spatrick C, Clauses, AssociatedStmt,
1700a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute_simd), StartLoc, EndLoc,
1701a9ac8606Spatrick CollapsedNum);
1702e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1703e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1704e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1705e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1706e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1707e5dd7070Spatrick Dir->setInit(Exprs.Init);
1708e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1709e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1710e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1711e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1712e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1713e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1714e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1715e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1716e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1717e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1718e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1719e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1720e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1721e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1722e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1723e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1724e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1725e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1726e5dd7070Spatrick return Dir;
1727e5dd7070Spatrick }
1728e5dd7070Spatrick
1729e5dd7070Spatrick OMPDistributeSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1730e5dd7070Spatrick OMPDistributeSimdDirective::CreateEmpty(const ASTContext &C,
1731e5dd7070Spatrick unsigned NumClauses,
1732e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1733a9ac8606Spatrick return createEmptyDirective<OMPDistributeSimdDirective>(
1734a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1735a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_distribute_simd), CollapsedNum);
1736e5dd7070Spatrick }
1737e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1738e5dd7070Spatrick OMPTargetParallelForSimdDirective *OMPTargetParallelForSimdDirective::Create(
1739e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1740e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1741e5dd7070Spatrick const HelperExprs &Exprs) {
1742a9ac8606Spatrick auto *Dir = createDirective<OMPTargetParallelForSimdDirective>(
1743a9ac8606Spatrick C, Clauses, AssociatedStmt,
1744a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd), StartLoc,
1745a9ac8606Spatrick EndLoc, CollapsedNum);
1746e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1747e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1748e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1749e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1750e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1751e5dd7070Spatrick Dir->setInit(Exprs.Init);
1752e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1753e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1754e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1755e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1756e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1757e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1758e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1759e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1760e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1761e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1762e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1763e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1764e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1765e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1766e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1767e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1768e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1769e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1770e5dd7070Spatrick return Dir;
1771e5dd7070Spatrick }
1772e5dd7070Spatrick
1773e5dd7070Spatrick OMPTargetParallelForSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1774e5dd7070Spatrick OMPTargetParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1775e5dd7070Spatrick unsigned NumClauses,
1776e5dd7070Spatrick unsigned CollapsedNum,
1777e5dd7070Spatrick EmptyShell) {
1778a9ac8606Spatrick return createEmptyDirective<OMPTargetParallelForSimdDirective>(
1779a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1780a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd),
1781a9ac8606Spatrick CollapsedNum);
1782e5dd7070Spatrick }
1783e5dd7070Spatrick
1784e5dd7070Spatrick OMPTargetSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1785e5dd7070Spatrick OMPTargetSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
1786e5dd7070Spatrick SourceLocation EndLoc, unsigned CollapsedNum,
1787e5dd7070Spatrick ArrayRef<OMPClause *> Clauses,
1788e5dd7070Spatrick Stmt *AssociatedStmt, const HelperExprs &Exprs) {
1789a9ac8606Spatrick auto *Dir = createDirective<OMPTargetSimdDirective>(
1790a9ac8606Spatrick C, Clauses, AssociatedStmt,
1791a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_simd), StartLoc, EndLoc,
1792a9ac8606Spatrick CollapsedNum);
1793e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1794e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1795e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1796e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1797e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1798e5dd7070Spatrick Dir->setInit(Exprs.Init);
1799e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1800e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1801e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1802e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1803e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1804e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1805e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1806e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1807e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1808e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1809e5dd7070Spatrick return Dir;
1810e5dd7070Spatrick }
1811e5dd7070Spatrick
1812e5dd7070Spatrick OMPTargetSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1813e5dd7070Spatrick OMPTargetSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1814e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1815a9ac8606Spatrick return createEmptyDirective<OMPTargetSimdDirective>(
1816a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1817a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_simd), CollapsedNum);
1818e5dd7070Spatrick }
1819e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1820e5dd7070Spatrick OMPTeamsDistributeDirective *OMPTeamsDistributeDirective::Create(
1821e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1822e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1823e5dd7070Spatrick const HelperExprs &Exprs) {
1824a9ac8606Spatrick auto *Dir = createDirective<OMPTeamsDistributeDirective>(
1825a9ac8606Spatrick C, Clauses, AssociatedStmt,
1826a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute), StartLoc, EndLoc,
1827a9ac8606Spatrick CollapsedNum);
1828e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1829e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1830e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1831e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1832e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1833e5dd7070Spatrick Dir->setInit(Exprs.Init);
1834e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1835e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1836e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1837e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1838e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1839e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1840e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1841e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1842e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1843e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1844e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1845e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1846e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1847e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1848e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1849e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1850e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1851e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1852e5dd7070Spatrick return Dir;
1853e5dd7070Spatrick }
1854e5dd7070Spatrick
1855e5dd7070Spatrick OMPTeamsDistributeDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1856e5dd7070Spatrick OMPTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1857e5dd7070Spatrick unsigned NumClauses,
1858e5dd7070Spatrick unsigned CollapsedNum, EmptyShell) {
1859a9ac8606Spatrick return createEmptyDirective<OMPTeamsDistributeDirective>(
1860a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1861a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute), CollapsedNum);
1862e5dd7070Spatrick }
1863e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1864e5dd7070Spatrick OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::Create(
1865e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1866e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1867e5dd7070Spatrick const HelperExprs &Exprs) {
1868a9ac8606Spatrick auto *Dir = createDirective<OMPTeamsDistributeSimdDirective>(
1869a9ac8606Spatrick C, Clauses, AssociatedStmt,
1870a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd), StartLoc,
1871a9ac8606Spatrick EndLoc, CollapsedNum);
1872e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1873e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1874e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1875e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1876e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1877e5dd7070Spatrick Dir->setInit(Exprs.Init);
1878e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1879e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1880e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1881e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1882e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1883e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1884e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1885e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1886e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1887e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1888e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1889e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1890e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1891e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1892e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1893e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1894e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1895e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1896e5dd7070Spatrick return Dir;
1897e5dd7070Spatrick }
1898e5dd7070Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1899e5dd7070Spatrick OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::CreateEmpty(
1900e5dd7070Spatrick const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
1901e5dd7070Spatrick EmptyShell) {
1902a9ac8606Spatrick return createEmptyDirective<OMPTeamsDistributeSimdDirective>(
1903a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1904a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd), CollapsedNum);
1905e5dd7070Spatrick }
1906e5dd7070Spatrick
1907e5dd7070Spatrick OMPTeamsDistributeParallelForSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)1908e5dd7070Spatrick OMPTeamsDistributeParallelForSimdDirective::Create(
1909e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1910e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1911e5dd7070Spatrick const HelperExprs &Exprs) {
1912a9ac8606Spatrick auto *Dir = createDirective<OMPTeamsDistributeParallelForSimdDirective>(
1913a9ac8606Spatrick C, Clauses, AssociatedStmt,
1914a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for_simd),
1915a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
1916e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1917e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1918e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1919e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1920e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1921e5dd7070Spatrick Dir->setInit(Exprs.Init);
1922e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1923e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1924e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1925e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1926e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1927e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1928e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1929e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1930e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1931e5dd7070Spatrick Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1932e5dd7070Spatrick Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1933e5dd7070Spatrick Dir->setDistInc(Exprs.DistInc);
1934e5dd7070Spatrick Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1935e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1936e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1937e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1938e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1939e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
1940e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
1941e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
1942e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
1943e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
1944e5dd7070Spatrick Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1945e5dd7070Spatrick Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1946e5dd7070Spatrick Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1947e5dd7070Spatrick Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1948e5dd7070Spatrick Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1949e5dd7070Spatrick Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1950e5dd7070Spatrick Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1951e5dd7070Spatrick Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1952e5dd7070Spatrick Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1953e5dd7070Spatrick return Dir;
1954e5dd7070Spatrick }
1955e5dd7070Spatrick
1956e5dd7070Spatrick OMPTeamsDistributeParallelForSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)1957e5dd7070Spatrick OMPTeamsDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1958e5dd7070Spatrick unsigned NumClauses,
1959e5dd7070Spatrick unsigned CollapsedNum,
1960e5dd7070Spatrick EmptyShell) {
1961a9ac8606Spatrick return createEmptyDirective<OMPTeamsDistributeParallelForSimdDirective>(
1962a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
1963a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for_simd),
1964a9ac8606Spatrick CollapsedNum);
1965e5dd7070Spatrick }
1966e5dd7070Spatrick
1967e5dd7070Spatrick OMPTeamsDistributeParallelForDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,Expr * TaskRedRef,bool HasCancel)1968e5dd7070Spatrick OMPTeamsDistributeParallelForDirective::Create(
1969e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1970e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1971ec727ea7Spatrick const HelperExprs &Exprs, Expr *TaskRedRef, bool HasCancel) {
1972a9ac8606Spatrick auto *Dir = createDirective<OMPTeamsDistributeParallelForDirective>(
1973a9ac8606Spatrick C, Clauses, AssociatedStmt,
1974a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for) + 1,
1975a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
1976e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
1977e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
1978e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1979e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
1980e5dd7070Spatrick Dir->setCond(Exprs.Cond);
1981e5dd7070Spatrick Dir->setInit(Exprs.Init);
1982e5dd7070Spatrick Dir->setInc(Exprs.Inc);
1983e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
1984e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
1985e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
1986e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
1987e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
1988e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
1989e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
1990e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
1991e5dd7070Spatrick Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1992e5dd7070Spatrick Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1993e5dd7070Spatrick Dir->setDistInc(Exprs.DistInc);
1994e5dd7070Spatrick Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1995e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
1996e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
1997e5dd7070Spatrick Dir->setInits(Exprs.Inits);
1998e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
1999e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
2000e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
2001e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
2002e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
2003e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
2004e5dd7070Spatrick Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
2005e5dd7070Spatrick Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
2006e5dd7070Spatrick Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
2007e5dd7070Spatrick Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
2008e5dd7070Spatrick Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
2009e5dd7070Spatrick Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
2010e5dd7070Spatrick Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
2011e5dd7070Spatrick Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
2012e5dd7070Spatrick Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
2013ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
2014e5dd7070Spatrick Dir->HasCancel = HasCancel;
2015e5dd7070Spatrick return Dir;
2016e5dd7070Spatrick }
2017e5dd7070Spatrick
2018e5dd7070Spatrick OMPTeamsDistributeParallelForDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2019e5dd7070Spatrick OMPTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
2020e5dd7070Spatrick unsigned NumClauses,
2021e5dd7070Spatrick unsigned CollapsedNum,
2022e5dd7070Spatrick EmptyShell) {
2023a9ac8606Spatrick return createEmptyDirective<OMPTeamsDistributeParallelForDirective>(
2024a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
2025a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for) + 1,
2026a9ac8606Spatrick CollapsedNum);
2027e5dd7070Spatrick }
2028e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)2029e5dd7070Spatrick OMPTargetTeamsDirective *OMPTargetTeamsDirective::Create(
2030e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2031e5dd7070Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
2032a9ac8606Spatrick return createDirective<OMPTargetTeamsDirective>(C, Clauses, AssociatedStmt,
2033a9ac8606Spatrick /*NumChildren=*/0, StartLoc,
2034a9ac8606Spatrick EndLoc);
2035e5dd7070Spatrick }
2036e5dd7070Spatrick
2037e5dd7070Spatrick OMPTargetTeamsDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)2038e5dd7070Spatrick OMPTargetTeamsDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
2039e5dd7070Spatrick EmptyShell) {
2040a9ac8606Spatrick return createEmptyDirective<OMPTargetTeamsDirective>(
2041a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true);
2042e5dd7070Spatrick }
2043e5dd7070Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2044e5dd7070Spatrick OMPTargetTeamsDistributeDirective *OMPTargetTeamsDistributeDirective::Create(
2045e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2046e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2047e5dd7070Spatrick const HelperExprs &Exprs) {
2048a9ac8606Spatrick auto *Dir = createDirective<OMPTargetTeamsDistributeDirective>(
2049a9ac8606Spatrick C, Clauses, AssociatedStmt,
2050a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_teams_distribute), StartLoc,
2051a9ac8606Spatrick EndLoc, CollapsedNum);
2052e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
2053e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
2054e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2055e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
2056e5dd7070Spatrick Dir->setCond(Exprs.Cond);
2057e5dd7070Spatrick Dir->setInit(Exprs.Init);
2058e5dd7070Spatrick Dir->setInc(Exprs.Inc);
2059e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
2060e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
2061e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
2062e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
2063e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
2064e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
2065e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
2066e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
2067e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
2068e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
2069e5dd7070Spatrick Dir->setInits(Exprs.Inits);
2070e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
2071e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
2072e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
2073e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
2074e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
2075e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
2076e5dd7070Spatrick return Dir;
2077e5dd7070Spatrick }
2078e5dd7070Spatrick
2079e5dd7070Spatrick OMPTargetTeamsDistributeDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2080e5dd7070Spatrick OMPTargetTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
2081e5dd7070Spatrick unsigned NumClauses,
2082e5dd7070Spatrick unsigned CollapsedNum,
2083e5dd7070Spatrick EmptyShell) {
2084a9ac8606Spatrick return createEmptyDirective<OMPTargetTeamsDistributeDirective>(
2085a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
2086a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_teams_distribute),
2087a9ac8606Spatrick CollapsedNum);
2088e5dd7070Spatrick }
2089e5dd7070Spatrick
2090e5dd7070Spatrick OMPTargetTeamsDistributeParallelForDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs,Expr * TaskRedRef,bool HasCancel)2091e5dd7070Spatrick OMPTargetTeamsDistributeParallelForDirective::Create(
2092e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2093e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2094ec727ea7Spatrick const HelperExprs &Exprs, Expr *TaskRedRef, bool HasCancel) {
2095a9ac8606Spatrick auto *Dir = createDirective<OMPTargetTeamsDistributeParallelForDirective>(
2096a9ac8606Spatrick C, Clauses, AssociatedStmt,
2097a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_parallel_for) +
2098a9ac8606Spatrick 1,
2099a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
2100e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
2101e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
2102e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2103e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
2104e5dd7070Spatrick Dir->setCond(Exprs.Cond);
2105e5dd7070Spatrick Dir->setInit(Exprs.Init);
2106e5dd7070Spatrick Dir->setInc(Exprs.Inc);
2107e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
2108e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
2109e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
2110e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
2111e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
2112e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
2113e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
2114e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
2115e5dd7070Spatrick Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
2116e5dd7070Spatrick Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
2117e5dd7070Spatrick Dir->setDistInc(Exprs.DistInc);
2118e5dd7070Spatrick Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
2119e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
2120e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
2121e5dd7070Spatrick Dir->setInits(Exprs.Inits);
2122e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
2123e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
2124e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
2125e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
2126e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
2127e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
2128e5dd7070Spatrick Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
2129e5dd7070Spatrick Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
2130e5dd7070Spatrick Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
2131e5dd7070Spatrick Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
2132e5dd7070Spatrick Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
2133e5dd7070Spatrick Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
2134e5dd7070Spatrick Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
2135e5dd7070Spatrick Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
2136e5dd7070Spatrick Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
2137ec727ea7Spatrick Dir->setTaskReductionRefExpr(TaskRedRef);
2138e5dd7070Spatrick Dir->HasCancel = HasCancel;
2139e5dd7070Spatrick return Dir;
2140e5dd7070Spatrick }
2141e5dd7070Spatrick
2142e5dd7070Spatrick OMPTargetTeamsDistributeParallelForDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2143e5dd7070Spatrick OMPTargetTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
2144e5dd7070Spatrick unsigned NumClauses,
2145e5dd7070Spatrick unsigned CollapsedNum,
2146e5dd7070Spatrick EmptyShell) {
2147a9ac8606Spatrick return createEmptyDirective<OMPTargetTeamsDistributeParallelForDirective>(
2148a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
2149a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_parallel_for) +
2150a9ac8606Spatrick 1,
2151a9ac8606Spatrick CollapsedNum);
2152e5dd7070Spatrick }
2153e5dd7070Spatrick
2154e5dd7070Spatrick OMPTargetTeamsDistributeParallelForSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2155e5dd7070Spatrick OMPTargetTeamsDistributeParallelForSimdDirective::Create(
2156e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2157e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2158e5dd7070Spatrick const HelperExprs &Exprs) {
2159a9ac8606Spatrick auto *Dir = createDirective<OMPTargetTeamsDistributeParallelForSimdDirective>(
2160a9ac8606Spatrick C, Clauses, AssociatedStmt,
2161e5dd7070Spatrick numLoopChildren(CollapsedNum,
2162a9ac8606Spatrick OMPD_target_teams_distribute_parallel_for_simd),
2163a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
2164e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
2165e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
2166e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2167e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
2168e5dd7070Spatrick Dir->setCond(Exprs.Cond);
2169e5dd7070Spatrick Dir->setInit(Exprs.Init);
2170e5dd7070Spatrick Dir->setInc(Exprs.Inc);
2171e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
2172e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
2173e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
2174e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
2175e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
2176e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
2177e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
2178e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
2179e5dd7070Spatrick Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
2180e5dd7070Spatrick Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
2181e5dd7070Spatrick Dir->setDistInc(Exprs.DistInc);
2182e5dd7070Spatrick Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
2183e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
2184e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
2185e5dd7070Spatrick Dir->setInits(Exprs.Inits);
2186e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
2187e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
2188e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
2189e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
2190e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
2191e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
2192e5dd7070Spatrick Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
2193e5dd7070Spatrick Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
2194e5dd7070Spatrick Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
2195e5dd7070Spatrick Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
2196e5dd7070Spatrick Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
2197e5dd7070Spatrick Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
2198e5dd7070Spatrick Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
2199e5dd7070Spatrick Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
2200e5dd7070Spatrick Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
2201e5dd7070Spatrick return Dir;
2202e5dd7070Spatrick }
2203e5dd7070Spatrick
2204e5dd7070Spatrick OMPTargetTeamsDistributeParallelForSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2205e5dd7070Spatrick OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty(
2206e5dd7070Spatrick const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
2207e5dd7070Spatrick EmptyShell) {
2208a9ac8606Spatrick return createEmptyDirective<OMPTargetTeamsDistributeParallelForSimdDirective>(
2209a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
2210e5dd7070Spatrick numLoopChildren(CollapsedNum,
2211a9ac8606Spatrick OMPD_target_teams_distribute_parallel_for_simd),
2212a9ac8606Spatrick CollapsedNum);
2213e5dd7070Spatrick }
2214e5dd7070Spatrick
2215e5dd7070Spatrick OMPTargetTeamsDistributeSimdDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2216e5dd7070Spatrick OMPTargetTeamsDistributeSimdDirective::Create(
2217e5dd7070Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2218e5dd7070Spatrick unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2219e5dd7070Spatrick const HelperExprs &Exprs) {
2220a9ac8606Spatrick auto *Dir = createDirective<OMPTargetTeamsDistributeSimdDirective>(
2221a9ac8606Spatrick C, Clauses, AssociatedStmt,
2222a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd),
2223a9ac8606Spatrick StartLoc, EndLoc, CollapsedNum);
2224e5dd7070Spatrick Dir->setIterationVariable(Exprs.IterationVarRef);
2225e5dd7070Spatrick Dir->setLastIteration(Exprs.LastIteration);
2226e5dd7070Spatrick Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2227e5dd7070Spatrick Dir->setPreCond(Exprs.PreCond);
2228e5dd7070Spatrick Dir->setCond(Exprs.Cond);
2229e5dd7070Spatrick Dir->setInit(Exprs.Init);
2230e5dd7070Spatrick Dir->setInc(Exprs.Inc);
2231e5dd7070Spatrick Dir->setIsLastIterVariable(Exprs.IL);
2232e5dd7070Spatrick Dir->setLowerBoundVariable(Exprs.LB);
2233e5dd7070Spatrick Dir->setUpperBoundVariable(Exprs.UB);
2234e5dd7070Spatrick Dir->setStrideVariable(Exprs.ST);
2235e5dd7070Spatrick Dir->setEnsureUpperBound(Exprs.EUB);
2236e5dd7070Spatrick Dir->setNextLowerBound(Exprs.NLB);
2237e5dd7070Spatrick Dir->setNextUpperBound(Exprs.NUB);
2238e5dd7070Spatrick Dir->setNumIterations(Exprs.NumIterations);
2239e5dd7070Spatrick Dir->setCounters(Exprs.Counters);
2240e5dd7070Spatrick Dir->setPrivateCounters(Exprs.PrivateCounters);
2241e5dd7070Spatrick Dir->setInits(Exprs.Inits);
2242e5dd7070Spatrick Dir->setUpdates(Exprs.Updates);
2243e5dd7070Spatrick Dir->setFinals(Exprs.Finals);
2244e5dd7070Spatrick Dir->setDependentCounters(Exprs.DependentCounters);
2245e5dd7070Spatrick Dir->setDependentInits(Exprs.DependentInits);
2246e5dd7070Spatrick Dir->setFinalsConditions(Exprs.FinalsConditions);
2247e5dd7070Spatrick Dir->setPreInits(Exprs.PreInits);
2248e5dd7070Spatrick return Dir;
2249e5dd7070Spatrick }
2250e5dd7070Spatrick
2251e5dd7070Spatrick OMPTargetTeamsDistributeSimdDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2252e5dd7070Spatrick OMPTargetTeamsDistributeSimdDirective::CreateEmpty(const ASTContext &C,
2253e5dd7070Spatrick unsigned NumClauses,
2254e5dd7070Spatrick unsigned CollapsedNum,
2255e5dd7070Spatrick EmptyShell) {
2256a9ac8606Spatrick return createEmptyDirective<OMPTargetTeamsDistributeSimdDirective>(
2257a9ac8606Spatrick C, NumClauses, /*HasAssociatedStmt=*/true,
2258a9ac8606Spatrick numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd),
2259a9ac8606Spatrick CollapsedNum);
2260a9ac8606Spatrick }
2261a9ac8606Spatrick
2262a9ac8606Spatrick OMPInteropDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses)2263a9ac8606Spatrick OMPInteropDirective::Create(const ASTContext &C, SourceLocation StartLoc,
2264a9ac8606Spatrick SourceLocation EndLoc,
2265a9ac8606Spatrick ArrayRef<OMPClause *> Clauses) {
2266a9ac8606Spatrick return createDirective<OMPInteropDirective>(
2267a9ac8606Spatrick C, Clauses, /*AssociatedStmt=*/nullptr, /*NumChildren=*/0, StartLoc,
2268a9ac8606Spatrick EndLoc);
2269a9ac8606Spatrick }
2270a9ac8606Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)2271a9ac8606Spatrick OMPInteropDirective *OMPInteropDirective::CreateEmpty(const ASTContext &C,
2272a9ac8606Spatrick unsigned NumClauses,
2273a9ac8606Spatrick EmptyShell) {
2274a9ac8606Spatrick return createEmptyDirective<OMPInteropDirective>(C, NumClauses);
2275a9ac8606Spatrick }
2276a9ac8606Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,SourceLocation TargetCallLoc)2277a9ac8606Spatrick OMPDispatchDirective *OMPDispatchDirective::Create(
2278a9ac8606Spatrick const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2279a9ac8606Spatrick ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2280a9ac8606Spatrick SourceLocation TargetCallLoc) {
2281a9ac8606Spatrick auto *Dir = createDirective<OMPDispatchDirective>(
2282a9ac8606Spatrick C, Clauses, AssociatedStmt, /*NumChildren=*/0, StartLoc, EndLoc);
2283a9ac8606Spatrick Dir->setTargetCallLoc(TargetCallLoc);
2284a9ac8606Spatrick return Dir;
2285a9ac8606Spatrick }
2286a9ac8606Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)2287a9ac8606Spatrick OMPDispatchDirective *OMPDispatchDirective::CreateEmpty(const ASTContext &C,
2288a9ac8606Spatrick unsigned NumClauses,
2289a9ac8606Spatrick EmptyShell) {
2290a9ac8606Spatrick return createEmptyDirective<OMPDispatchDirective>(C, NumClauses,
2291a9ac8606Spatrick /*HasAssociatedStmt=*/true,
2292a9ac8606Spatrick /*NumChildren=*/0);
2293a9ac8606Spatrick }
2294a9ac8606Spatrick
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt)2295a9ac8606Spatrick OMPMaskedDirective *OMPMaskedDirective::Create(const ASTContext &C,
2296a9ac8606Spatrick SourceLocation StartLoc,
2297a9ac8606Spatrick SourceLocation EndLoc,
2298a9ac8606Spatrick ArrayRef<OMPClause *> Clauses,
2299a9ac8606Spatrick Stmt *AssociatedStmt) {
2300a9ac8606Spatrick return createDirective<OMPMaskedDirective>(C, Clauses, AssociatedStmt,
2301a9ac8606Spatrick /*NumChildren=*/0, StartLoc,
2302a9ac8606Spatrick EndLoc);
2303a9ac8606Spatrick }
2304a9ac8606Spatrick
CreateEmpty(const ASTContext & C,unsigned NumClauses,EmptyShell)2305a9ac8606Spatrick OMPMaskedDirective *OMPMaskedDirective::CreateEmpty(const ASTContext &C,
2306a9ac8606Spatrick unsigned NumClauses,
2307a9ac8606Spatrick EmptyShell) {
2308a9ac8606Spatrick return createEmptyDirective<OMPMaskedDirective>(C, NumClauses,
2309a9ac8606Spatrick /*HasAssociatedStmt=*/true);
2310e5dd7070Spatrick }
2311*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2312*12c85518Srobert OMPGenericLoopDirective *OMPGenericLoopDirective::Create(
2313*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2314*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2315*12c85518Srobert const HelperExprs &Exprs) {
2316*12c85518Srobert auto *Dir = createDirective<OMPGenericLoopDirective>(
2317*12c85518Srobert C, Clauses, AssociatedStmt, numLoopChildren(CollapsedNum, OMPD_loop),
2318*12c85518Srobert StartLoc, EndLoc, CollapsedNum);
2319*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
2320*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
2321*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2322*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
2323*12c85518Srobert Dir->setCond(Exprs.Cond);
2324*12c85518Srobert Dir->setInit(Exprs.Init);
2325*12c85518Srobert Dir->setInc(Exprs.Inc);
2326*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
2327*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
2328*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
2329*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
2330*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
2331*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
2332*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
2333*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
2334*12c85518Srobert Dir->setCounters(Exprs.Counters);
2335*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
2336*12c85518Srobert Dir->setInits(Exprs.Inits);
2337*12c85518Srobert Dir->setUpdates(Exprs.Updates);
2338*12c85518Srobert Dir->setFinals(Exprs.Finals);
2339*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
2340*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
2341*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
2342*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
2343*12c85518Srobert return Dir;
2344*12c85518Srobert }
2345*12c85518Srobert
2346*12c85518Srobert OMPGenericLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2347*12c85518Srobert OMPGenericLoopDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
2348*12c85518Srobert unsigned CollapsedNum, EmptyShell) {
2349*12c85518Srobert return createEmptyDirective<OMPGenericLoopDirective>(
2350*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
2351*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_loop), CollapsedNum);
2352*12c85518Srobert }
2353*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2354*12c85518Srobert OMPTeamsGenericLoopDirective *OMPTeamsGenericLoopDirective::Create(
2355*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2356*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2357*12c85518Srobert const HelperExprs &Exprs) {
2358*12c85518Srobert auto *Dir = createDirective<OMPTeamsGenericLoopDirective>(
2359*12c85518Srobert C, Clauses, AssociatedStmt,
2360*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_teams_loop), StartLoc, EndLoc,
2361*12c85518Srobert CollapsedNum);
2362*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
2363*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
2364*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2365*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
2366*12c85518Srobert Dir->setCond(Exprs.Cond);
2367*12c85518Srobert Dir->setInit(Exprs.Init);
2368*12c85518Srobert Dir->setInc(Exprs.Inc);
2369*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
2370*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
2371*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
2372*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
2373*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
2374*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
2375*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
2376*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
2377*12c85518Srobert Dir->setCounters(Exprs.Counters);
2378*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
2379*12c85518Srobert Dir->setInits(Exprs.Inits);
2380*12c85518Srobert Dir->setUpdates(Exprs.Updates);
2381*12c85518Srobert Dir->setFinals(Exprs.Finals);
2382*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
2383*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
2384*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
2385*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
2386*12c85518Srobert return Dir;
2387*12c85518Srobert }
2388*12c85518Srobert
2389*12c85518Srobert OMPTeamsGenericLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2390*12c85518Srobert OMPTeamsGenericLoopDirective::CreateEmpty(const ASTContext &C,
2391*12c85518Srobert unsigned NumClauses,
2392*12c85518Srobert unsigned CollapsedNum, EmptyShell) {
2393*12c85518Srobert return createEmptyDirective<OMPTeamsGenericLoopDirective>(
2394*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
2395*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_teams_loop), CollapsedNum);
2396*12c85518Srobert }
2397*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2398*12c85518Srobert OMPTargetTeamsGenericLoopDirective *OMPTargetTeamsGenericLoopDirective::Create(
2399*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2400*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2401*12c85518Srobert const HelperExprs &Exprs) {
2402*12c85518Srobert auto *Dir = createDirective<OMPTargetTeamsGenericLoopDirective>(
2403*12c85518Srobert C, Clauses, AssociatedStmt,
2404*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_target_teams_loop), StartLoc, EndLoc,
2405*12c85518Srobert CollapsedNum);
2406*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
2407*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
2408*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2409*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
2410*12c85518Srobert Dir->setCond(Exprs.Cond);
2411*12c85518Srobert Dir->setInit(Exprs.Init);
2412*12c85518Srobert Dir->setInc(Exprs.Inc);
2413*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
2414*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
2415*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
2416*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
2417*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
2418*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
2419*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
2420*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
2421*12c85518Srobert Dir->setCounters(Exprs.Counters);
2422*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
2423*12c85518Srobert Dir->setInits(Exprs.Inits);
2424*12c85518Srobert Dir->setUpdates(Exprs.Updates);
2425*12c85518Srobert Dir->setFinals(Exprs.Finals);
2426*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
2427*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
2428*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
2429*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
2430*12c85518Srobert return Dir;
2431*12c85518Srobert }
2432*12c85518Srobert
2433*12c85518Srobert OMPTargetTeamsGenericLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2434*12c85518Srobert OMPTargetTeamsGenericLoopDirective::CreateEmpty(const ASTContext &C,
2435*12c85518Srobert unsigned NumClauses,
2436*12c85518Srobert unsigned CollapsedNum,
2437*12c85518Srobert EmptyShell) {
2438*12c85518Srobert return createEmptyDirective<OMPTargetTeamsGenericLoopDirective>(
2439*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
2440*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_target_teams_loop), CollapsedNum);
2441*12c85518Srobert }
2442*12c85518Srobert
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2443*12c85518Srobert OMPParallelGenericLoopDirective *OMPParallelGenericLoopDirective::Create(
2444*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2445*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2446*12c85518Srobert const HelperExprs &Exprs) {
2447*12c85518Srobert auto *Dir = createDirective<OMPParallelGenericLoopDirective>(
2448*12c85518Srobert C, Clauses, AssociatedStmt,
2449*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_parallel_loop), StartLoc, EndLoc,
2450*12c85518Srobert CollapsedNum);
2451*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
2452*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
2453*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2454*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
2455*12c85518Srobert Dir->setCond(Exprs.Cond);
2456*12c85518Srobert Dir->setInit(Exprs.Init);
2457*12c85518Srobert Dir->setInc(Exprs.Inc);
2458*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
2459*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
2460*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
2461*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
2462*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
2463*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
2464*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
2465*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
2466*12c85518Srobert Dir->setCounters(Exprs.Counters);
2467*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
2468*12c85518Srobert Dir->setInits(Exprs.Inits);
2469*12c85518Srobert Dir->setUpdates(Exprs.Updates);
2470*12c85518Srobert Dir->setFinals(Exprs.Finals);
2471*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
2472*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
2473*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
2474*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
2475*12c85518Srobert return Dir;
2476*12c85518Srobert }
2477*12c85518Srobert
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2478*12c85518Srobert OMPParallelGenericLoopDirective *OMPParallelGenericLoopDirective::CreateEmpty(
2479*12c85518Srobert const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
2480*12c85518Srobert EmptyShell) {
2481*12c85518Srobert return createEmptyDirective<OMPParallelGenericLoopDirective>(
2482*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
2483*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_parallel_loop), CollapsedNum);
2484*12c85518Srobert }
2485*12c85518Srobert
2486*12c85518Srobert OMPTargetParallelGenericLoopDirective *
Create(const ASTContext & C,SourceLocation StartLoc,SourceLocation EndLoc,unsigned CollapsedNum,ArrayRef<OMPClause * > Clauses,Stmt * AssociatedStmt,const HelperExprs & Exprs)2487*12c85518Srobert OMPTargetParallelGenericLoopDirective::Create(
2488*12c85518Srobert const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2489*12c85518Srobert unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2490*12c85518Srobert const HelperExprs &Exprs) {
2491*12c85518Srobert auto *Dir = createDirective<OMPTargetParallelGenericLoopDirective>(
2492*12c85518Srobert C, Clauses, AssociatedStmt,
2493*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_target_parallel_loop), StartLoc,
2494*12c85518Srobert EndLoc, CollapsedNum);
2495*12c85518Srobert Dir->setIterationVariable(Exprs.IterationVarRef);
2496*12c85518Srobert Dir->setLastIteration(Exprs.LastIteration);
2497*12c85518Srobert Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2498*12c85518Srobert Dir->setPreCond(Exprs.PreCond);
2499*12c85518Srobert Dir->setCond(Exprs.Cond);
2500*12c85518Srobert Dir->setInit(Exprs.Init);
2501*12c85518Srobert Dir->setInc(Exprs.Inc);
2502*12c85518Srobert Dir->setIsLastIterVariable(Exprs.IL);
2503*12c85518Srobert Dir->setLowerBoundVariable(Exprs.LB);
2504*12c85518Srobert Dir->setUpperBoundVariable(Exprs.UB);
2505*12c85518Srobert Dir->setStrideVariable(Exprs.ST);
2506*12c85518Srobert Dir->setEnsureUpperBound(Exprs.EUB);
2507*12c85518Srobert Dir->setNextLowerBound(Exprs.NLB);
2508*12c85518Srobert Dir->setNextUpperBound(Exprs.NUB);
2509*12c85518Srobert Dir->setNumIterations(Exprs.NumIterations);
2510*12c85518Srobert Dir->setCounters(Exprs.Counters);
2511*12c85518Srobert Dir->setPrivateCounters(Exprs.PrivateCounters);
2512*12c85518Srobert Dir->setInits(Exprs.Inits);
2513*12c85518Srobert Dir->setUpdates(Exprs.Updates);
2514*12c85518Srobert Dir->setFinals(Exprs.Finals);
2515*12c85518Srobert Dir->setDependentCounters(Exprs.DependentCounters);
2516*12c85518Srobert Dir->setDependentInits(Exprs.DependentInits);
2517*12c85518Srobert Dir->setFinalsConditions(Exprs.FinalsConditions);
2518*12c85518Srobert Dir->setPreInits(Exprs.PreInits);
2519*12c85518Srobert return Dir;
2520*12c85518Srobert }
2521*12c85518Srobert
2522*12c85518Srobert OMPTargetParallelGenericLoopDirective *
CreateEmpty(const ASTContext & C,unsigned NumClauses,unsigned CollapsedNum,EmptyShell)2523*12c85518Srobert OMPTargetParallelGenericLoopDirective::CreateEmpty(const ASTContext &C,
2524*12c85518Srobert unsigned NumClauses,
2525*12c85518Srobert unsigned CollapsedNum,
2526*12c85518Srobert EmptyShell) {
2527*12c85518Srobert return createEmptyDirective<OMPTargetParallelGenericLoopDirective>(
2528*12c85518Srobert C, NumClauses, /*HasAssociatedStmt=*/true,
2529*12c85518Srobert numLoopChildren(CollapsedNum, OMPD_target_parallel_loop), CollapsedNum);
2530*12c85518Srobert }
2531