1 //===--- StmtOpenMP.cpp - Classes for OpenMP directives -------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the subclesses of Stmt class declared in StmtOpenMP.h
12 //===----------------------------------------------------------------------===//
14 #include "clang/AST/StmtOpenMP.h"
16 #include "clang/AST/ASTContext.h"
18 using namespace clang;
20 void OMPExecutableDirective::setClauses(ArrayRef<OMPClause *> Clauses) {
21 assert(Clauses.size() == getNumClauses() &&
22 "Number of clauses is not the same as the preallocated buffer");
23 std::copy(Clauses.begin(), Clauses.end(), getClauses().begin());
26 void OMPLoopDirective::setCounters(ArrayRef<Expr *> A) {
27 assert(A.size() == getCollapsedNumber() &&
28 "Number of loop counters is not the same as the collapsed number");
29 std::copy(A.begin(), A.end(), getCounters().begin());
32 void OMPLoopDirective::setPrivateCounters(ArrayRef<Expr *> A) {
33 assert(A.size() == getCollapsedNumber() && "Number of loop private counters "
34 "is not the same as the collapsed "
36 std::copy(A.begin(), A.end(), getPrivateCounters().begin());
39 void OMPLoopDirective::setInits(ArrayRef<Expr *> A) {
40 assert(A.size() == getCollapsedNumber() &&
41 "Number of counter inits is not the same as the collapsed number");
42 std::copy(A.begin(), A.end(), getInits().begin());
45 void OMPLoopDirective::setUpdates(ArrayRef<Expr *> A) {
46 assert(A.size() == getCollapsedNumber() &&
47 "Number of counter updates is not the same as the collapsed number");
48 std::copy(A.begin(), A.end(), getUpdates().begin());
51 void OMPLoopDirective::setFinals(ArrayRef<Expr *> A) {
52 assert(A.size() == getCollapsedNumber() &&
53 "Number of counter finals is not the same as the collapsed number");
54 std::copy(A.begin(), A.end(), getFinals().begin());
57 OMPParallelDirective *OMPParallelDirective::Create(
58 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
59 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) {
61 llvm::alignTo(sizeof(OMPParallelDirective), alignof(OMPClause *));
63 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
64 OMPParallelDirective *Dir =
65 new (Mem) OMPParallelDirective(StartLoc, EndLoc, Clauses.size());
66 Dir->setClauses(Clauses);
67 Dir->setAssociatedStmt(AssociatedStmt);
68 Dir->setHasCancel(HasCancel);
72 OMPParallelDirective *OMPParallelDirective::CreateEmpty(const ASTContext &C,
76 llvm::alignTo(sizeof(OMPParallelDirective), alignof(OMPClause *));
78 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
79 return new (Mem) OMPParallelDirective(NumClauses);
83 OMPSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
84 SourceLocation EndLoc, unsigned CollapsedNum,
85 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
86 const HelperExprs &Exprs) {
87 unsigned Size = llvm::alignTo(sizeof(OMPSimdDirective), alignof(OMPClause *));
89 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
90 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_simd));
91 OMPSimdDirective *Dir = new (Mem)
92 OMPSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
93 Dir->setClauses(Clauses);
94 Dir->setAssociatedStmt(AssociatedStmt);
95 Dir->setIterationVariable(Exprs.IterationVarRef);
96 Dir->setLastIteration(Exprs.LastIteration);
97 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
98 Dir->setPreCond(Exprs.PreCond);
99 Dir->setCond(Exprs.Cond);
100 Dir->setInit(Exprs.Init);
101 Dir->setInc(Exprs.Inc);
102 Dir->setCounters(Exprs.Counters);
103 Dir->setPrivateCounters(Exprs.PrivateCounters);
104 Dir->setInits(Exprs.Inits);
105 Dir->setUpdates(Exprs.Updates);
106 Dir->setFinals(Exprs.Finals);
107 Dir->setPreInits(Exprs.PreInits);
111 OMPSimdDirective *OMPSimdDirective::CreateEmpty(const ASTContext &C,
113 unsigned CollapsedNum,
115 unsigned Size = llvm::alignTo(sizeof(OMPSimdDirective), alignof(OMPClause *));
117 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
118 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_simd));
119 return new (Mem) OMPSimdDirective(CollapsedNum, NumClauses);
123 OMPForDirective::Create(const ASTContext &C, SourceLocation StartLoc,
124 SourceLocation EndLoc, unsigned CollapsedNum,
125 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
126 const HelperExprs &Exprs, bool HasCancel) {
127 unsigned Size = llvm::alignTo(sizeof(OMPForDirective), alignof(OMPClause *));
129 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
130 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for));
131 OMPForDirective *Dir =
132 new (Mem) OMPForDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
133 Dir->setClauses(Clauses);
134 Dir->setAssociatedStmt(AssociatedStmt);
135 Dir->setIterationVariable(Exprs.IterationVarRef);
136 Dir->setLastIteration(Exprs.LastIteration);
137 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
138 Dir->setPreCond(Exprs.PreCond);
139 Dir->setCond(Exprs.Cond);
140 Dir->setInit(Exprs.Init);
141 Dir->setInc(Exprs.Inc);
142 Dir->setIsLastIterVariable(Exprs.IL);
143 Dir->setLowerBoundVariable(Exprs.LB);
144 Dir->setUpperBoundVariable(Exprs.UB);
145 Dir->setStrideVariable(Exprs.ST);
146 Dir->setEnsureUpperBound(Exprs.EUB);
147 Dir->setNextLowerBound(Exprs.NLB);
148 Dir->setNextUpperBound(Exprs.NUB);
149 Dir->setNumIterations(Exprs.NumIterations);
150 Dir->setCounters(Exprs.Counters);
151 Dir->setPrivateCounters(Exprs.PrivateCounters);
152 Dir->setInits(Exprs.Inits);
153 Dir->setUpdates(Exprs.Updates);
154 Dir->setFinals(Exprs.Finals);
155 Dir->setPreInits(Exprs.PreInits);
156 Dir->setHasCancel(HasCancel);
160 OMPForDirective *OMPForDirective::CreateEmpty(const ASTContext &C,
162 unsigned CollapsedNum,
164 unsigned Size = llvm::alignTo(sizeof(OMPForDirective), alignof(OMPClause *));
166 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
167 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for));
168 return new (Mem) OMPForDirective(CollapsedNum, NumClauses);
171 OMPForSimdDirective *
172 OMPForSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
173 SourceLocation EndLoc, unsigned CollapsedNum,
174 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
175 const HelperExprs &Exprs) {
177 llvm::alignTo(sizeof(OMPForSimdDirective), alignof(OMPClause *));
179 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
180 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for_simd));
181 OMPForSimdDirective *Dir = new (Mem)
182 OMPForSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
183 Dir->setClauses(Clauses);
184 Dir->setAssociatedStmt(AssociatedStmt);
185 Dir->setIterationVariable(Exprs.IterationVarRef);
186 Dir->setLastIteration(Exprs.LastIteration);
187 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
188 Dir->setPreCond(Exprs.PreCond);
189 Dir->setCond(Exprs.Cond);
190 Dir->setInit(Exprs.Init);
191 Dir->setInc(Exprs.Inc);
192 Dir->setIsLastIterVariable(Exprs.IL);
193 Dir->setLowerBoundVariable(Exprs.LB);
194 Dir->setUpperBoundVariable(Exprs.UB);
195 Dir->setStrideVariable(Exprs.ST);
196 Dir->setEnsureUpperBound(Exprs.EUB);
197 Dir->setNextLowerBound(Exprs.NLB);
198 Dir->setNextUpperBound(Exprs.NUB);
199 Dir->setNumIterations(Exprs.NumIterations);
200 Dir->setCounters(Exprs.Counters);
201 Dir->setPrivateCounters(Exprs.PrivateCounters);
202 Dir->setInits(Exprs.Inits);
203 Dir->setUpdates(Exprs.Updates);
204 Dir->setFinals(Exprs.Finals);
205 Dir->setPreInits(Exprs.PreInits);
209 OMPForSimdDirective *OMPForSimdDirective::CreateEmpty(const ASTContext &C,
211 unsigned CollapsedNum,
214 llvm::alignTo(sizeof(OMPForSimdDirective), alignof(OMPClause *));
216 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
217 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for_simd));
218 return new (Mem) OMPForSimdDirective(CollapsedNum, NumClauses);
221 OMPSectionsDirective *OMPSectionsDirective::Create(
222 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
223 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) {
225 llvm::alignTo(sizeof(OMPSectionsDirective), alignof(OMPClause *));
227 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
228 OMPSectionsDirective *Dir =
229 new (Mem) OMPSectionsDirective(StartLoc, EndLoc, Clauses.size());
230 Dir->setClauses(Clauses);
231 Dir->setAssociatedStmt(AssociatedStmt);
232 Dir->setHasCancel(HasCancel);
236 OMPSectionsDirective *OMPSectionsDirective::CreateEmpty(const ASTContext &C,
240 llvm::alignTo(sizeof(OMPSectionsDirective), alignof(OMPClause *));
242 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
243 return new (Mem) OMPSectionsDirective(NumClauses);
246 OMPSectionDirective *OMPSectionDirective::Create(const ASTContext &C,
247 SourceLocation StartLoc,
248 SourceLocation EndLoc,
249 Stmt *AssociatedStmt,
251 unsigned Size = llvm::alignTo(sizeof(OMPSectionDirective), alignof(Stmt *));
252 void *Mem = C.Allocate(Size + sizeof(Stmt *));
253 OMPSectionDirective *Dir = new (Mem) OMPSectionDirective(StartLoc, EndLoc);
254 Dir->setAssociatedStmt(AssociatedStmt);
255 Dir->setHasCancel(HasCancel);
259 OMPSectionDirective *OMPSectionDirective::CreateEmpty(const ASTContext &C,
261 unsigned Size = llvm::alignTo(sizeof(OMPSectionDirective), alignof(Stmt *));
262 void *Mem = C.Allocate(Size + sizeof(Stmt *));
263 return new (Mem) OMPSectionDirective();
266 OMPSingleDirective *OMPSingleDirective::Create(const ASTContext &C,
267 SourceLocation StartLoc,
268 SourceLocation EndLoc,
269 ArrayRef<OMPClause *> Clauses,
270 Stmt *AssociatedStmt) {
272 llvm::alignTo(sizeof(OMPSingleDirective), alignof(OMPClause *));
274 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
275 OMPSingleDirective *Dir =
276 new (Mem) OMPSingleDirective(StartLoc, EndLoc, Clauses.size());
277 Dir->setClauses(Clauses);
278 Dir->setAssociatedStmt(AssociatedStmt);
282 OMPSingleDirective *OMPSingleDirective::CreateEmpty(const ASTContext &C,
286 llvm::alignTo(sizeof(OMPSingleDirective), alignof(OMPClause *));
288 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
289 return new (Mem) OMPSingleDirective(NumClauses);
292 OMPMasterDirective *OMPMasterDirective::Create(const ASTContext &C,
293 SourceLocation StartLoc,
294 SourceLocation EndLoc,
295 Stmt *AssociatedStmt) {
296 unsigned Size = llvm::alignTo(sizeof(OMPMasterDirective), alignof(Stmt *));
297 void *Mem = C.Allocate(Size + sizeof(Stmt *));
298 OMPMasterDirective *Dir = new (Mem) OMPMasterDirective(StartLoc, EndLoc);
299 Dir->setAssociatedStmt(AssociatedStmt);
303 OMPMasterDirective *OMPMasterDirective::CreateEmpty(const ASTContext &C,
305 unsigned Size = llvm::alignTo(sizeof(OMPMasterDirective), alignof(Stmt *));
306 void *Mem = C.Allocate(Size + sizeof(Stmt *));
307 return new (Mem) OMPMasterDirective();
310 OMPCriticalDirective *OMPCriticalDirective::Create(
311 const ASTContext &C, const DeclarationNameInfo &Name,
312 SourceLocation StartLoc, SourceLocation EndLoc,
313 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
315 llvm::alignTo(sizeof(OMPCriticalDirective), alignof(OMPClause *));
317 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
318 OMPCriticalDirective *Dir =
319 new (Mem) OMPCriticalDirective(Name, StartLoc, EndLoc, Clauses.size());
320 Dir->setClauses(Clauses);
321 Dir->setAssociatedStmt(AssociatedStmt);
325 OMPCriticalDirective *OMPCriticalDirective::CreateEmpty(const ASTContext &C,
329 llvm::alignTo(sizeof(OMPCriticalDirective), alignof(OMPClause *));
331 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
332 return new (Mem) OMPCriticalDirective(NumClauses);
335 OMPParallelForDirective *OMPParallelForDirective::Create(
336 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
337 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
338 const HelperExprs &Exprs, bool HasCancel) {
340 llvm::alignTo(sizeof(OMPParallelForDirective), alignof(OMPClause *));
341 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
343 numLoopChildren(CollapsedNum, OMPD_parallel_for));
344 OMPParallelForDirective *Dir = new (Mem)
345 OMPParallelForDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
346 Dir->setClauses(Clauses);
347 Dir->setAssociatedStmt(AssociatedStmt);
348 Dir->setIterationVariable(Exprs.IterationVarRef);
349 Dir->setLastIteration(Exprs.LastIteration);
350 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
351 Dir->setPreCond(Exprs.PreCond);
352 Dir->setCond(Exprs.Cond);
353 Dir->setInit(Exprs.Init);
354 Dir->setInc(Exprs.Inc);
355 Dir->setIsLastIterVariable(Exprs.IL);
356 Dir->setLowerBoundVariable(Exprs.LB);
357 Dir->setUpperBoundVariable(Exprs.UB);
358 Dir->setStrideVariable(Exprs.ST);
359 Dir->setEnsureUpperBound(Exprs.EUB);
360 Dir->setNextLowerBound(Exprs.NLB);
361 Dir->setNextUpperBound(Exprs.NUB);
362 Dir->setNumIterations(Exprs.NumIterations);
363 Dir->setCounters(Exprs.Counters);
364 Dir->setPrivateCounters(Exprs.PrivateCounters);
365 Dir->setInits(Exprs.Inits);
366 Dir->setUpdates(Exprs.Updates);
367 Dir->setFinals(Exprs.Finals);
368 Dir->setPreInits(Exprs.PreInits);
369 Dir->setHasCancel(HasCancel);
373 OMPParallelForDirective *
374 OMPParallelForDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
375 unsigned CollapsedNum, EmptyShell) {
377 llvm::alignTo(sizeof(OMPParallelForDirective), alignof(OMPClause *));
378 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
380 numLoopChildren(CollapsedNum, OMPD_parallel_for));
381 return new (Mem) OMPParallelForDirective(CollapsedNum, NumClauses);
384 OMPParallelForSimdDirective *OMPParallelForSimdDirective::Create(
385 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
386 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
387 const HelperExprs &Exprs) {
389 llvm::alignTo(sizeof(OMPParallelForSimdDirective), alignof(OMPClause *));
390 void *Mem = C.Allocate(
391 Size + sizeof(OMPClause *) * Clauses.size() +
392 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_parallel_for_simd));
393 OMPParallelForSimdDirective *Dir = new (Mem) OMPParallelForSimdDirective(
394 StartLoc, EndLoc, CollapsedNum, Clauses.size());
395 Dir->setClauses(Clauses);
396 Dir->setAssociatedStmt(AssociatedStmt);
397 Dir->setIterationVariable(Exprs.IterationVarRef);
398 Dir->setLastIteration(Exprs.LastIteration);
399 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
400 Dir->setPreCond(Exprs.PreCond);
401 Dir->setCond(Exprs.Cond);
402 Dir->setInit(Exprs.Init);
403 Dir->setInc(Exprs.Inc);
404 Dir->setIsLastIterVariable(Exprs.IL);
405 Dir->setLowerBoundVariable(Exprs.LB);
406 Dir->setUpperBoundVariable(Exprs.UB);
407 Dir->setStrideVariable(Exprs.ST);
408 Dir->setEnsureUpperBound(Exprs.EUB);
409 Dir->setNextLowerBound(Exprs.NLB);
410 Dir->setNextUpperBound(Exprs.NUB);
411 Dir->setNumIterations(Exprs.NumIterations);
412 Dir->setCounters(Exprs.Counters);
413 Dir->setPrivateCounters(Exprs.PrivateCounters);
414 Dir->setInits(Exprs.Inits);
415 Dir->setUpdates(Exprs.Updates);
416 Dir->setFinals(Exprs.Finals);
417 Dir->setPreInits(Exprs.PreInits);
421 OMPParallelForSimdDirective *
422 OMPParallelForSimdDirective::CreateEmpty(const ASTContext &C,
424 unsigned CollapsedNum, EmptyShell) {
426 llvm::alignTo(sizeof(OMPParallelForSimdDirective), alignof(OMPClause *));
427 void *Mem = C.Allocate(
428 Size + sizeof(OMPClause *) * NumClauses +
429 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_parallel_for_simd));
430 return new (Mem) OMPParallelForSimdDirective(CollapsedNum, NumClauses);
433 OMPParallelSectionsDirective *OMPParallelSectionsDirective::Create(
434 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
435 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) {
437 llvm::alignTo(sizeof(OMPParallelSectionsDirective), alignof(OMPClause *));
439 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
440 OMPParallelSectionsDirective *Dir =
441 new (Mem) OMPParallelSectionsDirective(StartLoc, EndLoc, Clauses.size());
442 Dir->setClauses(Clauses);
443 Dir->setAssociatedStmt(AssociatedStmt);
444 Dir->setHasCancel(HasCancel);
448 OMPParallelSectionsDirective *
449 OMPParallelSectionsDirective::CreateEmpty(const ASTContext &C,
450 unsigned NumClauses, EmptyShell) {
452 llvm::alignTo(sizeof(OMPParallelSectionsDirective), alignof(OMPClause *));
454 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
455 return new (Mem) OMPParallelSectionsDirective(NumClauses);
459 OMPTaskDirective::Create(const ASTContext &C, SourceLocation StartLoc,
460 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
461 Stmt *AssociatedStmt, bool HasCancel) {
462 unsigned Size = llvm::alignTo(sizeof(OMPTaskDirective), alignof(OMPClause *));
464 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
465 OMPTaskDirective *Dir =
466 new (Mem) OMPTaskDirective(StartLoc, EndLoc, Clauses.size());
467 Dir->setClauses(Clauses);
468 Dir->setAssociatedStmt(AssociatedStmt);
469 Dir->setHasCancel(HasCancel);
473 OMPTaskDirective *OMPTaskDirective::CreateEmpty(const ASTContext &C,
476 unsigned Size = llvm::alignTo(sizeof(OMPTaskDirective), alignof(OMPClause *));
478 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
479 return new (Mem) OMPTaskDirective(NumClauses);
482 OMPTaskyieldDirective *OMPTaskyieldDirective::Create(const ASTContext &C,
483 SourceLocation StartLoc,
484 SourceLocation EndLoc) {
485 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective));
486 OMPTaskyieldDirective *Dir =
487 new (Mem) OMPTaskyieldDirective(StartLoc, EndLoc);
491 OMPTaskyieldDirective *OMPTaskyieldDirective::CreateEmpty(const ASTContext &C,
493 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective));
494 return new (Mem) OMPTaskyieldDirective();
497 OMPBarrierDirective *OMPBarrierDirective::Create(const ASTContext &C,
498 SourceLocation StartLoc,
499 SourceLocation EndLoc) {
500 void *Mem = C.Allocate(sizeof(OMPBarrierDirective));
501 OMPBarrierDirective *Dir = new (Mem) OMPBarrierDirective(StartLoc, EndLoc);
505 OMPBarrierDirective *OMPBarrierDirective::CreateEmpty(const ASTContext &C,
507 void *Mem = C.Allocate(sizeof(OMPBarrierDirective));
508 return new (Mem) OMPBarrierDirective();
511 OMPTaskwaitDirective *OMPTaskwaitDirective::Create(const ASTContext &C,
512 SourceLocation StartLoc,
513 SourceLocation EndLoc) {
514 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective));
515 OMPTaskwaitDirective *Dir = new (Mem) OMPTaskwaitDirective(StartLoc, EndLoc);
519 OMPTaskwaitDirective *OMPTaskwaitDirective::CreateEmpty(const ASTContext &C,
521 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective));
522 return new (Mem) OMPTaskwaitDirective();
525 OMPTaskgroupDirective *OMPTaskgroupDirective::Create(const ASTContext &C,
526 SourceLocation StartLoc,
527 SourceLocation EndLoc,
528 Stmt *AssociatedStmt) {
529 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective), alignof(Stmt *));
530 void *Mem = C.Allocate(Size + sizeof(Stmt *));
531 OMPTaskgroupDirective *Dir =
532 new (Mem) OMPTaskgroupDirective(StartLoc, EndLoc);
533 Dir->setAssociatedStmt(AssociatedStmt);
537 OMPTaskgroupDirective *OMPTaskgroupDirective::CreateEmpty(const ASTContext &C,
539 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective), alignof(Stmt *));
540 void *Mem = C.Allocate(Size + sizeof(Stmt *));
541 return new (Mem) OMPTaskgroupDirective();
544 OMPCancellationPointDirective *OMPCancellationPointDirective::Create(
545 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
546 OpenMPDirectiveKind CancelRegion) {
548 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *));
549 void *Mem = C.Allocate(Size);
550 OMPCancellationPointDirective *Dir =
551 new (Mem) OMPCancellationPointDirective(StartLoc, EndLoc);
552 Dir->setCancelRegion(CancelRegion);
556 OMPCancellationPointDirective *
557 OMPCancellationPointDirective::CreateEmpty(const ASTContext &C, EmptyShell) {
559 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *));
560 void *Mem = C.Allocate(Size);
561 return new (Mem) OMPCancellationPointDirective();
565 OMPCancelDirective::Create(const ASTContext &C, SourceLocation StartLoc,
566 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
567 OpenMPDirectiveKind CancelRegion) {
568 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) +
569 sizeof(OMPClause *) * Clauses.size(),
571 void *Mem = C.Allocate(Size);
572 OMPCancelDirective *Dir =
573 new (Mem) OMPCancelDirective(StartLoc, EndLoc, Clauses.size());
574 Dir->setClauses(Clauses);
575 Dir->setCancelRegion(CancelRegion);
579 OMPCancelDirective *OMPCancelDirective::CreateEmpty(const ASTContext &C,
582 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) +
583 sizeof(OMPClause *) * NumClauses,
585 void *Mem = C.Allocate(Size);
586 return new (Mem) OMPCancelDirective(NumClauses);
589 OMPFlushDirective *OMPFlushDirective::Create(const ASTContext &C,
590 SourceLocation StartLoc,
591 SourceLocation EndLoc,
592 ArrayRef<OMPClause *> Clauses) {
594 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *));
595 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size());
596 OMPFlushDirective *Dir =
597 new (Mem) OMPFlushDirective(StartLoc, EndLoc, Clauses.size());
598 Dir->setClauses(Clauses);
602 OMPFlushDirective *OMPFlushDirective::CreateEmpty(const ASTContext &C,
606 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *));
607 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses);
608 return new (Mem) OMPFlushDirective(NumClauses);
611 OMPOrderedDirective *OMPOrderedDirective::Create(const ASTContext &C,
612 SourceLocation StartLoc,
613 SourceLocation EndLoc,
614 ArrayRef<OMPClause *> Clauses,
615 Stmt *AssociatedStmt) {
617 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *));
619 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * Clauses.size());
620 OMPOrderedDirective *Dir =
621 new (Mem) OMPOrderedDirective(StartLoc, EndLoc, Clauses.size());
622 Dir->setClauses(Clauses);
623 Dir->setAssociatedStmt(AssociatedStmt);
627 OMPOrderedDirective *OMPOrderedDirective::CreateEmpty(const ASTContext &C,
631 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *));
633 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * NumClauses);
634 return new (Mem) OMPOrderedDirective(NumClauses);
637 OMPAtomicDirective *OMPAtomicDirective::Create(
638 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
639 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *X, Expr *V,
640 Expr *E, Expr *UE, bool IsXLHSInRHSPart, bool IsPostfixUpdate) {
642 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *));
643 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
645 OMPAtomicDirective *Dir =
646 new (Mem) OMPAtomicDirective(StartLoc, EndLoc, Clauses.size());
647 Dir->setClauses(Clauses);
648 Dir->setAssociatedStmt(AssociatedStmt);
652 Dir->setUpdateExpr(UE);
653 Dir->IsXLHSInRHSPart = IsXLHSInRHSPart;
654 Dir->IsPostfixUpdate = IsPostfixUpdate;
658 OMPAtomicDirective *OMPAtomicDirective::CreateEmpty(const ASTContext &C,
662 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *));
664 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 5 * sizeof(Stmt *));
665 return new (Mem) OMPAtomicDirective(NumClauses);
668 OMPTargetDirective *OMPTargetDirective::Create(const ASTContext &C,
669 SourceLocation StartLoc,
670 SourceLocation EndLoc,
671 ArrayRef<OMPClause *> Clauses,
672 Stmt *AssociatedStmt) {
674 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *));
676 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
677 OMPTargetDirective *Dir =
678 new (Mem) OMPTargetDirective(StartLoc, EndLoc, Clauses.size());
679 Dir->setClauses(Clauses);
680 Dir->setAssociatedStmt(AssociatedStmt);
684 OMPTargetDirective *OMPTargetDirective::CreateEmpty(const ASTContext &C,
688 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *));
690 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
691 return new (Mem) OMPTargetDirective(NumClauses);
694 OMPTargetParallelDirective *OMPTargetParallelDirective::Create(
695 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
696 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
698 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *));
700 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
701 OMPTargetParallelDirective *Dir =
702 new (Mem) OMPTargetParallelDirective(StartLoc, EndLoc, Clauses.size());
703 Dir->setClauses(Clauses);
704 Dir->setAssociatedStmt(AssociatedStmt);
708 OMPTargetParallelDirective *
709 OMPTargetParallelDirective::CreateEmpty(const ASTContext &C,
710 unsigned NumClauses, EmptyShell) {
712 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *));
714 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
715 return new (Mem) OMPTargetParallelDirective(NumClauses);
718 OMPTargetParallelForDirective *OMPTargetParallelForDirective::Create(
719 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
720 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
721 const HelperExprs &Exprs, bool HasCancel) {
722 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective),
723 alignof(OMPClause *));
724 void *Mem = C.Allocate(
725 Size + sizeof(OMPClause *) * Clauses.size() +
726 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for));
727 OMPTargetParallelForDirective *Dir = new (Mem) OMPTargetParallelForDirective(
728 StartLoc, EndLoc, CollapsedNum, Clauses.size());
729 Dir->setClauses(Clauses);
730 Dir->setAssociatedStmt(AssociatedStmt);
731 Dir->setIterationVariable(Exprs.IterationVarRef);
732 Dir->setLastIteration(Exprs.LastIteration);
733 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
734 Dir->setPreCond(Exprs.PreCond);
735 Dir->setCond(Exprs.Cond);
736 Dir->setInit(Exprs.Init);
737 Dir->setInc(Exprs.Inc);
738 Dir->setIsLastIterVariable(Exprs.IL);
739 Dir->setLowerBoundVariable(Exprs.LB);
740 Dir->setUpperBoundVariable(Exprs.UB);
741 Dir->setStrideVariable(Exprs.ST);
742 Dir->setEnsureUpperBound(Exprs.EUB);
743 Dir->setNextLowerBound(Exprs.NLB);
744 Dir->setNextUpperBound(Exprs.NUB);
745 Dir->setNumIterations(Exprs.NumIterations);
746 Dir->setCounters(Exprs.Counters);
747 Dir->setPrivateCounters(Exprs.PrivateCounters);
748 Dir->setInits(Exprs.Inits);
749 Dir->setUpdates(Exprs.Updates);
750 Dir->setFinals(Exprs.Finals);
751 Dir->setPreInits(Exprs.PreInits);
752 Dir->setHasCancel(HasCancel);
756 OMPTargetParallelForDirective *
757 OMPTargetParallelForDirective::CreateEmpty(const ASTContext &C,
759 unsigned CollapsedNum, EmptyShell) {
760 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective),
761 alignof(OMPClause *));
762 void *Mem = C.Allocate(
763 Size + sizeof(OMPClause *) * NumClauses +
764 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for));
765 return new (Mem) OMPTargetParallelForDirective(CollapsedNum, NumClauses);
768 OMPTargetDataDirective *OMPTargetDataDirective::Create(
769 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
770 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
771 void *Mem = C.Allocate(
772 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) +
773 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
774 OMPTargetDataDirective *Dir =
775 new (Mem) OMPTargetDataDirective(StartLoc, EndLoc, Clauses.size());
776 Dir->setClauses(Clauses);
777 Dir->setAssociatedStmt(AssociatedStmt);
781 OMPTargetDataDirective *OMPTargetDataDirective::CreateEmpty(const ASTContext &C,
784 void *Mem = C.Allocate(
785 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) +
786 sizeof(OMPClause *) * N + sizeof(Stmt *));
787 return new (Mem) OMPTargetDataDirective(N);
790 OMPTargetEnterDataDirective *OMPTargetEnterDataDirective::Create(
791 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
792 ArrayRef<OMPClause *> Clauses) {
793 void *Mem = C.Allocate(
794 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) +
795 sizeof(OMPClause *) * Clauses.size());
796 OMPTargetEnterDataDirective *Dir =
797 new (Mem) OMPTargetEnterDataDirective(StartLoc, EndLoc, Clauses.size());
798 Dir->setClauses(Clauses);
802 OMPTargetEnterDataDirective *
803 OMPTargetEnterDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
805 void *Mem = C.Allocate(
806 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) +
807 sizeof(OMPClause *) * N);
808 return new (Mem) OMPTargetEnterDataDirective(N);
811 OMPTargetExitDataDirective *
812 OMPTargetExitDataDirective::Create(const ASTContext &C, SourceLocation StartLoc,
813 SourceLocation EndLoc,
814 ArrayRef<OMPClause *> Clauses) {
815 void *Mem = C.Allocate(
816 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) +
817 sizeof(OMPClause *) * Clauses.size());
818 OMPTargetExitDataDirective *Dir =
819 new (Mem) OMPTargetExitDataDirective(StartLoc, EndLoc, Clauses.size());
820 Dir->setClauses(Clauses);
824 OMPTargetExitDataDirective *
825 OMPTargetExitDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
827 void *Mem = C.Allocate(
828 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) +
829 sizeof(OMPClause *) * N);
830 return new (Mem) OMPTargetExitDataDirective(N);
833 OMPTeamsDirective *OMPTeamsDirective::Create(const ASTContext &C,
834 SourceLocation StartLoc,
835 SourceLocation EndLoc,
836 ArrayRef<OMPClause *> Clauses,
837 Stmt *AssociatedStmt) {
839 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *));
841 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
842 OMPTeamsDirective *Dir =
843 new (Mem) OMPTeamsDirective(StartLoc, EndLoc, Clauses.size());
844 Dir->setClauses(Clauses);
845 Dir->setAssociatedStmt(AssociatedStmt);
849 OMPTeamsDirective *OMPTeamsDirective::CreateEmpty(const ASTContext &C,
853 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *));
855 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
856 return new (Mem) OMPTeamsDirective(NumClauses);
859 OMPTaskLoopDirective *OMPTaskLoopDirective::Create(
860 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
861 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
862 const HelperExprs &Exprs) {
864 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *));
866 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
867 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop));
868 OMPTaskLoopDirective *Dir = new (Mem)
869 OMPTaskLoopDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
870 Dir->setClauses(Clauses);
871 Dir->setAssociatedStmt(AssociatedStmt);
872 Dir->setIterationVariable(Exprs.IterationVarRef);
873 Dir->setLastIteration(Exprs.LastIteration);
874 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
875 Dir->setPreCond(Exprs.PreCond);
876 Dir->setCond(Exprs.Cond);
877 Dir->setInit(Exprs.Init);
878 Dir->setInc(Exprs.Inc);
879 Dir->setIsLastIterVariable(Exprs.IL);
880 Dir->setLowerBoundVariable(Exprs.LB);
881 Dir->setUpperBoundVariable(Exprs.UB);
882 Dir->setStrideVariable(Exprs.ST);
883 Dir->setEnsureUpperBound(Exprs.EUB);
884 Dir->setNextLowerBound(Exprs.NLB);
885 Dir->setNextUpperBound(Exprs.NUB);
886 Dir->setNumIterations(Exprs.NumIterations);
887 Dir->setCounters(Exprs.Counters);
888 Dir->setPrivateCounters(Exprs.PrivateCounters);
889 Dir->setInits(Exprs.Inits);
890 Dir->setUpdates(Exprs.Updates);
891 Dir->setFinals(Exprs.Finals);
892 Dir->setPreInits(Exprs.PreInits);
896 OMPTaskLoopDirective *OMPTaskLoopDirective::CreateEmpty(const ASTContext &C,
898 unsigned CollapsedNum,
901 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *));
903 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
904 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop));
905 return new (Mem) OMPTaskLoopDirective(CollapsedNum, NumClauses);
908 OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create(
909 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
910 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
911 const HelperExprs &Exprs) {
913 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *));
914 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
916 numLoopChildren(CollapsedNum, OMPD_taskloop_simd));
917 OMPTaskLoopSimdDirective *Dir = new (Mem)
918 OMPTaskLoopSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
919 Dir->setClauses(Clauses);
920 Dir->setAssociatedStmt(AssociatedStmt);
921 Dir->setIterationVariable(Exprs.IterationVarRef);
922 Dir->setLastIteration(Exprs.LastIteration);
923 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
924 Dir->setPreCond(Exprs.PreCond);
925 Dir->setCond(Exprs.Cond);
926 Dir->setInit(Exprs.Init);
927 Dir->setInc(Exprs.Inc);
928 Dir->setIsLastIterVariable(Exprs.IL);
929 Dir->setLowerBoundVariable(Exprs.LB);
930 Dir->setUpperBoundVariable(Exprs.UB);
931 Dir->setStrideVariable(Exprs.ST);
932 Dir->setEnsureUpperBound(Exprs.EUB);
933 Dir->setNextLowerBound(Exprs.NLB);
934 Dir->setNextUpperBound(Exprs.NUB);
935 Dir->setNumIterations(Exprs.NumIterations);
936 Dir->setCounters(Exprs.Counters);
937 Dir->setPrivateCounters(Exprs.PrivateCounters);
938 Dir->setInits(Exprs.Inits);
939 Dir->setUpdates(Exprs.Updates);
940 Dir->setFinals(Exprs.Finals);
941 Dir->setPreInits(Exprs.PreInits);
945 OMPTaskLoopSimdDirective *
946 OMPTaskLoopSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
947 unsigned CollapsedNum, EmptyShell) {
949 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *));
950 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
952 numLoopChildren(CollapsedNum, OMPD_taskloop_simd));
953 return new (Mem) OMPTaskLoopSimdDirective(CollapsedNum, NumClauses);
956 OMPDistributeDirective *OMPDistributeDirective::Create(
957 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
958 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
959 const HelperExprs &Exprs) {
961 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *));
962 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
964 numLoopChildren(CollapsedNum, OMPD_distribute));
965 OMPDistributeDirective *Dir = new (Mem)
966 OMPDistributeDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
967 Dir->setClauses(Clauses);
968 Dir->setAssociatedStmt(AssociatedStmt);
969 Dir->setIterationVariable(Exprs.IterationVarRef);
970 Dir->setLastIteration(Exprs.LastIteration);
971 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
972 Dir->setPreCond(Exprs.PreCond);
973 Dir->setCond(Exprs.Cond);
974 Dir->setInit(Exprs.Init);
975 Dir->setInc(Exprs.Inc);
976 Dir->setIsLastIterVariable(Exprs.IL);
977 Dir->setLowerBoundVariable(Exprs.LB);
978 Dir->setUpperBoundVariable(Exprs.UB);
979 Dir->setStrideVariable(Exprs.ST);
980 Dir->setEnsureUpperBound(Exprs.EUB);
981 Dir->setNextLowerBound(Exprs.NLB);
982 Dir->setNextUpperBound(Exprs.NUB);
983 Dir->setNumIterations(Exprs.NumIterations);
984 Dir->setCounters(Exprs.Counters);
985 Dir->setPrivateCounters(Exprs.PrivateCounters);
986 Dir->setInits(Exprs.Inits);
987 Dir->setUpdates(Exprs.Updates);
988 Dir->setFinals(Exprs.Finals);
989 Dir->setPreInits(Exprs.PreInits);
993 OMPDistributeDirective *
994 OMPDistributeDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
995 unsigned CollapsedNum, EmptyShell) {
997 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *));
998 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1000 numLoopChildren(CollapsedNum, OMPD_distribute));
1001 return new (Mem) OMPDistributeDirective(CollapsedNum, NumClauses);
1004 OMPTargetUpdateDirective *
1005 OMPTargetUpdateDirective::Create(const ASTContext &C, SourceLocation StartLoc,
1006 SourceLocation EndLoc,
1007 ArrayRef<OMPClause *> Clauses) {
1009 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *));
1010 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size());
1011 OMPTargetUpdateDirective *Dir =
1012 new (Mem) OMPTargetUpdateDirective(StartLoc, EndLoc, Clauses.size());
1013 Dir->setClauses(Clauses);
1017 OMPTargetUpdateDirective *
1018 OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1021 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *));
1022 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses);
1023 return new (Mem) OMPTargetUpdateDirective(NumClauses);
1026 OMPDistributeParallelForDirective *OMPDistributeParallelForDirective::Create(
1027 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1028 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1029 const HelperExprs &Exprs) {
1030 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective),
1031 alignof(OMPClause *));
1032 void *Mem = C.Allocate(
1033 Size + sizeof(OMPClause *) * Clauses.size() +
1035 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for));
1036 OMPDistributeParallelForDirective *Dir =
1037 new (Mem) OMPDistributeParallelForDirective(StartLoc, EndLoc,
1038 CollapsedNum, Clauses.size());
1039 Dir->setClauses(Clauses);
1040 Dir->setAssociatedStmt(AssociatedStmt);
1041 Dir->setIterationVariable(Exprs.IterationVarRef);
1042 Dir->setLastIteration(Exprs.LastIteration);
1043 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1044 Dir->setPreCond(Exprs.PreCond);
1045 Dir->setCond(Exprs.Cond);
1046 Dir->setInit(Exprs.Init);
1047 Dir->setInc(Exprs.Inc);
1048 Dir->setIsLastIterVariable(Exprs.IL);
1049 Dir->setLowerBoundVariable(Exprs.LB);
1050 Dir->setUpperBoundVariable(Exprs.UB);
1051 Dir->setStrideVariable(Exprs.ST);
1052 Dir->setEnsureUpperBound(Exprs.EUB);
1053 Dir->setNextLowerBound(Exprs.NLB);
1054 Dir->setNextUpperBound(Exprs.NUB);
1055 Dir->setNumIterations(Exprs.NumIterations);
1056 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1057 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1058 Dir->setDistInc(Exprs.DistInc);
1059 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1060 Dir->setCounters(Exprs.Counters);
1061 Dir->setPrivateCounters(Exprs.PrivateCounters);
1062 Dir->setInits(Exprs.Inits);
1063 Dir->setUpdates(Exprs.Updates);
1064 Dir->setFinals(Exprs.Finals);
1065 Dir->setPreInits(Exprs.PreInits);
1066 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1067 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1068 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1069 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1070 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1071 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1072 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1076 OMPDistributeParallelForDirective *
1077 OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1078 unsigned NumClauses,
1079 unsigned CollapsedNum,
1081 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective),
1082 alignof(OMPClause *));
1083 void *Mem = C.Allocate(
1084 Size + sizeof(OMPClause *) * NumClauses +
1086 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for));
1087 return new (Mem) OMPDistributeParallelForDirective(CollapsedNum, NumClauses);
1090 OMPDistributeParallelForSimdDirective *
1091 OMPDistributeParallelForSimdDirective::Create(
1092 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1093 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1094 const HelperExprs &Exprs) {
1095 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective),
1096 alignof(OMPClause *));
1097 void *Mem = C.Allocate(
1098 Size + sizeof(OMPClause *) * Clauses.size() +
1100 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd));
1101 OMPDistributeParallelForSimdDirective *Dir = new (Mem)
1102 OMPDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum,
1104 Dir->setClauses(Clauses);
1105 Dir->setAssociatedStmt(AssociatedStmt);
1106 Dir->setIterationVariable(Exprs.IterationVarRef);
1107 Dir->setLastIteration(Exprs.LastIteration);
1108 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1109 Dir->setPreCond(Exprs.PreCond);
1110 Dir->setCond(Exprs.Cond);
1111 Dir->setInit(Exprs.Init);
1112 Dir->setInc(Exprs.Inc);
1113 Dir->setIsLastIterVariable(Exprs.IL);
1114 Dir->setLowerBoundVariable(Exprs.LB);
1115 Dir->setUpperBoundVariable(Exprs.UB);
1116 Dir->setStrideVariable(Exprs.ST);
1117 Dir->setEnsureUpperBound(Exprs.EUB);
1118 Dir->setNextLowerBound(Exprs.NLB);
1119 Dir->setNextUpperBound(Exprs.NUB);
1120 Dir->setNumIterations(Exprs.NumIterations);
1121 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1122 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1123 Dir->setDistInc(Exprs.DistInc);
1124 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1125 Dir->setCounters(Exprs.Counters);
1126 Dir->setPrivateCounters(Exprs.PrivateCounters);
1127 Dir->setInits(Exprs.Inits);
1128 Dir->setUpdates(Exprs.Updates);
1129 Dir->setFinals(Exprs.Finals);
1130 Dir->setPreInits(Exprs.PreInits);
1131 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1132 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1133 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1134 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1135 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1136 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1137 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1141 OMPDistributeParallelForSimdDirective *
1142 OMPDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1143 unsigned NumClauses,
1144 unsigned CollapsedNum,
1146 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective),
1147 alignof(OMPClause *));
1148 void *Mem = C.Allocate(
1149 Size + sizeof(OMPClause *) * NumClauses +
1151 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd));
1153 OMPDistributeParallelForSimdDirective(CollapsedNum, NumClauses);
1156 OMPDistributeSimdDirective *OMPDistributeSimdDirective::Create(
1157 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1158 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1159 const HelperExprs &Exprs) {
1161 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *));
1162 void *Mem = C.Allocate(
1163 Size + sizeof(OMPClause *) * Clauses.size() +
1165 numLoopChildren(CollapsedNum, OMPD_distribute_simd));
1166 OMPDistributeSimdDirective *Dir = new (Mem) OMPDistributeSimdDirective(
1167 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1168 Dir->setClauses(Clauses);
1169 Dir->setAssociatedStmt(AssociatedStmt);
1170 Dir->setIterationVariable(Exprs.IterationVarRef);
1171 Dir->setLastIteration(Exprs.LastIteration);
1172 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1173 Dir->setPreCond(Exprs.PreCond);
1174 Dir->setCond(Exprs.Cond);
1175 Dir->setInit(Exprs.Init);
1176 Dir->setInc(Exprs.Inc);
1177 Dir->setIsLastIterVariable(Exprs.IL);
1178 Dir->setLowerBoundVariable(Exprs.LB);
1179 Dir->setUpperBoundVariable(Exprs.UB);
1180 Dir->setStrideVariable(Exprs.ST);
1181 Dir->setEnsureUpperBound(Exprs.EUB);
1182 Dir->setNextLowerBound(Exprs.NLB);
1183 Dir->setNextUpperBound(Exprs.NUB);
1184 Dir->setNumIterations(Exprs.NumIterations);
1185 Dir->setCounters(Exprs.Counters);
1186 Dir->setPrivateCounters(Exprs.PrivateCounters);
1187 Dir->setInits(Exprs.Inits);
1188 Dir->setUpdates(Exprs.Updates);
1189 Dir->setFinals(Exprs.Finals);
1190 Dir->setPreInits(Exprs.PreInits);
1194 OMPDistributeSimdDirective *
1195 OMPDistributeSimdDirective::CreateEmpty(const ASTContext &C,
1196 unsigned NumClauses,
1197 unsigned CollapsedNum, EmptyShell) {
1199 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *));
1200 void *Mem = C.Allocate(
1201 Size + sizeof(OMPClause *) * NumClauses +
1203 numLoopChildren(CollapsedNum, OMPD_distribute_simd));
1204 return new (Mem) OMPDistributeSimdDirective(CollapsedNum, NumClauses);
1207 OMPTargetParallelForSimdDirective *OMPTargetParallelForSimdDirective::Create(
1208 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1209 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1210 const HelperExprs &Exprs) {
1211 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective),
1212 alignof(OMPClause *));
1213 void *Mem = C.Allocate(
1214 Size + sizeof(OMPClause *) * Clauses.size() +
1216 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd));
1217 OMPTargetParallelForSimdDirective *Dir =
1218 new (Mem) OMPTargetParallelForSimdDirective(StartLoc, EndLoc,
1219 CollapsedNum, Clauses.size());
1220 Dir->setClauses(Clauses);
1221 Dir->setAssociatedStmt(AssociatedStmt);
1222 Dir->setIterationVariable(Exprs.IterationVarRef);
1223 Dir->setLastIteration(Exprs.LastIteration);
1224 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1225 Dir->setPreCond(Exprs.PreCond);
1226 Dir->setCond(Exprs.Cond);
1227 Dir->setInit(Exprs.Init);
1228 Dir->setInc(Exprs.Inc);
1229 Dir->setIsLastIterVariable(Exprs.IL);
1230 Dir->setLowerBoundVariable(Exprs.LB);
1231 Dir->setUpperBoundVariable(Exprs.UB);
1232 Dir->setStrideVariable(Exprs.ST);
1233 Dir->setEnsureUpperBound(Exprs.EUB);
1234 Dir->setNextLowerBound(Exprs.NLB);
1235 Dir->setNextUpperBound(Exprs.NUB);
1236 Dir->setNumIterations(Exprs.NumIterations);
1237 Dir->setCounters(Exprs.Counters);
1238 Dir->setPrivateCounters(Exprs.PrivateCounters);
1239 Dir->setInits(Exprs.Inits);
1240 Dir->setUpdates(Exprs.Updates);
1241 Dir->setFinals(Exprs.Finals);
1242 Dir->setPreInits(Exprs.PreInits);
1246 OMPTargetParallelForSimdDirective *
1247 OMPTargetParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1248 unsigned NumClauses,
1249 unsigned CollapsedNum,
1251 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective),
1252 alignof(OMPClause *));
1253 void *Mem = C.Allocate(
1254 Size + sizeof(OMPClause *) * NumClauses +
1256 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd));
1257 return new (Mem) OMPTargetParallelForSimdDirective(CollapsedNum, NumClauses);
1260 OMPTargetSimdDirective *
1261 OMPTargetSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
1262 SourceLocation EndLoc, unsigned CollapsedNum,
1263 ArrayRef<OMPClause *> Clauses,
1264 Stmt *AssociatedStmt, const HelperExprs &Exprs) {
1266 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *));
1267 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1269 numLoopChildren(CollapsedNum, OMPD_target_simd));
1270 OMPTargetSimdDirective *Dir = new (Mem)
1271 OMPTargetSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
1272 Dir->setClauses(Clauses);
1273 Dir->setAssociatedStmt(AssociatedStmt);
1274 Dir->setIterationVariable(Exprs.IterationVarRef);
1275 Dir->setLastIteration(Exprs.LastIteration);
1276 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1277 Dir->setPreCond(Exprs.PreCond);
1278 Dir->setCond(Exprs.Cond);
1279 Dir->setInit(Exprs.Init);
1280 Dir->setInc(Exprs.Inc);
1281 Dir->setCounters(Exprs.Counters);
1282 Dir->setPrivateCounters(Exprs.PrivateCounters);
1283 Dir->setInits(Exprs.Inits);
1284 Dir->setUpdates(Exprs.Updates);
1285 Dir->setFinals(Exprs.Finals);
1286 Dir->setPreInits(Exprs.PreInits);
1290 OMPTargetSimdDirective *
1291 OMPTargetSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1292 unsigned CollapsedNum, EmptyShell) {
1294 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *));
1295 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1297 numLoopChildren(CollapsedNum, OMPD_target_simd));
1298 return new (Mem) OMPTargetSimdDirective(CollapsedNum, NumClauses);
1301 OMPTeamsDistributeDirective *OMPTeamsDistributeDirective::Create(
1302 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1303 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1304 const HelperExprs &Exprs) {
1306 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *));
1307 void *Mem = C.Allocate(
1308 Size + sizeof(OMPClause *) * Clauses.size() +
1309 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute));
1310 OMPTeamsDistributeDirective *Dir = new (Mem) OMPTeamsDistributeDirective(
1311 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1312 Dir->setClauses(Clauses);
1313 Dir->setAssociatedStmt(AssociatedStmt);
1314 Dir->setIterationVariable(Exprs.IterationVarRef);
1315 Dir->setLastIteration(Exprs.LastIteration);
1316 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1317 Dir->setPreCond(Exprs.PreCond);
1318 Dir->setCond(Exprs.Cond);
1319 Dir->setInit(Exprs.Init);
1320 Dir->setInc(Exprs.Inc);
1321 Dir->setIsLastIterVariable(Exprs.IL);
1322 Dir->setLowerBoundVariable(Exprs.LB);
1323 Dir->setUpperBoundVariable(Exprs.UB);
1324 Dir->setStrideVariable(Exprs.ST);
1325 Dir->setEnsureUpperBound(Exprs.EUB);
1326 Dir->setNextLowerBound(Exprs.NLB);
1327 Dir->setNextUpperBound(Exprs.NUB);
1328 Dir->setNumIterations(Exprs.NumIterations);
1329 Dir->setCounters(Exprs.Counters);
1330 Dir->setPrivateCounters(Exprs.PrivateCounters);
1331 Dir->setInits(Exprs.Inits);
1332 Dir->setUpdates(Exprs.Updates);
1333 Dir->setFinals(Exprs.Finals);
1334 Dir->setPreInits(Exprs.PreInits);
1338 OMPTeamsDistributeDirective *
1339 OMPTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1340 unsigned NumClauses,
1341 unsigned CollapsedNum, EmptyShell) {
1343 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *));
1344 void *Mem = C.Allocate(
1345 Size + sizeof(OMPClause *) * NumClauses +
1346 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute));
1347 return new (Mem) OMPTeamsDistributeDirective(CollapsedNum, NumClauses);
1350 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::Create(
1351 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1352 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1353 const HelperExprs &Exprs) {
1354 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective),
1355 alignof(OMPClause *));
1357 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1359 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd));
1360 OMPTeamsDistributeSimdDirective *Dir =
1361 new (Mem) OMPTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum,
1363 Dir->setClauses(Clauses);
1364 Dir->setAssociatedStmt(AssociatedStmt);
1365 Dir->setIterationVariable(Exprs.IterationVarRef);
1366 Dir->setLastIteration(Exprs.LastIteration);
1367 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1368 Dir->setPreCond(Exprs.PreCond);
1369 Dir->setCond(Exprs.Cond);
1370 Dir->setInit(Exprs.Init);
1371 Dir->setInc(Exprs.Inc);
1372 Dir->setIsLastIterVariable(Exprs.IL);
1373 Dir->setLowerBoundVariable(Exprs.LB);
1374 Dir->setUpperBoundVariable(Exprs.UB);
1375 Dir->setStrideVariable(Exprs.ST);
1376 Dir->setEnsureUpperBound(Exprs.EUB);
1377 Dir->setNextLowerBound(Exprs.NLB);
1378 Dir->setNextUpperBound(Exprs.NUB);
1379 Dir->setNumIterations(Exprs.NumIterations);
1380 Dir->setCounters(Exprs.Counters);
1381 Dir->setPrivateCounters(Exprs.PrivateCounters);
1382 Dir->setInits(Exprs.Inits);
1383 Dir->setUpdates(Exprs.Updates);
1384 Dir->setFinals(Exprs.Finals);
1385 Dir->setPreInits(Exprs.PreInits);
1389 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::CreateEmpty(
1390 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
1392 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective),
1393 alignof(OMPClause *));
1395 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1397 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd));
1398 return new (Mem) OMPTeamsDistributeSimdDirective(CollapsedNum, NumClauses);
1401 OMPTeamsDistributeParallelForSimdDirective *
1402 OMPTeamsDistributeParallelForSimdDirective::Create(
1403 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1404 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1405 const HelperExprs &Exprs) {
1406 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective),
1407 alignof(OMPClause *));
1409 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1411 numLoopChildren(CollapsedNum,
1412 OMPD_teams_distribute_parallel_for_simd));
1413 OMPTeamsDistributeParallelForSimdDirective *Dir = new (Mem)
1414 OMPTeamsDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum,
1416 Dir->setClauses(Clauses);
1417 Dir->setAssociatedStmt(AssociatedStmt);
1418 Dir->setIterationVariable(Exprs.IterationVarRef);
1419 Dir->setLastIteration(Exprs.LastIteration);
1420 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1421 Dir->setPreCond(Exprs.PreCond);
1422 Dir->setCond(Exprs.Cond);
1423 Dir->setInit(Exprs.Init);
1424 Dir->setInc(Exprs.Inc);
1425 Dir->setIsLastIterVariable(Exprs.IL);
1426 Dir->setLowerBoundVariable(Exprs.LB);
1427 Dir->setUpperBoundVariable(Exprs.UB);
1428 Dir->setStrideVariable(Exprs.ST);
1429 Dir->setEnsureUpperBound(Exprs.EUB);
1430 Dir->setNextLowerBound(Exprs.NLB);
1431 Dir->setNextUpperBound(Exprs.NUB);
1432 Dir->setNumIterations(Exprs.NumIterations);
1433 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1434 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1435 Dir->setDistInc(Exprs.DistInc);
1436 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1437 Dir->setCounters(Exprs.Counters);
1438 Dir->setPrivateCounters(Exprs.PrivateCounters);
1439 Dir->setInits(Exprs.Inits);
1440 Dir->setUpdates(Exprs.Updates);
1441 Dir->setFinals(Exprs.Finals);
1442 Dir->setPreInits(Exprs.PreInits);
1443 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1444 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1445 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1446 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1447 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1448 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1449 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1453 OMPTeamsDistributeParallelForSimdDirective *
1454 OMPTeamsDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1455 unsigned NumClauses,
1456 unsigned CollapsedNum,
1458 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective),
1459 alignof(OMPClause *));
1461 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1463 numLoopChildren(CollapsedNum,
1464 OMPD_teams_distribute_parallel_for_simd));
1466 OMPTeamsDistributeParallelForSimdDirective(CollapsedNum, NumClauses);
1469 OMPTeamsDistributeParallelForDirective *
1470 OMPTeamsDistributeParallelForDirective::Create(
1471 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1472 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1473 const HelperExprs &Exprs) {
1474 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective),
1475 alignof(OMPClause *));
1476 void *Mem = C.Allocate(
1477 Size + sizeof(OMPClause *) * Clauses.size() +
1479 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for));
1480 OMPTeamsDistributeParallelForDirective *Dir = new (Mem)
1481 OMPTeamsDistributeParallelForDirective(StartLoc, EndLoc, CollapsedNum,
1483 Dir->setClauses(Clauses);
1484 Dir->setAssociatedStmt(AssociatedStmt);
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->setPrevLowerBoundVariable(Exprs.PrevLB);
1501 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1502 Dir->setDistInc(Exprs.DistInc);
1503 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1504 Dir->setCounters(Exprs.Counters);
1505 Dir->setPrivateCounters(Exprs.PrivateCounters);
1506 Dir->setInits(Exprs.Inits);
1507 Dir->setUpdates(Exprs.Updates);
1508 Dir->setFinals(Exprs.Finals);
1509 Dir->setPreInits(Exprs.PreInits);
1510 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1511 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1512 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1513 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1514 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1515 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1516 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1520 OMPTeamsDistributeParallelForDirective *
1521 OMPTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1522 unsigned NumClauses,
1523 unsigned CollapsedNum,
1525 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective),
1526 alignof(OMPClause *));
1527 void *Mem = C.Allocate(
1528 Size + sizeof(OMPClause *) * NumClauses +
1530 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for));
1532 OMPTeamsDistributeParallelForDirective(CollapsedNum, NumClauses);
1535 OMPTargetTeamsDirective *OMPTargetTeamsDirective::Create(
1536 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1537 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1539 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *));
1541 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
1542 OMPTargetTeamsDirective *Dir =
1543 new (Mem) OMPTargetTeamsDirective(StartLoc, EndLoc, Clauses.size());
1544 Dir->setClauses(Clauses);
1545 Dir->setAssociatedStmt(AssociatedStmt);
1549 OMPTargetTeamsDirective *
1550 OMPTargetTeamsDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1553 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *));
1555 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
1556 return new (Mem) OMPTargetTeamsDirective(NumClauses);
1559 OMPTargetTeamsDistributeDirective *OMPTargetTeamsDistributeDirective::Create(
1560 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1561 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1562 const HelperExprs &Exprs) {
1563 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective),
1564 alignof(OMPClause *));
1565 void *Mem = C.Allocate(
1566 Size + sizeof(OMPClause *) * Clauses.size() +
1568 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute));
1569 OMPTargetTeamsDistributeDirective *Dir =
1570 new (Mem) OMPTargetTeamsDistributeDirective(StartLoc, EndLoc, CollapsedNum,
1572 Dir->setClauses(Clauses);
1573 Dir->setAssociatedStmt(AssociatedStmt);
1574 Dir->setIterationVariable(Exprs.IterationVarRef);
1575 Dir->setLastIteration(Exprs.LastIteration);
1576 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1577 Dir->setPreCond(Exprs.PreCond);
1578 Dir->setCond(Exprs.Cond);
1579 Dir->setInit(Exprs.Init);
1580 Dir->setInc(Exprs.Inc);
1581 Dir->setIsLastIterVariable(Exprs.IL);
1582 Dir->setLowerBoundVariable(Exprs.LB);
1583 Dir->setUpperBoundVariable(Exprs.UB);
1584 Dir->setStrideVariable(Exprs.ST);
1585 Dir->setEnsureUpperBound(Exprs.EUB);
1586 Dir->setNextLowerBound(Exprs.NLB);
1587 Dir->setNextUpperBound(Exprs.NUB);
1588 Dir->setNumIterations(Exprs.NumIterations);
1589 Dir->setCounters(Exprs.Counters);
1590 Dir->setPrivateCounters(Exprs.PrivateCounters);
1591 Dir->setInits(Exprs.Inits);
1592 Dir->setUpdates(Exprs.Updates);
1593 Dir->setFinals(Exprs.Finals);
1594 Dir->setPreInits(Exprs.PreInits);
1598 OMPTargetTeamsDistributeDirective *
1599 OMPTargetTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1600 unsigned NumClauses,
1601 unsigned CollapsedNum,
1603 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective),
1604 alignof(OMPClause *));
1605 void *Mem = C.Allocate(
1606 Size + sizeof(OMPClause *) * NumClauses +
1608 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute));
1609 return new (Mem) OMPTargetTeamsDistributeDirective(CollapsedNum, NumClauses);
1612 OMPTargetTeamsDistributeParallelForDirective *
1613 OMPTargetTeamsDistributeParallelForDirective::Create(
1614 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1615 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1616 const HelperExprs &Exprs) {
1618 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective),
1619 alignof(OMPClause *));
1620 void *Mem = C.Allocate(
1621 Size + sizeof(OMPClause *) * Clauses.size() +
1623 numLoopChildren(CollapsedNum,
1624 OMPD_target_teams_distribute_parallel_for));
1625 OMPTargetTeamsDistributeParallelForDirective *Dir =
1626 new (Mem) OMPTargetTeamsDistributeParallelForDirective(
1627 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1628 Dir->setClauses(Clauses);
1629 Dir->setAssociatedStmt(AssociatedStmt);
1630 Dir->setIterationVariable(Exprs.IterationVarRef);
1631 Dir->setLastIteration(Exprs.LastIteration);
1632 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1633 Dir->setPreCond(Exprs.PreCond);
1634 Dir->setCond(Exprs.Cond);
1635 Dir->setInit(Exprs.Init);
1636 Dir->setInc(Exprs.Inc);
1637 Dir->setIsLastIterVariable(Exprs.IL);
1638 Dir->setLowerBoundVariable(Exprs.LB);
1639 Dir->setUpperBoundVariable(Exprs.UB);
1640 Dir->setStrideVariable(Exprs.ST);
1641 Dir->setEnsureUpperBound(Exprs.EUB);
1642 Dir->setNextLowerBound(Exprs.NLB);
1643 Dir->setNextUpperBound(Exprs.NUB);
1644 Dir->setNumIterations(Exprs.NumIterations);
1645 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1646 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1647 Dir->setDistInc(Exprs.DistInc);
1648 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1649 Dir->setCounters(Exprs.Counters);
1650 Dir->setPrivateCounters(Exprs.PrivateCounters);
1651 Dir->setInits(Exprs.Inits);
1652 Dir->setUpdates(Exprs.Updates);
1653 Dir->setFinals(Exprs.Finals);
1654 Dir->setPreInits(Exprs.PreInits);
1655 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1656 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1657 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1658 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1659 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1660 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1661 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1665 OMPTargetTeamsDistributeParallelForDirective *
1666 OMPTargetTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1667 unsigned NumClauses,
1668 unsigned CollapsedNum,
1671 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective),
1672 alignof(OMPClause *));
1673 void *Mem = C.Allocate(
1674 Size + sizeof(OMPClause *) * NumClauses +
1676 numLoopChildren(CollapsedNum,
1677 OMPD_target_teams_distribute_parallel_for));
1679 OMPTargetTeamsDistributeParallelForDirective(CollapsedNum, NumClauses);
1682 OMPTargetTeamsDistributeParallelForSimdDirective *
1683 OMPTargetTeamsDistributeParallelForSimdDirective::Create(
1684 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1685 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1686 const HelperExprs &Exprs) {
1688 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective),
1689 alignof(OMPClause *));
1690 void *Mem = C.Allocate(
1691 Size + sizeof(OMPClause *) * Clauses.size() +
1693 numLoopChildren(CollapsedNum,
1694 OMPD_target_teams_distribute_parallel_for_simd));
1695 OMPTargetTeamsDistributeParallelForSimdDirective *Dir =
1696 new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective(
1697 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1698 Dir->setClauses(Clauses);
1699 Dir->setAssociatedStmt(AssociatedStmt);
1700 Dir->setIterationVariable(Exprs.IterationVarRef);
1701 Dir->setLastIteration(Exprs.LastIteration);
1702 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1703 Dir->setPreCond(Exprs.PreCond);
1704 Dir->setCond(Exprs.Cond);
1705 Dir->setInit(Exprs.Init);
1706 Dir->setInc(Exprs.Inc);
1707 Dir->setIsLastIterVariable(Exprs.IL);
1708 Dir->setLowerBoundVariable(Exprs.LB);
1709 Dir->setUpperBoundVariable(Exprs.UB);
1710 Dir->setStrideVariable(Exprs.ST);
1711 Dir->setEnsureUpperBound(Exprs.EUB);
1712 Dir->setNextLowerBound(Exprs.NLB);
1713 Dir->setNextUpperBound(Exprs.NUB);
1714 Dir->setNumIterations(Exprs.NumIterations);
1715 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1716 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1717 Dir->setDistInc(Exprs.DistInc);
1718 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1719 Dir->setCounters(Exprs.Counters);
1720 Dir->setPrivateCounters(Exprs.PrivateCounters);
1721 Dir->setInits(Exprs.Inits);
1722 Dir->setUpdates(Exprs.Updates);
1723 Dir->setFinals(Exprs.Finals);
1724 Dir->setPreInits(Exprs.PreInits);
1725 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1726 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1727 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1728 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1729 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1730 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1731 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1735 OMPTargetTeamsDistributeParallelForSimdDirective *
1736 OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty(
1737 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
1740 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective),
1741 alignof(OMPClause *));
1742 void *Mem = C.Allocate(
1743 Size + sizeof(OMPClause *) * NumClauses +
1745 numLoopChildren(CollapsedNum,
1746 OMPD_target_teams_distribute_parallel_for_simd));
1747 return new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective(
1748 CollapsedNum, NumClauses);
1751 OMPTargetTeamsDistributeSimdDirective *
1752 OMPTargetTeamsDistributeSimdDirective::Create(
1753 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1754 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1755 const HelperExprs &Exprs) {
1756 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective),
1757 alignof(OMPClause *));
1758 void *Mem = C.Allocate(
1759 Size + sizeof(OMPClause *) * Clauses.size() +
1761 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd));
1762 OMPTargetTeamsDistributeSimdDirective *Dir = new (Mem)
1763 OMPTargetTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum,
1765 Dir->setClauses(Clauses);
1766 Dir->setAssociatedStmt(AssociatedStmt);
1767 Dir->setIterationVariable(Exprs.IterationVarRef);
1768 Dir->setLastIteration(Exprs.LastIteration);
1769 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1770 Dir->setPreCond(Exprs.PreCond);
1771 Dir->setCond(Exprs.Cond);
1772 Dir->setInit(Exprs.Init);
1773 Dir->setInc(Exprs.Inc);
1774 Dir->setIsLastIterVariable(Exprs.IL);
1775 Dir->setLowerBoundVariable(Exprs.LB);
1776 Dir->setUpperBoundVariable(Exprs.UB);
1777 Dir->setStrideVariable(Exprs.ST);
1778 Dir->setEnsureUpperBound(Exprs.EUB);
1779 Dir->setNextLowerBound(Exprs.NLB);
1780 Dir->setNextUpperBound(Exprs.NUB);
1781 Dir->setNumIterations(Exprs.NumIterations);
1782 Dir->setCounters(Exprs.Counters);
1783 Dir->setPrivateCounters(Exprs.PrivateCounters);
1784 Dir->setInits(Exprs.Inits);
1785 Dir->setUpdates(Exprs.Updates);
1786 Dir->setFinals(Exprs.Finals);
1787 Dir->setPreInits(Exprs.PreInits);
1791 OMPTargetTeamsDistributeSimdDirective *
1792 OMPTargetTeamsDistributeSimdDirective::CreateEmpty(const ASTContext &C,
1793 unsigned NumClauses,
1794 unsigned CollapsedNum,
1796 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective),
1797 alignof(OMPClause *));
1798 void *Mem = C.Allocate(
1799 Size + sizeof(OMPClause *) * NumClauses +
1801 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd));
1803 OMPTargetTeamsDistributeSimdDirective(CollapsedNum, NumClauses);