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