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(
526 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
527 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
528 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) +
529 sizeof(OMPClause *) * Clauses.size(),
531 void *Mem = C.Allocate(Size + sizeof(Stmt *));
532 OMPTaskgroupDirective *Dir =
533 new (Mem) OMPTaskgroupDirective(StartLoc, EndLoc, Clauses.size());
534 Dir->setAssociatedStmt(AssociatedStmt);
535 Dir->setClauses(Clauses);
539 OMPTaskgroupDirective *OMPTaskgroupDirective::CreateEmpty(const ASTContext &C,
542 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) +
543 sizeof(OMPClause *) * NumClauses,
545 void *Mem = C.Allocate(Size + sizeof(Stmt *));
546 return new (Mem) OMPTaskgroupDirective(NumClauses);
549 OMPCancellationPointDirective *OMPCancellationPointDirective::Create(
550 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
551 OpenMPDirectiveKind CancelRegion) {
553 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *));
554 void *Mem = C.Allocate(Size);
555 OMPCancellationPointDirective *Dir =
556 new (Mem) OMPCancellationPointDirective(StartLoc, EndLoc);
557 Dir->setCancelRegion(CancelRegion);
561 OMPCancellationPointDirective *
562 OMPCancellationPointDirective::CreateEmpty(const ASTContext &C, EmptyShell) {
564 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *));
565 void *Mem = C.Allocate(Size);
566 return new (Mem) OMPCancellationPointDirective();
570 OMPCancelDirective::Create(const ASTContext &C, SourceLocation StartLoc,
571 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
572 OpenMPDirectiveKind CancelRegion) {
573 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) +
574 sizeof(OMPClause *) * Clauses.size(),
576 void *Mem = C.Allocate(Size);
577 OMPCancelDirective *Dir =
578 new (Mem) OMPCancelDirective(StartLoc, EndLoc, Clauses.size());
579 Dir->setClauses(Clauses);
580 Dir->setCancelRegion(CancelRegion);
584 OMPCancelDirective *OMPCancelDirective::CreateEmpty(const ASTContext &C,
587 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) +
588 sizeof(OMPClause *) * NumClauses,
590 void *Mem = C.Allocate(Size);
591 return new (Mem) OMPCancelDirective(NumClauses);
594 OMPFlushDirective *OMPFlushDirective::Create(const ASTContext &C,
595 SourceLocation StartLoc,
596 SourceLocation EndLoc,
597 ArrayRef<OMPClause *> Clauses) {
599 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *));
600 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size());
601 OMPFlushDirective *Dir =
602 new (Mem) OMPFlushDirective(StartLoc, EndLoc, Clauses.size());
603 Dir->setClauses(Clauses);
607 OMPFlushDirective *OMPFlushDirective::CreateEmpty(const ASTContext &C,
611 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *));
612 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses);
613 return new (Mem) OMPFlushDirective(NumClauses);
616 OMPOrderedDirective *OMPOrderedDirective::Create(const ASTContext &C,
617 SourceLocation StartLoc,
618 SourceLocation EndLoc,
619 ArrayRef<OMPClause *> Clauses,
620 Stmt *AssociatedStmt) {
622 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *));
624 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * Clauses.size());
625 OMPOrderedDirective *Dir =
626 new (Mem) OMPOrderedDirective(StartLoc, EndLoc, Clauses.size());
627 Dir->setClauses(Clauses);
628 Dir->setAssociatedStmt(AssociatedStmt);
632 OMPOrderedDirective *OMPOrderedDirective::CreateEmpty(const ASTContext &C,
636 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *));
638 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * NumClauses);
639 return new (Mem) OMPOrderedDirective(NumClauses);
642 OMPAtomicDirective *OMPAtomicDirective::Create(
643 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
644 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *X, Expr *V,
645 Expr *E, Expr *UE, bool IsXLHSInRHSPart, bool IsPostfixUpdate) {
647 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *));
648 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
650 OMPAtomicDirective *Dir =
651 new (Mem) OMPAtomicDirective(StartLoc, EndLoc, Clauses.size());
652 Dir->setClauses(Clauses);
653 Dir->setAssociatedStmt(AssociatedStmt);
657 Dir->setUpdateExpr(UE);
658 Dir->IsXLHSInRHSPart = IsXLHSInRHSPart;
659 Dir->IsPostfixUpdate = IsPostfixUpdate;
663 OMPAtomicDirective *OMPAtomicDirective::CreateEmpty(const ASTContext &C,
667 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *));
669 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 5 * sizeof(Stmt *));
670 return new (Mem) OMPAtomicDirective(NumClauses);
673 OMPTargetDirective *OMPTargetDirective::Create(const ASTContext &C,
674 SourceLocation StartLoc,
675 SourceLocation EndLoc,
676 ArrayRef<OMPClause *> Clauses,
677 Stmt *AssociatedStmt) {
679 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *));
681 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
682 OMPTargetDirective *Dir =
683 new (Mem) OMPTargetDirective(StartLoc, EndLoc, Clauses.size());
684 Dir->setClauses(Clauses);
685 Dir->setAssociatedStmt(AssociatedStmt);
689 OMPTargetDirective *OMPTargetDirective::CreateEmpty(const ASTContext &C,
693 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *));
695 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
696 return new (Mem) OMPTargetDirective(NumClauses);
699 OMPTargetParallelDirective *OMPTargetParallelDirective::Create(
700 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
701 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
703 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *));
705 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
706 OMPTargetParallelDirective *Dir =
707 new (Mem) OMPTargetParallelDirective(StartLoc, EndLoc, Clauses.size());
708 Dir->setClauses(Clauses);
709 Dir->setAssociatedStmt(AssociatedStmt);
713 OMPTargetParallelDirective *
714 OMPTargetParallelDirective::CreateEmpty(const ASTContext &C,
715 unsigned NumClauses, EmptyShell) {
717 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *));
719 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
720 return new (Mem) OMPTargetParallelDirective(NumClauses);
723 OMPTargetParallelForDirective *OMPTargetParallelForDirective::Create(
724 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
725 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
726 const HelperExprs &Exprs, bool HasCancel) {
727 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective),
728 alignof(OMPClause *));
729 void *Mem = C.Allocate(
730 Size + sizeof(OMPClause *) * Clauses.size() +
731 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for));
732 OMPTargetParallelForDirective *Dir = new (Mem) OMPTargetParallelForDirective(
733 StartLoc, EndLoc, CollapsedNum, Clauses.size());
734 Dir->setClauses(Clauses);
735 Dir->setAssociatedStmt(AssociatedStmt);
736 Dir->setIterationVariable(Exprs.IterationVarRef);
737 Dir->setLastIteration(Exprs.LastIteration);
738 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
739 Dir->setPreCond(Exprs.PreCond);
740 Dir->setCond(Exprs.Cond);
741 Dir->setInit(Exprs.Init);
742 Dir->setInc(Exprs.Inc);
743 Dir->setIsLastIterVariable(Exprs.IL);
744 Dir->setLowerBoundVariable(Exprs.LB);
745 Dir->setUpperBoundVariable(Exprs.UB);
746 Dir->setStrideVariable(Exprs.ST);
747 Dir->setEnsureUpperBound(Exprs.EUB);
748 Dir->setNextLowerBound(Exprs.NLB);
749 Dir->setNextUpperBound(Exprs.NUB);
750 Dir->setNumIterations(Exprs.NumIterations);
751 Dir->setCounters(Exprs.Counters);
752 Dir->setPrivateCounters(Exprs.PrivateCounters);
753 Dir->setInits(Exprs.Inits);
754 Dir->setUpdates(Exprs.Updates);
755 Dir->setFinals(Exprs.Finals);
756 Dir->setPreInits(Exprs.PreInits);
757 Dir->setHasCancel(HasCancel);
761 OMPTargetParallelForDirective *
762 OMPTargetParallelForDirective::CreateEmpty(const ASTContext &C,
764 unsigned CollapsedNum, EmptyShell) {
765 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective),
766 alignof(OMPClause *));
767 void *Mem = C.Allocate(
768 Size + sizeof(OMPClause *) * NumClauses +
769 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for));
770 return new (Mem) OMPTargetParallelForDirective(CollapsedNum, NumClauses);
773 OMPTargetDataDirective *OMPTargetDataDirective::Create(
774 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
775 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
776 void *Mem = C.Allocate(
777 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) +
778 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
779 OMPTargetDataDirective *Dir =
780 new (Mem) OMPTargetDataDirective(StartLoc, EndLoc, Clauses.size());
781 Dir->setClauses(Clauses);
782 Dir->setAssociatedStmt(AssociatedStmt);
786 OMPTargetDataDirective *OMPTargetDataDirective::CreateEmpty(const ASTContext &C,
789 void *Mem = C.Allocate(
790 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) +
791 sizeof(OMPClause *) * N + sizeof(Stmt *));
792 return new (Mem) OMPTargetDataDirective(N);
795 OMPTargetEnterDataDirective *OMPTargetEnterDataDirective::Create(
796 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
797 ArrayRef<OMPClause *> Clauses) {
798 void *Mem = C.Allocate(
799 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) +
800 sizeof(OMPClause *) * Clauses.size());
801 OMPTargetEnterDataDirective *Dir =
802 new (Mem) OMPTargetEnterDataDirective(StartLoc, EndLoc, Clauses.size());
803 Dir->setClauses(Clauses);
807 OMPTargetEnterDataDirective *
808 OMPTargetEnterDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
810 void *Mem = C.Allocate(
811 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) +
812 sizeof(OMPClause *) * N);
813 return new (Mem) OMPTargetEnterDataDirective(N);
816 OMPTargetExitDataDirective *
817 OMPTargetExitDataDirective::Create(const ASTContext &C, SourceLocation StartLoc,
818 SourceLocation EndLoc,
819 ArrayRef<OMPClause *> Clauses) {
820 void *Mem = C.Allocate(
821 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) +
822 sizeof(OMPClause *) * Clauses.size());
823 OMPTargetExitDataDirective *Dir =
824 new (Mem) OMPTargetExitDataDirective(StartLoc, EndLoc, Clauses.size());
825 Dir->setClauses(Clauses);
829 OMPTargetExitDataDirective *
830 OMPTargetExitDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
832 void *Mem = C.Allocate(
833 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) +
834 sizeof(OMPClause *) * N);
835 return new (Mem) OMPTargetExitDataDirective(N);
838 OMPTeamsDirective *OMPTeamsDirective::Create(const ASTContext &C,
839 SourceLocation StartLoc,
840 SourceLocation EndLoc,
841 ArrayRef<OMPClause *> Clauses,
842 Stmt *AssociatedStmt) {
844 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *));
846 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
847 OMPTeamsDirective *Dir =
848 new (Mem) OMPTeamsDirective(StartLoc, EndLoc, Clauses.size());
849 Dir->setClauses(Clauses);
850 Dir->setAssociatedStmt(AssociatedStmt);
854 OMPTeamsDirective *OMPTeamsDirective::CreateEmpty(const ASTContext &C,
858 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *));
860 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
861 return new (Mem) OMPTeamsDirective(NumClauses);
864 OMPTaskLoopDirective *OMPTaskLoopDirective::Create(
865 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
866 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
867 const HelperExprs &Exprs) {
869 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *));
871 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
872 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop));
873 OMPTaskLoopDirective *Dir = new (Mem)
874 OMPTaskLoopDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
875 Dir->setClauses(Clauses);
876 Dir->setAssociatedStmt(AssociatedStmt);
877 Dir->setIterationVariable(Exprs.IterationVarRef);
878 Dir->setLastIteration(Exprs.LastIteration);
879 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
880 Dir->setPreCond(Exprs.PreCond);
881 Dir->setCond(Exprs.Cond);
882 Dir->setInit(Exprs.Init);
883 Dir->setInc(Exprs.Inc);
884 Dir->setIsLastIterVariable(Exprs.IL);
885 Dir->setLowerBoundVariable(Exprs.LB);
886 Dir->setUpperBoundVariable(Exprs.UB);
887 Dir->setStrideVariable(Exprs.ST);
888 Dir->setEnsureUpperBound(Exprs.EUB);
889 Dir->setNextLowerBound(Exprs.NLB);
890 Dir->setNextUpperBound(Exprs.NUB);
891 Dir->setNumIterations(Exprs.NumIterations);
892 Dir->setCounters(Exprs.Counters);
893 Dir->setPrivateCounters(Exprs.PrivateCounters);
894 Dir->setInits(Exprs.Inits);
895 Dir->setUpdates(Exprs.Updates);
896 Dir->setFinals(Exprs.Finals);
897 Dir->setPreInits(Exprs.PreInits);
901 OMPTaskLoopDirective *OMPTaskLoopDirective::CreateEmpty(const ASTContext &C,
903 unsigned CollapsedNum,
906 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *));
908 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
909 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop));
910 return new (Mem) OMPTaskLoopDirective(CollapsedNum, NumClauses);
913 OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create(
914 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
915 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
916 const HelperExprs &Exprs) {
918 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *));
919 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
921 numLoopChildren(CollapsedNum, OMPD_taskloop_simd));
922 OMPTaskLoopSimdDirective *Dir = new (Mem)
923 OMPTaskLoopSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
924 Dir->setClauses(Clauses);
925 Dir->setAssociatedStmt(AssociatedStmt);
926 Dir->setIterationVariable(Exprs.IterationVarRef);
927 Dir->setLastIteration(Exprs.LastIteration);
928 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
929 Dir->setPreCond(Exprs.PreCond);
930 Dir->setCond(Exprs.Cond);
931 Dir->setInit(Exprs.Init);
932 Dir->setInc(Exprs.Inc);
933 Dir->setIsLastIterVariable(Exprs.IL);
934 Dir->setLowerBoundVariable(Exprs.LB);
935 Dir->setUpperBoundVariable(Exprs.UB);
936 Dir->setStrideVariable(Exprs.ST);
937 Dir->setEnsureUpperBound(Exprs.EUB);
938 Dir->setNextLowerBound(Exprs.NLB);
939 Dir->setNextUpperBound(Exprs.NUB);
940 Dir->setNumIterations(Exprs.NumIterations);
941 Dir->setCounters(Exprs.Counters);
942 Dir->setPrivateCounters(Exprs.PrivateCounters);
943 Dir->setInits(Exprs.Inits);
944 Dir->setUpdates(Exprs.Updates);
945 Dir->setFinals(Exprs.Finals);
946 Dir->setPreInits(Exprs.PreInits);
950 OMPTaskLoopSimdDirective *
951 OMPTaskLoopSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
952 unsigned CollapsedNum, EmptyShell) {
954 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *));
955 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
957 numLoopChildren(CollapsedNum, OMPD_taskloop_simd));
958 return new (Mem) OMPTaskLoopSimdDirective(CollapsedNum, NumClauses);
961 OMPDistributeDirective *OMPDistributeDirective::Create(
962 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
963 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
964 const HelperExprs &Exprs) {
966 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *));
967 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
969 numLoopChildren(CollapsedNum, OMPD_distribute));
970 OMPDistributeDirective *Dir = new (Mem)
971 OMPDistributeDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
972 Dir->setClauses(Clauses);
973 Dir->setAssociatedStmt(AssociatedStmt);
974 Dir->setIterationVariable(Exprs.IterationVarRef);
975 Dir->setLastIteration(Exprs.LastIteration);
976 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
977 Dir->setPreCond(Exprs.PreCond);
978 Dir->setCond(Exprs.Cond);
979 Dir->setInit(Exprs.Init);
980 Dir->setInc(Exprs.Inc);
981 Dir->setIsLastIterVariable(Exprs.IL);
982 Dir->setLowerBoundVariable(Exprs.LB);
983 Dir->setUpperBoundVariable(Exprs.UB);
984 Dir->setStrideVariable(Exprs.ST);
985 Dir->setEnsureUpperBound(Exprs.EUB);
986 Dir->setNextLowerBound(Exprs.NLB);
987 Dir->setNextUpperBound(Exprs.NUB);
988 Dir->setNumIterations(Exprs.NumIterations);
989 Dir->setCounters(Exprs.Counters);
990 Dir->setPrivateCounters(Exprs.PrivateCounters);
991 Dir->setInits(Exprs.Inits);
992 Dir->setUpdates(Exprs.Updates);
993 Dir->setFinals(Exprs.Finals);
994 Dir->setPreInits(Exprs.PreInits);
998 OMPDistributeDirective *
999 OMPDistributeDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1000 unsigned CollapsedNum, EmptyShell) {
1002 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *));
1003 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1005 numLoopChildren(CollapsedNum, OMPD_distribute));
1006 return new (Mem) OMPDistributeDirective(CollapsedNum, NumClauses);
1009 OMPTargetUpdateDirective *
1010 OMPTargetUpdateDirective::Create(const ASTContext &C, SourceLocation StartLoc,
1011 SourceLocation EndLoc,
1012 ArrayRef<OMPClause *> Clauses) {
1014 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *));
1015 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size());
1016 OMPTargetUpdateDirective *Dir =
1017 new (Mem) OMPTargetUpdateDirective(StartLoc, EndLoc, Clauses.size());
1018 Dir->setClauses(Clauses);
1022 OMPTargetUpdateDirective *
1023 OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1026 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *));
1027 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses);
1028 return new (Mem) OMPTargetUpdateDirective(NumClauses);
1031 OMPDistributeParallelForDirective *OMPDistributeParallelForDirective::Create(
1032 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1033 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1034 const HelperExprs &Exprs) {
1035 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective),
1036 alignof(OMPClause *));
1037 void *Mem = C.Allocate(
1038 Size + sizeof(OMPClause *) * Clauses.size() +
1040 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for));
1041 OMPDistributeParallelForDirective *Dir =
1042 new (Mem) OMPDistributeParallelForDirective(StartLoc, EndLoc,
1043 CollapsedNum, Clauses.size());
1044 Dir->setClauses(Clauses);
1045 Dir->setAssociatedStmt(AssociatedStmt);
1046 Dir->setIterationVariable(Exprs.IterationVarRef);
1047 Dir->setLastIteration(Exprs.LastIteration);
1048 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1049 Dir->setPreCond(Exprs.PreCond);
1050 Dir->setCond(Exprs.Cond);
1051 Dir->setInit(Exprs.Init);
1052 Dir->setInc(Exprs.Inc);
1053 Dir->setIsLastIterVariable(Exprs.IL);
1054 Dir->setLowerBoundVariable(Exprs.LB);
1055 Dir->setUpperBoundVariable(Exprs.UB);
1056 Dir->setStrideVariable(Exprs.ST);
1057 Dir->setEnsureUpperBound(Exprs.EUB);
1058 Dir->setNextLowerBound(Exprs.NLB);
1059 Dir->setNextUpperBound(Exprs.NUB);
1060 Dir->setNumIterations(Exprs.NumIterations);
1061 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1062 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1063 Dir->setDistInc(Exprs.DistInc);
1064 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1065 Dir->setCounters(Exprs.Counters);
1066 Dir->setPrivateCounters(Exprs.PrivateCounters);
1067 Dir->setInits(Exprs.Inits);
1068 Dir->setUpdates(Exprs.Updates);
1069 Dir->setFinals(Exprs.Finals);
1070 Dir->setPreInits(Exprs.PreInits);
1071 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1072 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1073 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1074 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1075 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1076 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1077 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1081 OMPDistributeParallelForDirective *
1082 OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1083 unsigned NumClauses,
1084 unsigned CollapsedNum,
1086 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective),
1087 alignof(OMPClause *));
1088 void *Mem = C.Allocate(
1089 Size + sizeof(OMPClause *) * NumClauses +
1091 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for));
1092 return new (Mem) OMPDistributeParallelForDirective(CollapsedNum, NumClauses);
1095 OMPDistributeParallelForSimdDirective *
1096 OMPDistributeParallelForSimdDirective::Create(
1097 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1098 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1099 const HelperExprs &Exprs) {
1100 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective),
1101 alignof(OMPClause *));
1102 void *Mem = C.Allocate(
1103 Size + sizeof(OMPClause *) * Clauses.size() +
1105 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd));
1106 OMPDistributeParallelForSimdDirective *Dir = new (Mem)
1107 OMPDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum,
1109 Dir->setClauses(Clauses);
1110 Dir->setAssociatedStmt(AssociatedStmt);
1111 Dir->setIterationVariable(Exprs.IterationVarRef);
1112 Dir->setLastIteration(Exprs.LastIteration);
1113 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1114 Dir->setPreCond(Exprs.PreCond);
1115 Dir->setCond(Exprs.Cond);
1116 Dir->setInit(Exprs.Init);
1117 Dir->setInc(Exprs.Inc);
1118 Dir->setIsLastIterVariable(Exprs.IL);
1119 Dir->setLowerBoundVariable(Exprs.LB);
1120 Dir->setUpperBoundVariable(Exprs.UB);
1121 Dir->setStrideVariable(Exprs.ST);
1122 Dir->setEnsureUpperBound(Exprs.EUB);
1123 Dir->setNextLowerBound(Exprs.NLB);
1124 Dir->setNextUpperBound(Exprs.NUB);
1125 Dir->setNumIterations(Exprs.NumIterations);
1126 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1127 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1128 Dir->setDistInc(Exprs.DistInc);
1129 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1130 Dir->setCounters(Exprs.Counters);
1131 Dir->setPrivateCounters(Exprs.PrivateCounters);
1132 Dir->setInits(Exprs.Inits);
1133 Dir->setUpdates(Exprs.Updates);
1134 Dir->setFinals(Exprs.Finals);
1135 Dir->setPreInits(Exprs.PreInits);
1136 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1137 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1138 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1139 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1140 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1141 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1142 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1146 OMPDistributeParallelForSimdDirective *
1147 OMPDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1148 unsigned NumClauses,
1149 unsigned CollapsedNum,
1151 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective),
1152 alignof(OMPClause *));
1153 void *Mem = C.Allocate(
1154 Size + sizeof(OMPClause *) * NumClauses +
1156 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd));
1158 OMPDistributeParallelForSimdDirective(CollapsedNum, NumClauses);
1161 OMPDistributeSimdDirective *OMPDistributeSimdDirective::Create(
1162 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1163 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1164 const HelperExprs &Exprs) {
1166 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *));
1167 void *Mem = C.Allocate(
1168 Size + sizeof(OMPClause *) * Clauses.size() +
1170 numLoopChildren(CollapsedNum, OMPD_distribute_simd));
1171 OMPDistributeSimdDirective *Dir = new (Mem) OMPDistributeSimdDirective(
1172 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1173 Dir->setClauses(Clauses);
1174 Dir->setAssociatedStmt(AssociatedStmt);
1175 Dir->setIterationVariable(Exprs.IterationVarRef);
1176 Dir->setLastIteration(Exprs.LastIteration);
1177 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1178 Dir->setPreCond(Exprs.PreCond);
1179 Dir->setCond(Exprs.Cond);
1180 Dir->setInit(Exprs.Init);
1181 Dir->setInc(Exprs.Inc);
1182 Dir->setIsLastIterVariable(Exprs.IL);
1183 Dir->setLowerBoundVariable(Exprs.LB);
1184 Dir->setUpperBoundVariable(Exprs.UB);
1185 Dir->setStrideVariable(Exprs.ST);
1186 Dir->setEnsureUpperBound(Exprs.EUB);
1187 Dir->setNextLowerBound(Exprs.NLB);
1188 Dir->setNextUpperBound(Exprs.NUB);
1189 Dir->setNumIterations(Exprs.NumIterations);
1190 Dir->setCounters(Exprs.Counters);
1191 Dir->setPrivateCounters(Exprs.PrivateCounters);
1192 Dir->setInits(Exprs.Inits);
1193 Dir->setUpdates(Exprs.Updates);
1194 Dir->setFinals(Exprs.Finals);
1195 Dir->setPreInits(Exprs.PreInits);
1199 OMPDistributeSimdDirective *
1200 OMPDistributeSimdDirective::CreateEmpty(const ASTContext &C,
1201 unsigned NumClauses,
1202 unsigned CollapsedNum, EmptyShell) {
1204 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *));
1205 void *Mem = C.Allocate(
1206 Size + sizeof(OMPClause *) * NumClauses +
1208 numLoopChildren(CollapsedNum, OMPD_distribute_simd));
1209 return new (Mem) OMPDistributeSimdDirective(CollapsedNum, NumClauses);
1212 OMPTargetParallelForSimdDirective *OMPTargetParallelForSimdDirective::Create(
1213 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1214 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1215 const HelperExprs &Exprs) {
1216 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective),
1217 alignof(OMPClause *));
1218 void *Mem = C.Allocate(
1219 Size + sizeof(OMPClause *) * Clauses.size() +
1221 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd));
1222 OMPTargetParallelForSimdDirective *Dir =
1223 new (Mem) OMPTargetParallelForSimdDirective(StartLoc, EndLoc,
1224 CollapsedNum, Clauses.size());
1225 Dir->setClauses(Clauses);
1226 Dir->setAssociatedStmt(AssociatedStmt);
1227 Dir->setIterationVariable(Exprs.IterationVarRef);
1228 Dir->setLastIteration(Exprs.LastIteration);
1229 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1230 Dir->setPreCond(Exprs.PreCond);
1231 Dir->setCond(Exprs.Cond);
1232 Dir->setInit(Exprs.Init);
1233 Dir->setInc(Exprs.Inc);
1234 Dir->setIsLastIterVariable(Exprs.IL);
1235 Dir->setLowerBoundVariable(Exprs.LB);
1236 Dir->setUpperBoundVariable(Exprs.UB);
1237 Dir->setStrideVariable(Exprs.ST);
1238 Dir->setEnsureUpperBound(Exprs.EUB);
1239 Dir->setNextLowerBound(Exprs.NLB);
1240 Dir->setNextUpperBound(Exprs.NUB);
1241 Dir->setNumIterations(Exprs.NumIterations);
1242 Dir->setCounters(Exprs.Counters);
1243 Dir->setPrivateCounters(Exprs.PrivateCounters);
1244 Dir->setInits(Exprs.Inits);
1245 Dir->setUpdates(Exprs.Updates);
1246 Dir->setFinals(Exprs.Finals);
1247 Dir->setPreInits(Exprs.PreInits);
1251 OMPTargetParallelForSimdDirective *
1252 OMPTargetParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1253 unsigned NumClauses,
1254 unsigned CollapsedNum,
1256 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective),
1257 alignof(OMPClause *));
1258 void *Mem = C.Allocate(
1259 Size + sizeof(OMPClause *) * NumClauses +
1261 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd));
1262 return new (Mem) OMPTargetParallelForSimdDirective(CollapsedNum, NumClauses);
1265 OMPTargetSimdDirective *
1266 OMPTargetSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
1267 SourceLocation EndLoc, unsigned CollapsedNum,
1268 ArrayRef<OMPClause *> Clauses,
1269 Stmt *AssociatedStmt, const HelperExprs &Exprs) {
1271 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *));
1272 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1274 numLoopChildren(CollapsedNum, OMPD_target_simd));
1275 OMPTargetSimdDirective *Dir = new (Mem)
1276 OMPTargetSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
1277 Dir->setClauses(Clauses);
1278 Dir->setAssociatedStmt(AssociatedStmt);
1279 Dir->setIterationVariable(Exprs.IterationVarRef);
1280 Dir->setLastIteration(Exprs.LastIteration);
1281 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1282 Dir->setPreCond(Exprs.PreCond);
1283 Dir->setCond(Exprs.Cond);
1284 Dir->setInit(Exprs.Init);
1285 Dir->setInc(Exprs.Inc);
1286 Dir->setCounters(Exprs.Counters);
1287 Dir->setPrivateCounters(Exprs.PrivateCounters);
1288 Dir->setInits(Exprs.Inits);
1289 Dir->setUpdates(Exprs.Updates);
1290 Dir->setFinals(Exprs.Finals);
1291 Dir->setPreInits(Exprs.PreInits);
1295 OMPTargetSimdDirective *
1296 OMPTargetSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1297 unsigned CollapsedNum, EmptyShell) {
1299 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *));
1300 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1302 numLoopChildren(CollapsedNum, OMPD_target_simd));
1303 return new (Mem) OMPTargetSimdDirective(CollapsedNum, NumClauses);
1306 OMPTeamsDistributeDirective *OMPTeamsDistributeDirective::Create(
1307 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1308 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1309 const HelperExprs &Exprs) {
1311 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *));
1312 void *Mem = C.Allocate(
1313 Size + sizeof(OMPClause *) * Clauses.size() +
1314 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute));
1315 OMPTeamsDistributeDirective *Dir = new (Mem) OMPTeamsDistributeDirective(
1316 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1317 Dir->setClauses(Clauses);
1318 Dir->setAssociatedStmt(AssociatedStmt);
1319 Dir->setIterationVariable(Exprs.IterationVarRef);
1320 Dir->setLastIteration(Exprs.LastIteration);
1321 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1322 Dir->setPreCond(Exprs.PreCond);
1323 Dir->setCond(Exprs.Cond);
1324 Dir->setInit(Exprs.Init);
1325 Dir->setInc(Exprs.Inc);
1326 Dir->setIsLastIterVariable(Exprs.IL);
1327 Dir->setLowerBoundVariable(Exprs.LB);
1328 Dir->setUpperBoundVariable(Exprs.UB);
1329 Dir->setStrideVariable(Exprs.ST);
1330 Dir->setEnsureUpperBound(Exprs.EUB);
1331 Dir->setNextLowerBound(Exprs.NLB);
1332 Dir->setNextUpperBound(Exprs.NUB);
1333 Dir->setNumIterations(Exprs.NumIterations);
1334 Dir->setCounters(Exprs.Counters);
1335 Dir->setPrivateCounters(Exprs.PrivateCounters);
1336 Dir->setInits(Exprs.Inits);
1337 Dir->setUpdates(Exprs.Updates);
1338 Dir->setFinals(Exprs.Finals);
1339 Dir->setPreInits(Exprs.PreInits);
1343 OMPTeamsDistributeDirective *
1344 OMPTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1345 unsigned NumClauses,
1346 unsigned CollapsedNum, EmptyShell) {
1348 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *));
1349 void *Mem = C.Allocate(
1350 Size + sizeof(OMPClause *) * NumClauses +
1351 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute));
1352 return new (Mem) OMPTeamsDistributeDirective(CollapsedNum, NumClauses);
1355 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::Create(
1356 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1357 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1358 const HelperExprs &Exprs) {
1359 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective),
1360 alignof(OMPClause *));
1362 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1364 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd));
1365 OMPTeamsDistributeSimdDirective *Dir =
1366 new (Mem) OMPTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum,
1368 Dir->setClauses(Clauses);
1369 Dir->setAssociatedStmt(AssociatedStmt);
1370 Dir->setIterationVariable(Exprs.IterationVarRef);
1371 Dir->setLastIteration(Exprs.LastIteration);
1372 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1373 Dir->setPreCond(Exprs.PreCond);
1374 Dir->setCond(Exprs.Cond);
1375 Dir->setInit(Exprs.Init);
1376 Dir->setInc(Exprs.Inc);
1377 Dir->setIsLastIterVariable(Exprs.IL);
1378 Dir->setLowerBoundVariable(Exprs.LB);
1379 Dir->setUpperBoundVariable(Exprs.UB);
1380 Dir->setStrideVariable(Exprs.ST);
1381 Dir->setEnsureUpperBound(Exprs.EUB);
1382 Dir->setNextLowerBound(Exprs.NLB);
1383 Dir->setNextUpperBound(Exprs.NUB);
1384 Dir->setNumIterations(Exprs.NumIterations);
1385 Dir->setCounters(Exprs.Counters);
1386 Dir->setPrivateCounters(Exprs.PrivateCounters);
1387 Dir->setInits(Exprs.Inits);
1388 Dir->setUpdates(Exprs.Updates);
1389 Dir->setFinals(Exprs.Finals);
1390 Dir->setPreInits(Exprs.PreInits);
1394 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::CreateEmpty(
1395 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
1397 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective),
1398 alignof(OMPClause *));
1400 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1402 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd));
1403 return new (Mem) OMPTeamsDistributeSimdDirective(CollapsedNum, NumClauses);
1406 OMPTeamsDistributeParallelForSimdDirective *
1407 OMPTeamsDistributeParallelForSimdDirective::Create(
1408 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1409 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1410 const HelperExprs &Exprs) {
1411 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective),
1412 alignof(OMPClause *));
1414 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1416 numLoopChildren(CollapsedNum,
1417 OMPD_teams_distribute_parallel_for_simd));
1418 OMPTeamsDistributeParallelForSimdDirective *Dir = new (Mem)
1419 OMPTeamsDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum,
1421 Dir->setClauses(Clauses);
1422 Dir->setAssociatedStmt(AssociatedStmt);
1423 Dir->setIterationVariable(Exprs.IterationVarRef);
1424 Dir->setLastIteration(Exprs.LastIteration);
1425 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1426 Dir->setPreCond(Exprs.PreCond);
1427 Dir->setCond(Exprs.Cond);
1428 Dir->setInit(Exprs.Init);
1429 Dir->setInc(Exprs.Inc);
1430 Dir->setIsLastIterVariable(Exprs.IL);
1431 Dir->setLowerBoundVariable(Exprs.LB);
1432 Dir->setUpperBoundVariable(Exprs.UB);
1433 Dir->setStrideVariable(Exprs.ST);
1434 Dir->setEnsureUpperBound(Exprs.EUB);
1435 Dir->setNextLowerBound(Exprs.NLB);
1436 Dir->setNextUpperBound(Exprs.NUB);
1437 Dir->setNumIterations(Exprs.NumIterations);
1438 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1439 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1440 Dir->setDistInc(Exprs.DistInc);
1441 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1442 Dir->setCounters(Exprs.Counters);
1443 Dir->setPrivateCounters(Exprs.PrivateCounters);
1444 Dir->setInits(Exprs.Inits);
1445 Dir->setUpdates(Exprs.Updates);
1446 Dir->setFinals(Exprs.Finals);
1447 Dir->setPreInits(Exprs.PreInits);
1448 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1449 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1450 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1451 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1452 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1453 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1454 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1458 OMPTeamsDistributeParallelForSimdDirective *
1459 OMPTeamsDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1460 unsigned NumClauses,
1461 unsigned CollapsedNum,
1463 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective),
1464 alignof(OMPClause *));
1466 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1468 numLoopChildren(CollapsedNum,
1469 OMPD_teams_distribute_parallel_for_simd));
1471 OMPTeamsDistributeParallelForSimdDirective(CollapsedNum, NumClauses);
1474 OMPTeamsDistributeParallelForDirective *
1475 OMPTeamsDistributeParallelForDirective::Create(
1476 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1477 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1478 const HelperExprs &Exprs) {
1479 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective),
1480 alignof(OMPClause *));
1481 void *Mem = C.Allocate(
1482 Size + sizeof(OMPClause *) * Clauses.size() +
1484 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for));
1485 OMPTeamsDistributeParallelForDirective *Dir = new (Mem)
1486 OMPTeamsDistributeParallelForDirective(StartLoc, EndLoc, CollapsedNum,
1488 Dir->setClauses(Clauses);
1489 Dir->setAssociatedStmt(AssociatedStmt);
1490 Dir->setIterationVariable(Exprs.IterationVarRef);
1491 Dir->setLastIteration(Exprs.LastIteration);
1492 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1493 Dir->setPreCond(Exprs.PreCond);
1494 Dir->setCond(Exprs.Cond);
1495 Dir->setInit(Exprs.Init);
1496 Dir->setInc(Exprs.Inc);
1497 Dir->setIsLastIterVariable(Exprs.IL);
1498 Dir->setLowerBoundVariable(Exprs.LB);
1499 Dir->setUpperBoundVariable(Exprs.UB);
1500 Dir->setStrideVariable(Exprs.ST);
1501 Dir->setEnsureUpperBound(Exprs.EUB);
1502 Dir->setNextLowerBound(Exprs.NLB);
1503 Dir->setNextUpperBound(Exprs.NUB);
1504 Dir->setNumIterations(Exprs.NumIterations);
1505 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1506 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1507 Dir->setDistInc(Exprs.DistInc);
1508 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1509 Dir->setCounters(Exprs.Counters);
1510 Dir->setPrivateCounters(Exprs.PrivateCounters);
1511 Dir->setInits(Exprs.Inits);
1512 Dir->setUpdates(Exprs.Updates);
1513 Dir->setFinals(Exprs.Finals);
1514 Dir->setPreInits(Exprs.PreInits);
1515 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1516 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1517 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1518 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1519 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1520 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1521 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1525 OMPTeamsDistributeParallelForDirective *
1526 OMPTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1527 unsigned NumClauses,
1528 unsigned CollapsedNum,
1530 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective),
1531 alignof(OMPClause *));
1532 void *Mem = C.Allocate(
1533 Size + sizeof(OMPClause *) * NumClauses +
1535 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for));
1537 OMPTeamsDistributeParallelForDirective(CollapsedNum, NumClauses);
1540 OMPTargetTeamsDirective *OMPTargetTeamsDirective::Create(
1541 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1542 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1544 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *));
1546 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
1547 OMPTargetTeamsDirective *Dir =
1548 new (Mem) OMPTargetTeamsDirective(StartLoc, EndLoc, Clauses.size());
1549 Dir->setClauses(Clauses);
1550 Dir->setAssociatedStmt(AssociatedStmt);
1554 OMPTargetTeamsDirective *
1555 OMPTargetTeamsDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1558 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *));
1560 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
1561 return new (Mem) OMPTargetTeamsDirective(NumClauses);
1564 OMPTargetTeamsDistributeDirective *OMPTargetTeamsDistributeDirective::Create(
1565 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1566 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1567 const HelperExprs &Exprs) {
1568 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective),
1569 alignof(OMPClause *));
1570 void *Mem = C.Allocate(
1571 Size + sizeof(OMPClause *) * Clauses.size() +
1573 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute));
1574 OMPTargetTeamsDistributeDirective *Dir =
1575 new (Mem) OMPTargetTeamsDistributeDirective(StartLoc, EndLoc, CollapsedNum,
1577 Dir->setClauses(Clauses);
1578 Dir->setAssociatedStmt(AssociatedStmt);
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->setPreInits(Exprs.PreInits);
1603 OMPTargetTeamsDistributeDirective *
1604 OMPTargetTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1605 unsigned NumClauses,
1606 unsigned CollapsedNum,
1608 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective),
1609 alignof(OMPClause *));
1610 void *Mem = C.Allocate(
1611 Size + sizeof(OMPClause *) * NumClauses +
1613 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute));
1614 return new (Mem) OMPTargetTeamsDistributeDirective(CollapsedNum, NumClauses);
1617 OMPTargetTeamsDistributeParallelForDirective *
1618 OMPTargetTeamsDistributeParallelForDirective::Create(
1619 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1620 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1621 const HelperExprs &Exprs) {
1623 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective),
1624 alignof(OMPClause *));
1625 void *Mem = C.Allocate(
1626 Size + sizeof(OMPClause *) * Clauses.size() +
1628 numLoopChildren(CollapsedNum,
1629 OMPD_target_teams_distribute_parallel_for));
1630 OMPTargetTeamsDistributeParallelForDirective *Dir =
1631 new (Mem) OMPTargetTeamsDistributeParallelForDirective(
1632 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1633 Dir->setClauses(Clauses);
1634 Dir->setAssociatedStmt(AssociatedStmt);
1635 Dir->setIterationVariable(Exprs.IterationVarRef);
1636 Dir->setLastIteration(Exprs.LastIteration);
1637 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1638 Dir->setPreCond(Exprs.PreCond);
1639 Dir->setCond(Exprs.Cond);
1640 Dir->setInit(Exprs.Init);
1641 Dir->setInc(Exprs.Inc);
1642 Dir->setIsLastIterVariable(Exprs.IL);
1643 Dir->setLowerBoundVariable(Exprs.LB);
1644 Dir->setUpperBoundVariable(Exprs.UB);
1645 Dir->setStrideVariable(Exprs.ST);
1646 Dir->setEnsureUpperBound(Exprs.EUB);
1647 Dir->setNextLowerBound(Exprs.NLB);
1648 Dir->setNextUpperBound(Exprs.NUB);
1649 Dir->setNumIterations(Exprs.NumIterations);
1650 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1651 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1652 Dir->setDistInc(Exprs.DistInc);
1653 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1654 Dir->setCounters(Exprs.Counters);
1655 Dir->setPrivateCounters(Exprs.PrivateCounters);
1656 Dir->setInits(Exprs.Inits);
1657 Dir->setUpdates(Exprs.Updates);
1658 Dir->setFinals(Exprs.Finals);
1659 Dir->setPreInits(Exprs.PreInits);
1660 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1661 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1662 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1663 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1664 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1665 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1666 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1670 OMPTargetTeamsDistributeParallelForDirective *
1671 OMPTargetTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1672 unsigned NumClauses,
1673 unsigned CollapsedNum,
1676 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective),
1677 alignof(OMPClause *));
1678 void *Mem = C.Allocate(
1679 Size + sizeof(OMPClause *) * NumClauses +
1681 numLoopChildren(CollapsedNum,
1682 OMPD_target_teams_distribute_parallel_for));
1684 OMPTargetTeamsDistributeParallelForDirective(CollapsedNum, NumClauses);
1687 OMPTargetTeamsDistributeParallelForSimdDirective *
1688 OMPTargetTeamsDistributeParallelForSimdDirective::Create(
1689 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1690 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1691 const HelperExprs &Exprs) {
1693 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective),
1694 alignof(OMPClause *));
1695 void *Mem = C.Allocate(
1696 Size + sizeof(OMPClause *) * Clauses.size() +
1698 numLoopChildren(CollapsedNum,
1699 OMPD_target_teams_distribute_parallel_for_simd));
1700 OMPTargetTeamsDistributeParallelForSimdDirective *Dir =
1701 new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective(
1702 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1703 Dir->setClauses(Clauses);
1704 Dir->setAssociatedStmt(AssociatedStmt);
1705 Dir->setIterationVariable(Exprs.IterationVarRef);
1706 Dir->setLastIteration(Exprs.LastIteration);
1707 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1708 Dir->setPreCond(Exprs.PreCond);
1709 Dir->setCond(Exprs.Cond);
1710 Dir->setInit(Exprs.Init);
1711 Dir->setInc(Exprs.Inc);
1712 Dir->setIsLastIterVariable(Exprs.IL);
1713 Dir->setLowerBoundVariable(Exprs.LB);
1714 Dir->setUpperBoundVariable(Exprs.UB);
1715 Dir->setStrideVariable(Exprs.ST);
1716 Dir->setEnsureUpperBound(Exprs.EUB);
1717 Dir->setNextLowerBound(Exprs.NLB);
1718 Dir->setNextUpperBound(Exprs.NUB);
1719 Dir->setNumIterations(Exprs.NumIterations);
1720 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1721 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1722 Dir->setDistInc(Exprs.DistInc);
1723 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1724 Dir->setCounters(Exprs.Counters);
1725 Dir->setPrivateCounters(Exprs.PrivateCounters);
1726 Dir->setInits(Exprs.Inits);
1727 Dir->setUpdates(Exprs.Updates);
1728 Dir->setFinals(Exprs.Finals);
1729 Dir->setPreInits(Exprs.PreInits);
1730 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1731 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1732 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1733 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1734 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1735 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1736 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1740 OMPTargetTeamsDistributeParallelForSimdDirective *
1741 OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty(
1742 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
1745 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective),
1746 alignof(OMPClause *));
1747 void *Mem = C.Allocate(
1748 Size + sizeof(OMPClause *) * NumClauses +
1750 numLoopChildren(CollapsedNum,
1751 OMPD_target_teams_distribute_parallel_for_simd));
1752 return new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective(
1753 CollapsedNum, NumClauses);
1756 OMPTargetTeamsDistributeSimdDirective *
1757 OMPTargetTeamsDistributeSimdDirective::Create(
1758 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1759 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1760 const HelperExprs &Exprs) {
1761 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective),
1762 alignof(OMPClause *));
1763 void *Mem = C.Allocate(
1764 Size + sizeof(OMPClause *) * Clauses.size() +
1766 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd));
1767 OMPTargetTeamsDistributeSimdDirective *Dir = new (Mem)
1768 OMPTargetTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum,
1770 Dir->setClauses(Clauses);
1771 Dir->setAssociatedStmt(AssociatedStmt);
1772 Dir->setIterationVariable(Exprs.IterationVarRef);
1773 Dir->setLastIteration(Exprs.LastIteration);
1774 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1775 Dir->setPreCond(Exprs.PreCond);
1776 Dir->setCond(Exprs.Cond);
1777 Dir->setInit(Exprs.Init);
1778 Dir->setInc(Exprs.Inc);
1779 Dir->setIsLastIterVariable(Exprs.IL);
1780 Dir->setLowerBoundVariable(Exprs.LB);
1781 Dir->setUpperBoundVariable(Exprs.UB);
1782 Dir->setStrideVariable(Exprs.ST);
1783 Dir->setEnsureUpperBound(Exprs.EUB);
1784 Dir->setNextLowerBound(Exprs.NLB);
1785 Dir->setNextUpperBound(Exprs.NUB);
1786 Dir->setNumIterations(Exprs.NumIterations);
1787 Dir->setCounters(Exprs.Counters);
1788 Dir->setPrivateCounters(Exprs.PrivateCounters);
1789 Dir->setInits(Exprs.Inits);
1790 Dir->setUpdates(Exprs.Updates);
1791 Dir->setFinals(Exprs.Finals);
1792 Dir->setPreInits(Exprs.PreInits);
1796 OMPTargetTeamsDistributeSimdDirective *
1797 OMPTargetTeamsDistributeSimdDirective::CreateEmpty(const ASTContext &C,
1798 unsigned NumClauses,
1799 unsigned CollapsedNum,
1801 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective),
1802 alignof(OMPClause *));
1803 void *Mem = C.Allocate(
1804 Size + sizeof(OMPClause *) * NumClauses +
1806 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd));
1808 OMPTargetTeamsDistributeSimdDirective(CollapsedNum, NumClauses);