1 //===--- StmtOpenMP.cpp - Classes for OpenMP directives -------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements the subclesses of Stmt class declared in StmtOpenMP.h
11 //===----------------------------------------------------------------------===//
13 #include "clang/AST/StmtOpenMP.h"
15 #include "clang/AST/ASTContext.h"
17 using namespace clang;
19 void OMPExecutableDirective::setClauses(ArrayRef<OMPClause *> Clauses) {
20 assert(Clauses.size() == getNumClauses() &&
21 "Number of clauses is not the same as the preallocated buffer");
22 std::copy(Clauses.begin(), Clauses.end(), getClauses().begin());
25 bool OMPExecutableDirective::isStandaloneDirective() const {
26 // Special case: 'omp target enter data', 'omp target exit data',
27 // 'omp target update' are stand-alone directives, but for implementation
28 // reasons they have empty synthetic structured block, to simplify codegen.
29 if (isa<OMPTargetEnterDataDirective>(this) ||
30 isa<OMPTargetExitDataDirective>(this) ||
31 isa<OMPTargetUpdateDirective>(this))
33 return !hasAssociatedStmt() || !getAssociatedStmt();
36 const Stmt *OMPExecutableDirective::getStructuredBlock() const {
37 assert(!isStandaloneDirective() &&
38 "Standalone Executable Directives don't have Structured Blocks.");
39 if (auto *LD = dyn_cast<OMPLoopDirective>(this))
41 return getInnermostCapturedStmt()->getCapturedStmt();
44 void OMPLoopDirective::setCounters(ArrayRef<Expr *> A) {
45 assert(A.size() == getCollapsedNumber() &&
46 "Number of loop counters is not the same as the collapsed number");
47 std::copy(A.begin(), A.end(), getCounters().begin());
50 void OMPLoopDirective::setPrivateCounters(ArrayRef<Expr *> A) {
51 assert(A.size() == getCollapsedNumber() && "Number of loop private counters "
52 "is not the same as the collapsed "
54 std::copy(A.begin(), A.end(), getPrivateCounters().begin());
57 void OMPLoopDirective::setInits(ArrayRef<Expr *> A) {
58 assert(A.size() == getCollapsedNumber() &&
59 "Number of counter inits is not the same as the collapsed number");
60 std::copy(A.begin(), A.end(), getInits().begin());
63 void OMPLoopDirective::setUpdates(ArrayRef<Expr *> A) {
64 assert(A.size() == getCollapsedNumber() &&
65 "Number of counter updates is not the same as the collapsed number");
66 std::copy(A.begin(), A.end(), getUpdates().begin());
69 void OMPLoopDirective::setFinals(ArrayRef<Expr *> A) {
70 assert(A.size() == getCollapsedNumber() &&
71 "Number of counter finals is not the same as the collapsed number");
72 std::copy(A.begin(), A.end(), getFinals().begin());
75 void OMPLoopDirective::setDependentCounters(ArrayRef<Expr *> A) {
77 A.size() == getCollapsedNumber() &&
78 "Number of dependent counters is not the same as the collapsed number");
79 llvm::copy(A, getDependentCounters().begin());
82 void OMPLoopDirective::setDependentInits(ArrayRef<Expr *> A) {
83 assert(A.size() == getCollapsedNumber() &&
84 "Number of dependent inits is not the same as the collapsed number");
85 llvm::copy(A, getDependentInits().begin());
88 void OMPLoopDirective::setFinalsConditions(ArrayRef<Expr *> A) {
89 assert(A.size() == getCollapsedNumber() &&
90 "Number of finals conditions is not the same as the collapsed number");
91 llvm::copy(A, getFinalsConditions().begin());
94 OMPParallelDirective *OMPParallelDirective::Create(
95 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
96 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) {
98 llvm::alignTo(sizeof(OMPParallelDirective), alignof(OMPClause *));
100 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
101 OMPParallelDirective *Dir =
102 new (Mem) OMPParallelDirective(StartLoc, EndLoc, Clauses.size());
103 Dir->setClauses(Clauses);
104 Dir->setAssociatedStmt(AssociatedStmt);
105 Dir->setHasCancel(HasCancel);
109 OMPParallelDirective *OMPParallelDirective::CreateEmpty(const ASTContext &C,
113 llvm::alignTo(sizeof(OMPParallelDirective), alignof(OMPClause *));
115 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
116 return new (Mem) OMPParallelDirective(NumClauses);
120 OMPSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
121 SourceLocation EndLoc, unsigned CollapsedNum,
122 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
123 const HelperExprs &Exprs) {
124 unsigned Size = llvm::alignTo(sizeof(OMPSimdDirective), alignof(OMPClause *));
126 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
127 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_simd));
128 OMPSimdDirective *Dir = new (Mem)
129 OMPSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
130 Dir->setClauses(Clauses);
131 Dir->setAssociatedStmt(AssociatedStmt);
132 Dir->setIterationVariable(Exprs.IterationVarRef);
133 Dir->setLastIteration(Exprs.LastIteration);
134 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
135 Dir->setPreCond(Exprs.PreCond);
136 Dir->setCond(Exprs.Cond);
137 Dir->setInit(Exprs.Init);
138 Dir->setInc(Exprs.Inc);
139 Dir->setCounters(Exprs.Counters);
140 Dir->setPrivateCounters(Exprs.PrivateCounters);
141 Dir->setInits(Exprs.Inits);
142 Dir->setUpdates(Exprs.Updates);
143 Dir->setFinals(Exprs.Finals);
144 Dir->setDependentCounters(Exprs.DependentCounters);
145 Dir->setDependentInits(Exprs.DependentInits);
146 Dir->setFinalsConditions(Exprs.FinalsConditions);
147 Dir->setPreInits(Exprs.PreInits);
151 OMPSimdDirective *OMPSimdDirective::CreateEmpty(const ASTContext &C,
153 unsigned CollapsedNum,
155 unsigned Size = llvm::alignTo(sizeof(OMPSimdDirective), alignof(OMPClause *));
157 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
158 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_simd));
159 return new (Mem) OMPSimdDirective(CollapsedNum, NumClauses);
163 OMPForDirective::Create(const ASTContext &C, SourceLocation StartLoc,
164 SourceLocation EndLoc, unsigned CollapsedNum,
165 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
166 const HelperExprs &Exprs, bool HasCancel) {
167 unsigned Size = llvm::alignTo(sizeof(OMPForDirective), alignof(OMPClause *));
169 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
170 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for));
171 OMPForDirective *Dir =
172 new (Mem) OMPForDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
173 Dir->setClauses(Clauses);
174 Dir->setAssociatedStmt(AssociatedStmt);
175 Dir->setIterationVariable(Exprs.IterationVarRef);
176 Dir->setLastIteration(Exprs.LastIteration);
177 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
178 Dir->setPreCond(Exprs.PreCond);
179 Dir->setCond(Exprs.Cond);
180 Dir->setInit(Exprs.Init);
181 Dir->setInc(Exprs.Inc);
182 Dir->setIsLastIterVariable(Exprs.IL);
183 Dir->setLowerBoundVariable(Exprs.LB);
184 Dir->setUpperBoundVariable(Exprs.UB);
185 Dir->setStrideVariable(Exprs.ST);
186 Dir->setEnsureUpperBound(Exprs.EUB);
187 Dir->setNextLowerBound(Exprs.NLB);
188 Dir->setNextUpperBound(Exprs.NUB);
189 Dir->setNumIterations(Exprs.NumIterations);
190 Dir->setCounters(Exprs.Counters);
191 Dir->setPrivateCounters(Exprs.PrivateCounters);
192 Dir->setInits(Exprs.Inits);
193 Dir->setUpdates(Exprs.Updates);
194 Dir->setFinals(Exprs.Finals);
195 Dir->setDependentCounters(Exprs.DependentCounters);
196 Dir->setDependentInits(Exprs.DependentInits);
197 Dir->setFinalsConditions(Exprs.FinalsConditions);
198 Dir->setPreInits(Exprs.PreInits);
199 Dir->setHasCancel(HasCancel);
203 OMPForDirective *OMPForDirective::CreateEmpty(const ASTContext &C,
205 unsigned CollapsedNum,
207 unsigned Size = llvm::alignTo(sizeof(OMPForDirective), alignof(OMPClause *));
209 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
210 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for));
211 return new (Mem) OMPForDirective(CollapsedNum, NumClauses);
214 OMPForSimdDirective *
215 OMPForSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
216 SourceLocation EndLoc, unsigned CollapsedNum,
217 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
218 const HelperExprs &Exprs) {
220 llvm::alignTo(sizeof(OMPForSimdDirective), alignof(OMPClause *));
222 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
223 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for_simd));
224 OMPForSimdDirective *Dir = new (Mem)
225 OMPForSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
226 Dir->setClauses(Clauses);
227 Dir->setAssociatedStmt(AssociatedStmt);
228 Dir->setIterationVariable(Exprs.IterationVarRef);
229 Dir->setLastIteration(Exprs.LastIteration);
230 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
231 Dir->setPreCond(Exprs.PreCond);
232 Dir->setCond(Exprs.Cond);
233 Dir->setInit(Exprs.Init);
234 Dir->setInc(Exprs.Inc);
235 Dir->setIsLastIterVariable(Exprs.IL);
236 Dir->setLowerBoundVariable(Exprs.LB);
237 Dir->setUpperBoundVariable(Exprs.UB);
238 Dir->setStrideVariable(Exprs.ST);
239 Dir->setEnsureUpperBound(Exprs.EUB);
240 Dir->setNextLowerBound(Exprs.NLB);
241 Dir->setNextUpperBound(Exprs.NUB);
242 Dir->setNumIterations(Exprs.NumIterations);
243 Dir->setCounters(Exprs.Counters);
244 Dir->setPrivateCounters(Exprs.PrivateCounters);
245 Dir->setInits(Exprs.Inits);
246 Dir->setUpdates(Exprs.Updates);
247 Dir->setFinals(Exprs.Finals);
248 Dir->setDependentCounters(Exprs.DependentCounters);
249 Dir->setDependentInits(Exprs.DependentInits);
250 Dir->setFinalsConditions(Exprs.FinalsConditions);
251 Dir->setPreInits(Exprs.PreInits);
255 OMPForSimdDirective *OMPForSimdDirective::CreateEmpty(const ASTContext &C,
257 unsigned CollapsedNum,
260 llvm::alignTo(sizeof(OMPForSimdDirective), alignof(OMPClause *));
262 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
263 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for_simd));
264 return new (Mem) OMPForSimdDirective(CollapsedNum, NumClauses);
267 OMPSectionsDirective *OMPSectionsDirective::Create(
268 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
269 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) {
271 llvm::alignTo(sizeof(OMPSectionsDirective), alignof(OMPClause *));
273 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
274 OMPSectionsDirective *Dir =
275 new (Mem) OMPSectionsDirective(StartLoc, EndLoc, Clauses.size());
276 Dir->setClauses(Clauses);
277 Dir->setAssociatedStmt(AssociatedStmt);
278 Dir->setHasCancel(HasCancel);
282 OMPSectionsDirective *OMPSectionsDirective::CreateEmpty(const ASTContext &C,
286 llvm::alignTo(sizeof(OMPSectionsDirective), alignof(OMPClause *));
288 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
289 return new (Mem) OMPSectionsDirective(NumClauses);
292 OMPSectionDirective *OMPSectionDirective::Create(const ASTContext &C,
293 SourceLocation StartLoc,
294 SourceLocation EndLoc,
295 Stmt *AssociatedStmt,
297 unsigned Size = llvm::alignTo(sizeof(OMPSectionDirective), alignof(Stmt *));
298 void *Mem = C.Allocate(Size + sizeof(Stmt *));
299 OMPSectionDirective *Dir = new (Mem) OMPSectionDirective(StartLoc, EndLoc);
300 Dir->setAssociatedStmt(AssociatedStmt);
301 Dir->setHasCancel(HasCancel);
305 OMPSectionDirective *OMPSectionDirective::CreateEmpty(const ASTContext &C,
307 unsigned Size = llvm::alignTo(sizeof(OMPSectionDirective), alignof(Stmt *));
308 void *Mem = C.Allocate(Size + sizeof(Stmt *));
309 return new (Mem) OMPSectionDirective();
312 OMPSingleDirective *OMPSingleDirective::Create(const ASTContext &C,
313 SourceLocation StartLoc,
314 SourceLocation EndLoc,
315 ArrayRef<OMPClause *> Clauses,
316 Stmt *AssociatedStmt) {
318 llvm::alignTo(sizeof(OMPSingleDirective), alignof(OMPClause *));
320 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
321 OMPSingleDirective *Dir =
322 new (Mem) OMPSingleDirective(StartLoc, EndLoc, Clauses.size());
323 Dir->setClauses(Clauses);
324 Dir->setAssociatedStmt(AssociatedStmt);
328 OMPSingleDirective *OMPSingleDirective::CreateEmpty(const ASTContext &C,
332 llvm::alignTo(sizeof(OMPSingleDirective), alignof(OMPClause *));
334 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
335 return new (Mem) OMPSingleDirective(NumClauses);
338 OMPMasterDirective *OMPMasterDirective::Create(const ASTContext &C,
339 SourceLocation StartLoc,
340 SourceLocation EndLoc,
341 Stmt *AssociatedStmt) {
342 unsigned Size = llvm::alignTo(sizeof(OMPMasterDirective), alignof(Stmt *));
343 void *Mem = C.Allocate(Size + sizeof(Stmt *));
344 OMPMasterDirective *Dir = new (Mem) OMPMasterDirective(StartLoc, EndLoc);
345 Dir->setAssociatedStmt(AssociatedStmt);
349 OMPMasterDirective *OMPMasterDirective::CreateEmpty(const ASTContext &C,
351 unsigned Size = llvm::alignTo(sizeof(OMPMasterDirective), alignof(Stmt *));
352 void *Mem = C.Allocate(Size + sizeof(Stmt *));
353 return new (Mem) OMPMasterDirective();
356 OMPCriticalDirective *OMPCriticalDirective::Create(
357 const ASTContext &C, const DeclarationNameInfo &Name,
358 SourceLocation StartLoc, SourceLocation EndLoc,
359 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
361 llvm::alignTo(sizeof(OMPCriticalDirective), alignof(OMPClause *));
363 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
364 OMPCriticalDirective *Dir =
365 new (Mem) OMPCriticalDirective(Name, StartLoc, EndLoc, Clauses.size());
366 Dir->setClauses(Clauses);
367 Dir->setAssociatedStmt(AssociatedStmt);
371 OMPCriticalDirective *OMPCriticalDirective::CreateEmpty(const ASTContext &C,
375 llvm::alignTo(sizeof(OMPCriticalDirective), alignof(OMPClause *));
377 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
378 return new (Mem) OMPCriticalDirective(NumClauses);
381 OMPParallelForDirective *OMPParallelForDirective::Create(
382 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
383 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
384 const HelperExprs &Exprs, bool HasCancel) {
386 llvm::alignTo(sizeof(OMPParallelForDirective), alignof(OMPClause *));
387 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
389 numLoopChildren(CollapsedNum, OMPD_parallel_for));
390 OMPParallelForDirective *Dir = new (Mem)
391 OMPParallelForDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
392 Dir->setClauses(Clauses);
393 Dir->setAssociatedStmt(AssociatedStmt);
394 Dir->setIterationVariable(Exprs.IterationVarRef);
395 Dir->setLastIteration(Exprs.LastIteration);
396 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
397 Dir->setPreCond(Exprs.PreCond);
398 Dir->setCond(Exprs.Cond);
399 Dir->setInit(Exprs.Init);
400 Dir->setInc(Exprs.Inc);
401 Dir->setIsLastIterVariable(Exprs.IL);
402 Dir->setLowerBoundVariable(Exprs.LB);
403 Dir->setUpperBoundVariable(Exprs.UB);
404 Dir->setStrideVariable(Exprs.ST);
405 Dir->setEnsureUpperBound(Exprs.EUB);
406 Dir->setNextLowerBound(Exprs.NLB);
407 Dir->setNextUpperBound(Exprs.NUB);
408 Dir->setNumIterations(Exprs.NumIterations);
409 Dir->setCounters(Exprs.Counters);
410 Dir->setPrivateCounters(Exprs.PrivateCounters);
411 Dir->setInits(Exprs.Inits);
412 Dir->setUpdates(Exprs.Updates);
413 Dir->setFinals(Exprs.Finals);
414 Dir->setDependentCounters(Exprs.DependentCounters);
415 Dir->setDependentInits(Exprs.DependentInits);
416 Dir->setFinalsConditions(Exprs.FinalsConditions);
417 Dir->setPreInits(Exprs.PreInits);
418 Dir->setHasCancel(HasCancel);
422 OMPParallelForDirective *
423 OMPParallelForDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
424 unsigned CollapsedNum, EmptyShell) {
426 llvm::alignTo(sizeof(OMPParallelForDirective), alignof(OMPClause *));
427 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
429 numLoopChildren(CollapsedNum, OMPD_parallel_for));
430 return new (Mem) OMPParallelForDirective(CollapsedNum, NumClauses);
433 OMPParallelForSimdDirective *OMPParallelForSimdDirective::Create(
434 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
435 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
436 const HelperExprs &Exprs) {
438 llvm::alignTo(sizeof(OMPParallelForSimdDirective), alignof(OMPClause *));
439 void *Mem = C.Allocate(
440 Size + sizeof(OMPClause *) * Clauses.size() +
441 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_parallel_for_simd));
442 OMPParallelForSimdDirective *Dir = new (Mem) OMPParallelForSimdDirective(
443 StartLoc, EndLoc, CollapsedNum, Clauses.size());
444 Dir->setClauses(Clauses);
445 Dir->setAssociatedStmt(AssociatedStmt);
446 Dir->setIterationVariable(Exprs.IterationVarRef);
447 Dir->setLastIteration(Exprs.LastIteration);
448 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
449 Dir->setPreCond(Exprs.PreCond);
450 Dir->setCond(Exprs.Cond);
451 Dir->setInit(Exprs.Init);
452 Dir->setInc(Exprs.Inc);
453 Dir->setIsLastIterVariable(Exprs.IL);
454 Dir->setLowerBoundVariable(Exprs.LB);
455 Dir->setUpperBoundVariable(Exprs.UB);
456 Dir->setStrideVariable(Exprs.ST);
457 Dir->setEnsureUpperBound(Exprs.EUB);
458 Dir->setNextLowerBound(Exprs.NLB);
459 Dir->setNextUpperBound(Exprs.NUB);
460 Dir->setNumIterations(Exprs.NumIterations);
461 Dir->setCounters(Exprs.Counters);
462 Dir->setPrivateCounters(Exprs.PrivateCounters);
463 Dir->setInits(Exprs.Inits);
464 Dir->setUpdates(Exprs.Updates);
465 Dir->setFinals(Exprs.Finals);
466 Dir->setDependentCounters(Exprs.DependentCounters);
467 Dir->setDependentInits(Exprs.DependentInits);
468 Dir->setFinalsConditions(Exprs.FinalsConditions);
469 Dir->setPreInits(Exprs.PreInits);
473 OMPParallelForSimdDirective *
474 OMPParallelForSimdDirective::CreateEmpty(const ASTContext &C,
476 unsigned CollapsedNum, EmptyShell) {
478 llvm::alignTo(sizeof(OMPParallelForSimdDirective), alignof(OMPClause *));
479 void *Mem = C.Allocate(
480 Size + sizeof(OMPClause *) * NumClauses +
481 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_parallel_for_simd));
482 return new (Mem) OMPParallelForSimdDirective(CollapsedNum, NumClauses);
485 OMPParallelSectionsDirective *OMPParallelSectionsDirective::Create(
486 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
487 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) {
489 llvm::alignTo(sizeof(OMPParallelSectionsDirective), alignof(OMPClause *));
491 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
492 OMPParallelSectionsDirective *Dir =
493 new (Mem) OMPParallelSectionsDirective(StartLoc, EndLoc, Clauses.size());
494 Dir->setClauses(Clauses);
495 Dir->setAssociatedStmt(AssociatedStmt);
496 Dir->setHasCancel(HasCancel);
500 OMPParallelSectionsDirective *
501 OMPParallelSectionsDirective::CreateEmpty(const ASTContext &C,
502 unsigned NumClauses, EmptyShell) {
504 llvm::alignTo(sizeof(OMPParallelSectionsDirective), alignof(OMPClause *));
506 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
507 return new (Mem) OMPParallelSectionsDirective(NumClauses);
511 OMPTaskDirective::Create(const ASTContext &C, SourceLocation StartLoc,
512 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
513 Stmt *AssociatedStmt, bool HasCancel) {
514 unsigned Size = llvm::alignTo(sizeof(OMPTaskDirective), alignof(OMPClause *));
516 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
517 OMPTaskDirective *Dir =
518 new (Mem) OMPTaskDirective(StartLoc, EndLoc, Clauses.size());
519 Dir->setClauses(Clauses);
520 Dir->setAssociatedStmt(AssociatedStmt);
521 Dir->setHasCancel(HasCancel);
525 OMPTaskDirective *OMPTaskDirective::CreateEmpty(const ASTContext &C,
528 unsigned Size = llvm::alignTo(sizeof(OMPTaskDirective), alignof(OMPClause *));
530 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
531 return new (Mem) OMPTaskDirective(NumClauses);
534 OMPTaskyieldDirective *OMPTaskyieldDirective::Create(const ASTContext &C,
535 SourceLocation StartLoc,
536 SourceLocation EndLoc) {
537 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective));
538 OMPTaskyieldDirective *Dir =
539 new (Mem) OMPTaskyieldDirective(StartLoc, EndLoc);
543 OMPTaskyieldDirective *OMPTaskyieldDirective::CreateEmpty(const ASTContext &C,
545 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective));
546 return new (Mem) OMPTaskyieldDirective();
549 OMPBarrierDirective *OMPBarrierDirective::Create(const ASTContext &C,
550 SourceLocation StartLoc,
551 SourceLocation EndLoc) {
552 void *Mem = C.Allocate(sizeof(OMPBarrierDirective));
553 OMPBarrierDirective *Dir = new (Mem) OMPBarrierDirective(StartLoc, EndLoc);
557 OMPBarrierDirective *OMPBarrierDirective::CreateEmpty(const ASTContext &C,
559 void *Mem = C.Allocate(sizeof(OMPBarrierDirective));
560 return new (Mem) OMPBarrierDirective();
563 OMPTaskwaitDirective *OMPTaskwaitDirective::Create(const ASTContext &C,
564 SourceLocation StartLoc,
565 SourceLocation EndLoc) {
566 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective));
567 OMPTaskwaitDirective *Dir = new (Mem) OMPTaskwaitDirective(StartLoc, EndLoc);
571 OMPTaskwaitDirective *OMPTaskwaitDirective::CreateEmpty(const ASTContext &C,
573 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective));
574 return new (Mem) OMPTaskwaitDirective();
577 OMPTaskgroupDirective *OMPTaskgroupDirective::Create(
578 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
579 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *ReductionRef) {
580 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) +
581 sizeof(OMPClause *) * Clauses.size(),
583 void *Mem = C.Allocate(Size + sizeof(Stmt *) + sizeof(Expr *));
584 OMPTaskgroupDirective *Dir =
585 new (Mem) OMPTaskgroupDirective(StartLoc, EndLoc, Clauses.size());
586 Dir->setAssociatedStmt(AssociatedStmt);
587 Dir->setReductionRef(ReductionRef);
588 Dir->setClauses(Clauses);
592 OMPTaskgroupDirective *OMPTaskgroupDirective::CreateEmpty(const ASTContext &C,
595 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) +
596 sizeof(OMPClause *) * NumClauses,
598 void *Mem = C.Allocate(Size + sizeof(Stmt *) + sizeof(Expr *));
599 return new (Mem) OMPTaskgroupDirective(NumClauses);
602 OMPCancellationPointDirective *OMPCancellationPointDirective::Create(
603 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
604 OpenMPDirectiveKind CancelRegion) {
606 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *));
607 void *Mem = C.Allocate(Size);
608 OMPCancellationPointDirective *Dir =
609 new (Mem) OMPCancellationPointDirective(StartLoc, EndLoc);
610 Dir->setCancelRegion(CancelRegion);
614 OMPCancellationPointDirective *
615 OMPCancellationPointDirective::CreateEmpty(const ASTContext &C, EmptyShell) {
617 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *));
618 void *Mem = C.Allocate(Size);
619 return new (Mem) OMPCancellationPointDirective();
623 OMPCancelDirective::Create(const ASTContext &C, SourceLocation StartLoc,
624 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses,
625 OpenMPDirectiveKind CancelRegion) {
626 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) +
627 sizeof(OMPClause *) * Clauses.size(),
629 void *Mem = C.Allocate(Size);
630 OMPCancelDirective *Dir =
631 new (Mem) OMPCancelDirective(StartLoc, EndLoc, Clauses.size());
632 Dir->setClauses(Clauses);
633 Dir->setCancelRegion(CancelRegion);
637 OMPCancelDirective *OMPCancelDirective::CreateEmpty(const ASTContext &C,
640 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) +
641 sizeof(OMPClause *) * NumClauses,
643 void *Mem = C.Allocate(Size);
644 return new (Mem) OMPCancelDirective(NumClauses);
647 OMPFlushDirective *OMPFlushDirective::Create(const ASTContext &C,
648 SourceLocation StartLoc,
649 SourceLocation EndLoc,
650 ArrayRef<OMPClause *> Clauses) {
652 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *));
653 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size());
654 OMPFlushDirective *Dir =
655 new (Mem) OMPFlushDirective(StartLoc, EndLoc, Clauses.size());
656 Dir->setClauses(Clauses);
660 OMPFlushDirective *OMPFlushDirective::CreateEmpty(const ASTContext &C,
664 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *));
665 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses);
666 return new (Mem) OMPFlushDirective(NumClauses);
669 OMPOrderedDirective *OMPOrderedDirective::Create(const ASTContext &C,
670 SourceLocation StartLoc,
671 SourceLocation EndLoc,
672 ArrayRef<OMPClause *> Clauses,
673 Stmt *AssociatedStmt) {
675 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *));
677 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * Clauses.size());
678 OMPOrderedDirective *Dir =
679 new (Mem) OMPOrderedDirective(StartLoc, EndLoc, Clauses.size());
680 Dir->setClauses(Clauses);
681 Dir->setAssociatedStmt(AssociatedStmt);
685 OMPOrderedDirective *OMPOrderedDirective::CreateEmpty(const ASTContext &C,
689 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *));
691 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * NumClauses);
692 return new (Mem) OMPOrderedDirective(NumClauses);
695 OMPAtomicDirective *OMPAtomicDirective::Create(
696 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
697 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *X, Expr *V,
698 Expr *E, Expr *UE, bool IsXLHSInRHSPart, bool IsPostfixUpdate) {
700 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *));
701 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
703 OMPAtomicDirective *Dir =
704 new (Mem) OMPAtomicDirective(StartLoc, EndLoc, Clauses.size());
705 Dir->setClauses(Clauses);
706 Dir->setAssociatedStmt(AssociatedStmt);
710 Dir->setUpdateExpr(UE);
711 Dir->IsXLHSInRHSPart = IsXLHSInRHSPart;
712 Dir->IsPostfixUpdate = IsPostfixUpdate;
716 OMPAtomicDirective *OMPAtomicDirective::CreateEmpty(const ASTContext &C,
720 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *));
722 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 5 * sizeof(Stmt *));
723 return new (Mem) OMPAtomicDirective(NumClauses);
726 OMPTargetDirective *OMPTargetDirective::Create(const ASTContext &C,
727 SourceLocation StartLoc,
728 SourceLocation EndLoc,
729 ArrayRef<OMPClause *> Clauses,
730 Stmt *AssociatedStmt) {
732 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *));
734 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
735 OMPTargetDirective *Dir =
736 new (Mem) OMPTargetDirective(StartLoc, EndLoc, Clauses.size());
737 Dir->setClauses(Clauses);
738 Dir->setAssociatedStmt(AssociatedStmt);
742 OMPTargetDirective *OMPTargetDirective::CreateEmpty(const ASTContext &C,
746 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *));
748 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
749 return new (Mem) OMPTargetDirective(NumClauses);
752 OMPTargetParallelDirective *OMPTargetParallelDirective::Create(
753 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
754 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
756 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *));
758 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
759 OMPTargetParallelDirective *Dir =
760 new (Mem) OMPTargetParallelDirective(StartLoc, EndLoc, Clauses.size());
761 Dir->setClauses(Clauses);
762 Dir->setAssociatedStmt(AssociatedStmt);
766 OMPTargetParallelDirective *
767 OMPTargetParallelDirective::CreateEmpty(const ASTContext &C,
768 unsigned NumClauses, EmptyShell) {
770 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *));
772 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
773 return new (Mem) OMPTargetParallelDirective(NumClauses);
776 OMPTargetParallelForDirective *OMPTargetParallelForDirective::Create(
777 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
778 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
779 const HelperExprs &Exprs, bool HasCancel) {
780 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective),
781 alignof(OMPClause *));
782 void *Mem = C.Allocate(
783 Size + sizeof(OMPClause *) * Clauses.size() +
784 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for));
785 OMPTargetParallelForDirective *Dir = new (Mem) OMPTargetParallelForDirective(
786 StartLoc, EndLoc, CollapsedNum, Clauses.size());
787 Dir->setClauses(Clauses);
788 Dir->setAssociatedStmt(AssociatedStmt);
789 Dir->setIterationVariable(Exprs.IterationVarRef);
790 Dir->setLastIteration(Exprs.LastIteration);
791 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
792 Dir->setPreCond(Exprs.PreCond);
793 Dir->setCond(Exprs.Cond);
794 Dir->setInit(Exprs.Init);
795 Dir->setInc(Exprs.Inc);
796 Dir->setIsLastIterVariable(Exprs.IL);
797 Dir->setLowerBoundVariable(Exprs.LB);
798 Dir->setUpperBoundVariable(Exprs.UB);
799 Dir->setStrideVariable(Exprs.ST);
800 Dir->setEnsureUpperBound(Exprs.EUB);
801 Dir->setNextLowerBound(Exprs.NLB);
802 Dir->setNextUpperBound(Exprs.NUB);
803 Dir->setNumIterations(Exprs.NumIterations);
804 Dir->setCounters(Exprs.Counters);
805 Dir->setPrivateCounters(Exprs.PrivateCounters);
806 Dir->setInits(Exprs.Inits);
807 Dir->setUpdates(Exprs.Updates);
808 Dir->setFinals(Exprs.Finals);
809 Dir->setDependentCounters(Exprs.DependentCounters);
810 Dir->setDependentInits(Exprs.DependentInits);
811 Dir->setFinalsConditions(Exprs.FinalsConditions);
812 Dir->setPreInits(Exprs.PreInits);
813 Dir->setHasCancel(HasCancel);
817 OMPTargetParallelForDirective *
818 OMPTargetParallelForDirective::CreateEmpty(const ASTContext &C,
820 unsigned CollapsedNum, EmptyShell) {
821 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective),
822 alignof(OMPClause *));
823 void *Mem = C.Allocate(
824 Size + sizeof(OMPClause *) * NumClauses +
825 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for));
826 return new (Mem) OMPTargetParallelForDirective(CollapsedNum, NumClauses);
829 OMPTargetDataDirective *OMPTargetDataDirective::Create(
830 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
831 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
832 void *Mem = C.Allocate(
833 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) +
834 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
835 OMPTargetDataDirective *Dir =
836 new (Mem) OMPTargetDataDirective(StartLoc, EndLoc, Clauses.size());
837 Dir->setClauses(Clauses);
838 Dir->setAssociatedStmt(AssociatedStmt);
842 OMPTargetDataDirective *OMPTargetDataDirective::CreateEmpty(const ASTContext &C,
845 void *Mem = C.Allocate(
846 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) +
847 sizeof(OMPClause *) * N + sizeof(Stmt *));
848 return new (Mem) OMPTargetDataDirective(N);
851 OMPTargetEnterDataDirective *OMPTargetEnterDataDirective::Create(
852 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
853 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
854 void *Mem = C.Allocate(
855 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) +
856 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
857 OMPTargetEnterDataDirective *Dir =
858 new (Mem) OMPTargetEnterDataDirective(StartLoc, EndLoc, Clauses.size());
859 Dir->setClauses(Clauses);
860 Dir->setAssociatedStmt(AssociatedStmt);
864 OMPTargetEnterDataDirective *
865 OMPTargetEnterDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
867 void *Mem = C.Allocate(
868 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) +
869 sizeof(OMPClause *) * N + sizeof(Stmt *));
870 return new (Mem) OMPTargetEnterDataDirective(N);
873 OMPTargetExitDataDirective *OMPTargetExitDataDirective::Create(
874 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
875 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
876 void *Mem = C.Allocate(
877 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) +
878 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
879 OMPTargetExitDataDirective *Dir =
880 new (Mem) OMPTargetExitDataDirective(StartLoc, EndLoc, Clauses.size());
881 Dir->setClauses(Clauses);
882 Dir->setAssociatedStmt(AssociatedStmt);
886 OMPTargetExitDataDirective *
887 OMPTargetExitDataDirective::CreateEmpty(const ASTContext &C, unsigned N,
889 void *Mem = C.Allocate(
890 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) +
891 sizeof(OMPClause *) * N + sizeof(Stmt *));
892 return new (Mem) OMPTargetExitDataDirective(N);
895 OMPTeamsDirective *OMPTeamsDirective::Create(const ASTContext &C,
896 SourceLocation StartLoc,
897 SourceLocation EndLoc,
898 ArrayRef<OMPClause *> Clauses,
899 Stmt *AssociatedStmt) {
901 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *));
903 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
904 OMPTeamsDirective *Dir =
905 new (Mem) OMPTeamsDirective(StartLoc, EndLoc, Clauses.size());
906 Dir->setClauses(Clauses);
907 Dir->setAssociatedStmt(AssociatedStmt);
911 OMPTeamsDirective *OMPTeamsDirective::CreateEmpty(const ASTContext &C,
915 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *));
917 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
918 return new (Mem) OMPTeamsDirective(NumClauses);
921 OMPTaskLoopDirective *OMPTaskLoopDirective::Create(
922 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
923 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
924 const HelperExprs &Exprs) {
926 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *));
928 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
929 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop));
930 OMPTaskLoopDirective *Dir = new (Mem)
931 OMPTaskLoopDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
932 Dir->setClauses(Clauses);
933 Dir->setAssociatedStmt(AssociatedStmt);
934 Dir->setIterationVariable(Exprs.IterationVarRef);
935 Dir->setLastIteration(Exprs.LastIteration);
936 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
937 Dir->setPreCond(Exprs.PreCond);
938 Dir->setCond(Exprs.Cond);
939 Dir->setInit(Exprs.Init);
940 Dir->setInc(Exprs.Inc);
941 Dir->setIsLastIterVariable(Exprs.IL);
942 Dir->setLowerBoundVariable(Exprs.LB);
943 Dir->setUpperBoundVariable(Exprs.UB);
944 Dir->setStrideVariable(Exprs.ST);
945 Dir->setEnsureUpperBound(Exprs.EUB);
946 Dir->setNextLowerBound(Exprs.NLB);
947 Dir->setNextUpperBound(Exprs.NUB);
948 Dir->setNumIterations(Exprs.NumIterations);
949 Dir->setCounters(Exprs.Counters);
950 Dir->setPrivateCounters(Exprs.PrivateCounters);
951 Dir->setInits(Exprs.Inits);
952 Dir->setUpdates(Exprs.Updates);
953 Dir->setFinals(Exprs.Finals);
954 Dir->setDependentCounters(Exprs.DependentCounters);
955 Dir->setDependentInits(Exprs.DependentInits);
956 Dir->setFinalsConditions(Exprs.FinalsConditions);
957 Dir->setPreInits(Exprs.PreInits);
961 OMPTaskLoopDirective *OMPTaskLoopDirective::CreateEmpty(const ASTContext &C,
963 unsigned CollapsedNum,
966 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *));
968 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
969 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop));
970 return new (Mem) OMPTaskLoopDirective(CollapsedNum, NumClauses);
973 OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create(
974 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
975 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
976 const HelperExprs &Exprs) {
978 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *));
979 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
981 numLoopChildren(CollapsedNum, OMPD_taskloop_simd));
982 OMPTaskLoopSimdDirective *Dir = new (Mem)
983 OMPTaskLoopSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
984 Dir->setClauses(Clauses);
985 Dir->setAssociatedStmt(AssociatedStmt);
986 Dir->setIterationVariable(Exprs.IterationVarRef);
987 Dir->setLastIteration(Exprs.LastIteration);
988 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
989 Dir->setPreCond(Exprs.PreCond);
990 Dir->setCond(Exprs.Cond);
991 Dir->setInit(Exprs.Init);
992 Dir->setInc(Exprs.Inc);
993 Dir->setIsLastIterVariable(Exprs.IL);
994 Dir->setLowerBoundVariable(Exprs.LB);
995 Dir->setUpperBoundVariable(Exprs.UB);
996 Dir->setStrideVariable(Exprs.ST);
997 Dir->setEnsureUpperBound(Exprs.EUB);
998 Dir->setNextLowerBound(Exprs.NLB);
999 Dir->setNextUpperBound(Exprs.NUB);
1000 Dir->setNumIterations(Exprs.NumIterations);
1001 Dir->setCounters(Exprs.Counters);
1002 Dir->setPrivateCounters(Exprs.PrivateCounters);
1003 Dir->setInits(Exprs.Inits);
1004 Dir->setUpdates(Exprs.Updates);
1005 Dir->setFinals(Exprs.Finals);
1006 Dir->setDependentCounters(Exprs.DependentCounters);
1007 Dir->setDependentInits(Exprs.DependentInits);
1008 Dir->setFinalsConditions(Exprs.FinalsConditions);
1009 Dir->setPreInits(Exprs.PreInits);
1013 OMPTaskLoopSimdDirective *
1014 OMPTaskLoopSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1015 unsigned CollapsedNum, EmptyShell) {
1017 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *));
1018 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1020 numLoopChildren(CollapsedNum, OMPD_taskloop_simd));
1021 return new (Mem) OMPTaskLoopSimdDirective(CollapsedNum, NumClauses);
1024 OMPMasterTaskLoopDirective *OMPMasterTaskLoopDirective::Create(
1025 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1026 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1027 const HelperExprs &Exprs) {
1029 llvm::alignTo(sizeof(OMPMasterTaskLoopDirective), alignof(OMPClause *));
1030 void *Mem = C.Allocate(
1031 Size + sizeof(OMPClause *) * Clauses.size() +
1032 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_master_taskloop));
1033 OMPMasterTaskLoopDirective *Dir = new (Mem) OMPMasterTaskLoopDirective(
1034 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1035 Dir->setClauses(Clauses);
1036 Dir->setAssociatedStmt(AssociatedStmt);
1037 Dir->setIterationVariable(Exprs.IterationVarRef);
1038 Dir->setLastIteration(Exprs.LastIteration);
1039 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1040 Dir->setPreCond(Exprs.PreCond);
1041 Dir->setCond(Exprs.Cond);
1042 Dir->setInit(Exprs.Init);
1043 Dir->setInc(Exprs.Inc);
1044 Dir->setIsLastIterVariable(Exprs.IL);
1045 Dir->setLowerBoundVariable(Exprs.LB);
1046 Dir->setUpperBoundVariable(Exprs.UB);
1047 Dir->setStrideVariable(Exprs.ST);
1048 Dir->setEnsureUpperBound(Exprs.EUB);
1049 Dir->setNextLowerBound(Exprs.NLB);
1050 Dir->setNextUpperBound(Exprs.NUB);
1051 Dir->setNumIterations(Exprs.NumIterations);
1052 Dir->setCounters(Exprs.Counters);
1053 Dir->setPrivateCounters(Exprs.PrivateCounters);
1054 Dir->setInits(Exprs.Inits);
1055 Dir->setUpdates(Exprs.Updates);
1056 Dir->setFinals(Exprs.Finals);
1057 Dir->setDependentCounters(Exprs.DependentCounters);
1058 Dir->setDependentInits(Exprs.DependentInits);
1059 Dir->setFinalsConditions(Exprs.FinalsConditions);
1060 Dir->setPreInits(Exprs.PreInits);
1064 OMPMasterTaskLoopDirective *
1065 OMPMasterTaskLoopDirective::CreateEmpty(const ASTContext &C,
1066 unsigned NumClauses,
1067 unsigned CollapsedNum, EmptyShell) {
1069 llvm::alignTo(sizeof(OMPMasterTaskLoopDirective), alignof(OMPClause *));
1070 void *Mem = C.Allocate(
1071 Size + sizeof(OMPClause *) * NumClauses +
1072 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_master_taskloop));
1073 return new (Mem) OMPMasterTaskLoopDirective(CollapsedNum, NumClauses);
1076 OMPMasterTaskLoopSimdDirective *OMPMasterTaskLoopSimdDirective::Create(
1077 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1078 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1079 const HelperExprs &Exprs) {
1080 unsigned Size = llvm::alignTo(sizeof(OMPMasterTaskLoopSimdDirective),
1081 alignof(OMPClause *));
1083 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1085 numLoopChildren(CollapsedNum, OMPD_master_taskloop_simd));
1086 auto *Dir = new (Mem) OMPMasterTaskLoopSimdDirective(
1087 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1088 Dir->setClauses(Clauses);
1089 Dir->setAssociatedStmt(AssociatedStmt);
1090 Dir->setIterationVariable(Exprs.IterationVarRef);
1091 Dir->setLastIteration(Exprs.LastIteration);
1092 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1093 Dir->setPreCond(Exprs.PreCond);
1094 Dir->setCond(Exprs.Cond);
1095 Dir->setInit(Exprs.Init);
1096 Dir->setInc(Exprs.Inc);
1097 Dir->setIsLastIterVariable(Exprs.IL);
1098 Dir->setLowerBoundVariable(Exprs.LB);
1099 Dir->setUpperBoundVariable(Exprs.UB);
1100 Dir->setStrideVariable(Exprs.ST);
1101 Dir->setEnsureUpperBound(Exprs.EUB);
1102 Dir->setNextLowerBound(Exprs.NLB);
1103 Dir->setNextUpperBound(Exprs.NUB);
1104 Dir->setNumIterations(Exprs.NumIterations);
1105 Dir->setCounters(Exprs.Counters);
1106 Dir->setPrivateCounters(Exprs.PrivateCounters);
1107 Dir->setInits(Exprs.Inits);
1108 Dir->setUpdates(Exprs.Updates);
1109 Dir->setFinals(Exprs.Finals);
1110 Dir->setDependentCounters(Exprs.DependentCounters);
1111 Dir->setDependentInits(Exprs.DependentInits);
1112 Dir->setFinalsConditions(Exprs.FinalsConditions);
1113 Dir->setPreInits(Exprs.PreInits);
1117 OMPMasterTaskLoopSimdDirective *
1118 OMPMasterTaskLoopSimdDirective::CreateEmpty(const ASTContext &C,
1119 unsigned NumClauses,
1120 unsigned CollapsedNum, EmptyShell) {
1121 unsigned Size = llvm::alignTo(sizeof(OMPMasterTaskLoopSimdDirective),
1122 alignof(OMPClause *));
1124 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1126 numLoopChildren(CollapsedNum, OMPD_master_taskloop_simd));
1127 return new (Mem) OMPMasterTaskLoopSimdDirective(CollapsedNum, NumClauses);
1130 OMPParallelMasterTaskLoopDirective *OMPParallelMasterTaskLoopDirective::Create(
1131 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1132 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1133 const HelperExprs &Exprs) {
1134 unsigned Size = llvm::alignTo(sizeof(OMPParallelMasterTaskLoopDirective),
1135 alignof(OMPClause *));
1136 void *Mem = C.Allocate(
1137 Size + sizeof(OMPClause *) * Clauses.size() +
1139 numLoopChildren(CollapsedNum, OMPD_parallel_master_taskloop));
1140 auto *Dir = new (Mem) OMPParallelMasterTaskLoopDirective(
1141 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1142 Dir->setClauses(Clauses);
1143 Dir->setAssociatedStmt(AssociatedStmt);
1144 Dir->setIterationVariable(Exprs.IterationVarRef);
1145 Dir->setLastIteration(Exprs.LastIteration);
1146 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1147 Dir->setPreCond(Exprs.PreCond);
1148 Dir->setCond(Exprs.Cond);
1149 Dir->setInit(Exprs.Init);
1150 Dir->setInc(Exprs.Inc);
1151 Dir->setIsLastIterVariable(Exprs.IL);
1152 Dir->setLowerBoundVariable(Exprs.LB);
1153 Dir->setUpperBoundVariable(Exprs.UB);
1154 Dir->setStrideVariable(Exprs.ST);
1155 Dir->setEnsureUpperBound(Exprs.EUB);
1156 Dir->setNextLowerBound(Exprs.NLB);
1157 Dir->setNextUpperBound(Exprs.NUB);
1158 Dir->setNumIterations(Exprs.NumIterations);
1159 Dir->setCounters(Exprs.Counters);
1160 Dir->setPrivateCounters(Exprs.PrivateCounters);
1161 Dir->setInits(Exprs.Inits);
1162 Dir->setUpdates(Exprs.Updates);
1163 Dir->setFinals(Exprs.Finals);
1164 Dir->setDependentCounters(Exprs.DependentCounters);
1165 Dir->setDependentInits(Exprs.DependentInits);
1166 Dir->setFinalsConditions(Exprs.FinalsConditions);
1167 Dir->setPreInits(Exprs.PreInits);
1171 OMPParallelMasterTaskLoopDirective *
1172 OMPParallelMasterTaskLoopDirective::CreateEmpty(const ASTContext &C,
1173 unsigned NumClauses,
1174 unsigned CollapsedNum,
1176 unsigned Size = llvm::alignTo(sizeof(OMPParallelMasterTaskLoopDirective),
1177 alignof(OMPClause *));
1178 void *Mem = C.Allocate(
1179 Size + sizeof(OMPClause *) * NumClauses +
1181 numLoopChildren(CollapsedNum, OMPD_parallel_master_taskloop));
1182 return new (Mem) OMPParallelMasterTaskLoopDirective(CollapsedNum, NumClauses);
1185 OMPDistributeDirective *OMPDistributeDirective::Create(
1186 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1187 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1188 const HelperExprs &Exprs) {
1190 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *));
1191 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1193 numLoopChildren(CollapsedNum, OMPD_distribute));
1194 OMPDistributeDirective *Dir = new (Mem)
1195 OMPDistributeDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
1196 Dir->setClauses(Clauses);
1197 Dir->setAssociatedStmt(AssociatedStmt);
1198 Dir->setIterationVariable(Exprs.IterationVarRef);
1199 Dir->setLastIteration(Exprs.LastIteration);
1200 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1201 Dir->setPreCond(Exprs.PreCond);
1202 Dir->setCond(Exprs.Cond);
1203 Dir->setInit(Exprs.Init);
1204 Dir->setInc(Exprs.Inc);
1205 Dir->setIsLastIterVariable(Exprs.IL);
1206 Dir->setLowerBoundVariable(Exprs.LB);
1207 Dir->setUpperBoundVariable(Exprs.UB);
1208 Dir->setStrideVariable(Exprs.ST);
1209 Dir->setEnsureUpperBound(Exprs.EUB);
1210 Dir->setNextLowerBound(Exprs.NLB);
1211 Dir->setNextUpperBound(Exprs.NUB);
1212 Dir->setNumIterations(Exprs.NumIterations);
1213 Dir->setCounters(Exprs.Counters);
1214 Dir->setPrivateCounters(Exprs.PrivateCounters);
1215 Dir->setInits(Exprs.Inits);
1216 Dir->setUpdates(Exprs.Updates);
1217 Dir->setFinals(Exprs.Finals);
1218 Dir->setDependentCounters(Exprs.DependentCounters);
1219 Dir->setDependentInits(Exprs.DependentInits);
1220 Dir->setFinalsConditions(Exprs.FinalsConditions);
1221 Dir->setPreInits(Exprs.PreInits);
1225 OMPDistributeDirective *
1226 OMPDistributeDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1227 unsigned CollapsedNum, EmptyShell) {
1229 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *));
1230 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1232 numLoopChildren(CollapsedNum, OMPD_distribute));
1233 return new (Mem) OMPDistributeDirective(CollapsedNum, NumClauses);
1236 OMPTargetUpdateDirective *OMPTargetUpdateDirective::Create(
1237 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1238 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1240 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *));
1242 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
1243 OMPTargetUpdateDirective *Dir =
1244 new (Mem) OMPTargetUpdateDirective(StartLoc, EndLoc, Clauses.size());
1245 Dir->setClauses(Clauses);
1246 Dir->setAssociatedStmt(AssociatedStmt);
1250 OMPTargetUpdateDirective *
1251 OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1254 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *));
1256 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
1257 return new (Mem) OMPTargetUpdateDirective(NumClauses);
1260 OMPDistributeParallelForDirective *OMPDistributeParallelForDirective::Create(
1261 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1262 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1263 const HelperExprs &Exprs, bool HasCancel) {
1264 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective),
1265 alignof(OMPClause *));
1266 void *Mem = C.Allocate(
1267 Size + sizeof(OMPClause *) * Clauses.size() +
1269 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for));
1270 OMPDistributeParallelForDirective *Dir =
1271 new (Mem) OMPDistributeParallelForDirective(StartLoc, EndLoc,
1272 CollapsedNum, Clauses.size());
1273 Dir->setClauses(Clauses);
1274 Dir->setAssociatedStmt(AssociatedStmt);
1275 Dir->setIterationVariable(Exprs.IterationVarRef);
1276 Dir->setLastIteration(Exprs.LastIteration);
1277 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1278 Dir->setPreCond(Exprs.PreCond);
1279 Dir->setCond(Exprs.Cond);
1280 Dir->setInit(Exprs.Init);
1281 Dir->setInc(Exprs.Inc);
1282 Dir->setIsLastIterVariable(Exprs.IL);
1283 Dir->setLowerBoundVariable(Exprs.LB);
1284 Dir->setUpperBoundVariable(Exprs.UB);
1285 Dir->setStrideVariable(Exprs.ST);
1286 Dir->setEnsureUpperBound(Exprs.EUB);
1287 Dir->setNextLowerBound(Exprs.NLB);
1288 Dir->setNextUpperBound(Exprs.NUB);
1289 Dir->setNumIterations(Exprs.NumIterations);
1290 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1291 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1292 Dir->setDistInc(Exprs.DistInc);
1293 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1294 Dir->setCounters(Exprs.Counters);
1295 Dir->setPrivateCounters(Exprs.PrivateCounters);
1296 Dir->setInits(Exprs.Inits);
1297 Dir->setUpdates(Exprs.Updates);
1298 Dir->setFinals(Exprs.Finals);
1299 Dir->setDependentCounters(Exprs.DependentCounters);
1300 Dir->setDependentInits(Exprs.DependentInits);
1301 Dir->setFinalsConditions(Exprs.FinalsConditions);
1302 Dir->setPreInits(Exprs.PreInits);
1303 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1304 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1305 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1306 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1307 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1308 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1309 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1310 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1311 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1312 Dir->HasCancel = HasCancel;
1316 OMPDistributeParallelForDirective *
1317 OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1318 unsigned NumClauses,
1319 unsigned CollapsedNum,
1321 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective),
1322 alignof(OMPClause *));
1323 void *Mem = C.Allocate(
1324 Size + sizeof(OMPClause *) * NumClauses +
1326 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for));
1327 return new (Mem) OMPDistributeParallelForDirective(CollapsedNum, NumClauses);
1330 OMPDistributeParallelForSimdDirective *
1331 OMPDistributeParallelForSimdDirective::Create(
1332 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1333 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1334 const HelperExprs &Exprs) {
1335 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective),
1336 alignof(OMPClause *));
1337 void *Mem = C.Allocate(
1338 Size + sizeof(OMPClause *) * Clauses.size() +
1340 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd));
1341 OMPDistributeParallelForSimdDirective *Dir = new (Mem)
1342 OMPDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum,
1344 Dir->setClauses(Clauses);
1345 Dir->setAssociatedStmt(AssociatedStmt);
1346 Dir->setIterationVariable(Exprs.IterationVarRef);
1347 Dir->setLastIteration(Exprs.LastIteration);
1348 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1349 Dir->setPreCond(Exprs.PreCond);
1350 Dir->setCond(Exprs.Cond);
1351 Dir->setInit(Exprs.Init);
1352 Dir->setInc(Exprs.Inc);
1353 Dir->setIsLastIterVariable(Exprs.IL);
1354 Dir->setLowerBoundVariable(Exprs.LB);
1355 Dir->setUpperBoundVariable(Exprs.UB);
1356 Dir->setStrideVariable(Exprs.ST);
1357 Dir->setEnsureUpperBound(Exprs.EUB);
1358 Dir->setNextLowerBound(Exprs.NLB);
1359 Dir->setNextUpperBound(Exprs.NUB);
1360 Dir->setNumIterations(Exprs.NumIterations);
1361 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1362 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1363 Dir->setDistInc(Exprs.DistInc);
1364 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1365 Dir->setCounters(Exprs.Counters);
1366 Dir->setPrivateCounters(Exprs.PrivateCounters);
1367 Dir->setInits(Exprs.Inits);
1368 Dir->setUpdates(Exprs.Updates);
1369 Dir->setFinals(Exprs.Finals);
1370 Dir->setDependentCounters(Exprs.DependentCounters);
1371 Dir->setDependentInits(Exprs.DependentInits);
1372 Dir->setFinalsConditions(Exprs.FinalsConditions);
1373 Dir->setPreInits(Exprs.PreInits);
1374 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1375 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1376 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1377 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1378 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1379 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1380 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1381 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1382 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1386 OMPDistributeParallelForSimdDirective *
1387 OMPDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1388 unsigned NumClauses,
1389 unsigned CollapsedNum,
1391 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective),
1392 alignof(OMPClause *));
1393 void *Mem = C.Allocate(
1394 Size + sizeof(OMPClause *) * NumClauses +
1396 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd));
1398 OMPDistributeParallelForSimdDirective(CollapsedNum, NumClauses);
1401 OMPDistributeSimdDirective *OMPDistributeSimdDirective::Create(
1402 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1403 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1404 const HelperExprs &Exprs) {
1406 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *));
1407 void *Mem = C.Allocate(
1408 Size + sizeof(OMPClause *) * Clauses.size() +
1410 numLoopChildren(CollapsedNum, OMPD_distribute_simd));
1411 OMPDistributeSimdDirective *Dir = new (Mem) OMPDistributeSimdDirective(
1412 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1413 Dir->setClauses(Clauses);
1414 Dir->setAssociatedStmt(AssociatedStmt);
1415 Dir->setIterationVariable(Exprs.IterationVarRef);
1416 Dir->setLastIteration(Exprs.LastIteration);
1417 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1418 Dir->setPreCond(Exprs.PreCond);
1419 Dir->setCond(Exprs.Cond);
1420 Dir->setInit(Exprs.Init);
1421 Dir->setInc(Exprs.Inc);
1422 Dir->setIsLastIterVariable(Exprs.IL);
1423 Dir->setLowerBoundVariable(Exprs.LB);
1424 Dir->setUpperBoundVariable(Exprs.UB);
1425 Dir->setStrideVariable(Exprs.ST);
1426 Dir->setEnsureUpperBound(Exprs.EUB);
1427 Dir->setNextLowerBound(Exprs.NLB);
1428 Dir->setNextUpperBound(Exprs.NUB);
1429 Dir->setNumIterations(Exprs.NumIterations);
1430 Dir->setCounters(Exprs.Counters);
1431 Dir->setPrivateCounters(Exprs.PrivateCounters);
1432 Dir->setInits(Exprs.Inits);
1433 Dir->setUpdates(Exprs.Updates);
1434 Dir->setFinals(Exprs.Finals);
1435 Dir->setDependentCounters(Exprs.DependentCounters);
1436 Dir->setDependentInits(Exprs.DependentInits);
1437 Dir->setFinalsConditions(Exprs.FinalsConditions);
1438 Dir->setPreInits(Exprs.PreInits);
1442 OMPDistributeSimdDirective *
1443 OMPDistributeSimdDirective::CreateEmpty(const ASTContext &C,
1444 unsigned NumClauses,
1445 unsigned CollapsedNum, EmptyShell) {
1447 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *));
1448 void *Mem = C.Allocate(
1449 Size + sizeof(OMPClause *) * NumClauses +
1451 numLoopChildren(CollapsedNum, OMPD_distribute_simd));
1452 return new (Mem) OMPDistributeSimdDirective(CollapsedNum, NumClauses);
1455 OMPTargetParallelForSimdDirective *OMPTargetParallelForSimdDirective::Create(
1456 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1457 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1458 const HelperExprs &Exprs) {
1459 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective),
1460 alignof(OMPClause *));
1461 void *Mem = C.Allocate(
1462 Size + sizeof(OMPClause *) * Clauses.size() +
1464 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd));
1465 OMPTargetParallelForSimdDirective *Dir =
1466 new (Mem) OMPTargetParallelForSimdDirective(StartLoc, EndLoc,
1467 CollapsedNum, Clauses.size());
1468 Dir->setClauses(Clauses);
1469 Dir->setAssociatedStmt(AssociatedStmt);
1470 Dir->setIterationVariable(Exprs.IterationVarRef);
1471 Dir->setLastIteration(Exprs.LastIteration);
1472 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1473 Dir->setPreCond(Exprs.PreCond);
1474 Dir->setCond(Exprs.Cond);
1475 Dir->setInit(Exprs.Init);
1476 Dir->setInc(Exprs.Inc);
1477 Dir->setIsLastIterVariable(Exprs.IL);
1478 Dir->setLowerBoundVariable(Exprs.LB);
1479 Dir->setUpperBoundVariable(Exprs.UB);
1480 Dir->setStrideVariable(Exprs.ST);
1481 Dir->setEnsureUpperBound(Exprs.EUB);
1482 Dir->setNextLowerBound(Exprs.NLB);
1483 Dir->setNextUpperBound(Exprs.NUB);
1484 Dir->setNumIterations(Exprs.NumIterations);
1485 Dir->setCounters(Exprs.Counters);
1486 Dir->setPrivateCounters(Exprs.PrivateCounters);
1487 Dir->setInits(Exprs.Inits);
1488 Dir->setUpdates(Exprs.Updates);
1489 Dir->setFinals(Exprs.Finals);
1490 Dir->setDependentCounters(Exprs.DependentCounters);
1491 Dir->setDependentInits(Exprs.DependentInits);
1492 Dir->setFinalsConditions(Exprs.FinalsConditions);
1493 Dir->setPreInits(Exprs.PreInits);
1497 OMPTargetParallelForSimdDirective *
1498 OMPTargetParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1499 unsigned NumClauses,
1500 unsigned CollapsedNum,
1502 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective),
1503 alignof(OMPClause *));
1504 void *Mem = C.Allocate(
1505 Size + sizeof(OMPClause *) * NumClauses +
1507 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd));
1508 return new (Mem) OMPTargetParallelForSimdDirective(CollapsedNum, NumClauses);
1511 OMPTargetSimdDirective *
1512 OMPTargetSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
1513 SourceLocation EndLoc, unsigned CollapsedNum,
1514 ArrayRef<OMPClause *> Clauses,
1515 Stmt *AssociatedStmt, const HelperExprs &Exprs) {
1517 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *));
1518 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1520 numLoopChildren(CollapsedNum, OMPD_target_simd));
1521 OMPTargetSimdDirective *Dir = new (Mem)
1522 OMPTargetSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
1523 Dir->setClauses(Clauses);
1524 Dir->setAssociatedStmt(AssociatedStmt);
1525 Dir->setIterationVariable(Exprs.IterationVarRef);
1526 Dir->setLastIteration(Exprs.LastIteration);
1527 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1528 Dir->setPreCond(Exprs.PreCond);
1529 Dir->setCond(Exprs.Cond);
1530 Dir->setInit(Exprs.Init);
1531 Dir->setInc(Exprs.Inc);
1532 Dir->setCounters(Exprs.Counters);
1533 Dir->setPrivateCounters(Exprs.PrivateCounters);
1534 Dir->setInits(Exprs.Inits);
1535 Dir->setUpdates(Exprs.Updates);
1536 Dir->setFinals(Exprs.Finals);
1537 Dir->setDependentCounters(Exprs.DependentCounters);
1538 Dir->setDependentInits(Exprs.DependentInits);
1539 Dir->setFinalsConditions(Exprs.FinalsConditions);
1540 Dir->setPreInits(Exprs.PreInits);
1544 OMPTargetSimdDirective *
1545 OMPTargetSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1546 unsigned CollapsedNum, EmptyShell) {
1548 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *));
1549 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1551 numLoopChildren(CollapsedNum, OMPD_target_simd));
1552 return new (Mem) OMPTargetSimdDirective(CollapsedNum, NumClauses);
1555 OMPTeamsDistributeDirective *OMPTeamsDistributeDirective::Create(
1556 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1557 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1558 const HelperExprs &Exprs) {
1560 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *));
1561 void *Mem = C.Allocate(
1562 Size + sizeof(OMPClause *) * Clauses.size() +
1563 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute));
1564 OMPTeamsDistributeDirective *Dir = new (Mem) OMPTeamsDistributeDirective(
1565 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1566 Dir->setClauses(Clauses);
1567 Dir->setAssociatedStmt(AssociatedStmt);
1568 Dir->setIterationVariable(Exprs.IterationVarRef);
1569 Dir->setLastIteration(Exprs.LastIteration);
1570 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1571 Dir->setPreCond(Exprs.PreCond);
1572 Dir->setCond(Exprs.Cond);
1573 Dir->setInit(Exprs.Init);
1574 Dir->setInc(Exprs.Inc);
1575 Dir->setIsLastIterVariable(Exprs.IL);
1576 Dir->setLowerBoundVariable(Exprs.LB);
1577 Dir->setUpperBoundVariable(Exprs.UB);
1578 Dir->setStrideVariable(Exprs.ST);
1579 Dir->setEnsureUpperBound(Exprs.EUB);
1580 Dir->setNextLowerBound(Exprs.NLB);
1581 Dir->setNextUpperBound(Exprs.NUB);
1582 Dir->setNumIterations(Exprs.NumIterations);
1583 Dir->setCounters(Exprs.Counters);
1584 Dir->setPrivateCounters(Exprs.PrivateCounters);
1585 Dir->setInits(Exprs.Inits);
1586 Dir->setUpdates(Exprs.Updates);
1587 Dir->setFinals(Exprs.Finals);
1588 Dir->setDependentCounters(Exprs.DependentCounters);
1589 Dir->setDependentInits(Exprs.DependentInits);
1590 Dir->setFinalsConditions(Exprs.FinalsConditions);
1591 Dir->setPreInits(Exprs.PreInits);
1595 OMPTeamsDistributeDirective *
1596 OMPTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1597 unsigned NumClauses,
1598 unsigned CollapsedNum, EmptyShell) {
1600 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *));
1601 void *Mem = C.Allocate(
1602 Size + sizeof(OMPClause *) * NumClauses +
1603 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute));
1604 return new (Mem) OMPTeamsDistributeDirective(CollapsedNum, NumClauses);
1607 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::Create(
1608 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1609 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1610 const HelperExprs &Exprs) {
1611 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective),
1612 alignof(OMPClause *));
1614 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1616 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd));
1617 OMPTeamsDistributeSimdDirective *Dir =
1618 new (Mem) OMPTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum,
1620 Dir->setClauses(Clauses);
1621 Dir->setAssociatedStmt(AssociatedStmt);
1622 Dir->setIterationVariable(Exprs.IterationVarRef);
1623 Dir->setLastIteration(Exprs.LastIteration);
1624 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1625 Dir->setPreCond(Exprs.PreCond);
1626 Dir->setCond(Exprs.Cond);
1627 Dir->setInit(Exprs.Init);
1628 Dir->setInc(Exprs.Inc);
1629 Dir->setIsLastIterVariable(Exprs.IL);
1630 Dir->setLowerBoundVariable(Exprs.LB);
1631 Dir->setUpperBoundVariable(Exprs.UB);
1632 Dir->setStrideVariable(Exprs.ST);
1633 Dir->setEnsureUpperBound(Exprs.EUB);
1634 Dir->setNextLowerBound(Exprs.NLB);
1635 Dir->setNextUpperBound(Exprs.NUB);
1636 Dir->setNumIterations(Exprs.NumIterations);
1637 Dir->setCounters(Exprs.Counters);
1638 Dir->setPrivateCounters(Exprs.PrivateCounters);
1639 Dir->setInits(Exprs.Inits);
1640 Dir->setUpdates(Exprs.Updates);
1641 Dir->setFinals(Exprs.Finals);
1642 Dir->setDependentCounters(Exprs.DependentCounters);
1643 Dir->setDependentInits(Exprs.DependentInits);
1644 Dir->setFinalsConditions(Exprs.FinalsConditions);
1645 Dir->setPreInits(Exprs.PreInits);
1649 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::CreateEmpty(
1650 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
1652 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective),
1653 alignof(OMPClause *));
1655 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1657 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd));
1658 return new (Mem) OMPTeamsDistributeSimdDirective(CollapsedNum, NumClauses);
1661 OMPTeamsDistributeParallelForSimdDirective *
1662 OMPTeamsDistributeParallelForSimdDirective::Create(
1663 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1664 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1665 const HelperExprs &Exprs) {
1666 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective),
1667 alignof(OMPClause *));
1669 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
1671 numLoopChildren(CollapsedNum,
1672 OMPD_teams_distribute_parallel_for_simd));
1673 OMPTeamsDistributeParallelForSimdDirective *Dir = new (Mem)
1674 OMPTeamsDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum,
1676 Dir->setClauses(Clauses);
1677 Dir->setAssociatedStmt(AssociatedStmt);
1678 Dir->setIterationVariable(Exprs.IterationVarRef);
1679 Dir->setLastIteration(Exprs.LastIteration);
1680 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1681 Dir->setPreCond(Exprs.PreCond);
1682 Dir->setCond(Exprs.Cond);
1683 Dir->setInit(Exprs.Init);
1684 Dir->setInc(Exprs.Inc);
1685 Dir->setIsLastIterVariable(Exprs.IL);
1686 Dir->setLowerBoundVariable(Exprs.LB);
1687 Dir->setUpperBoundVariable(Exprs.UB);
1688 Dir->setStrideVariable(Exprs.ST);
1689 Dir->setEnsureUpperBound(Exprs.EUB);
1690 Dir->setNextLowerBound(Exprs.NLB);
1691 Dir->setNextUpperBound(Exprs.NUB);
1692 Dir->setNumIterations(Exprs.NumIterations);
1693 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1694 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1695 Dir->setDistInc(Exprs.DistInc);
1696 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1697 Dir->setCounters(Exprs.Counters);
1698 Dir->setPrivateCounters(Exprs.PrivateCounters);
1699 Dir->setInits(Exprs.Inits);
1700 Dir->setUpdates(Exprs.Updates);
1701 Dir->setFinals(Exprs.Finals);
1702 Dir->setDependentCounters(Exprs.DependentCounters);
1703 Dir->setDependentInits(Exprs.DependentInits);
1704 Dir->setFinalsConditions(Exprs.FinalsConditions);
1705 Dir->setPreInits(Exprs.PreInits);
1706 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1707 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1708 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1709 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1710 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1711 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1712 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1713 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1714 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1718 OMPTeamsDistributeParallelForSimdDirective *
1719 OMPTeamsDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C,
1720 unsigned NumClauses,
1721 unsigned CollapsedNum,
1723 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective),
1724 alignof(OMPClause *));
1726 C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
1728 numLoopChildren(CollapsedNum,
1729 OMPD_teams_distribute_parallel_for_simd));
1731 OMPTeamsDistributeParallelForSimdDirective(CollapsedNum, NumClauses);
1734 OMPTeamsDistributeParallelForDirective *
1735 OMPTeamsDistributeParallelForDirective::Create(
1736 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1737 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1738 const HelperExprs &Exprs, bool HasCancel) {
1739 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective),
1740 alignof(OMPClause *));
1741 void *Mem = C.Allocate(
1742 Size + sizeof(OMPClause *) * Clauses.size() +
1744 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for));
1745 OMPTeamsDistributeParallelForDirective *Dir = new (Mem)
1746 OMPTeamsDistributeParallelForDirective(StartLoc, EndLoc, CollapsedNum,
1748 Dir->setClauses(Clauses);
1749 Dir->setAssociatedStmt(AssociatedStmt);
1750 Dir->setIterationVariable(Exprs.IterationVarRef);
1751 Dir->setLastIteration(Exprs.LastIteration);
1752 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1753 Dir->setPreCond(Exprs.PreCond);
1754 Dir->setCond(Exprs.Cond);
1755 Dir->setInit(Exprs.Init);
1756 Dir->setInc(Exprs.Inc);
1757 Dir->setIsLastIterVariable(Exprs.IL);
1758 Dir->setLowerBoundVariable(Exprs.LB);
1759 Dir->setUpperBoundVariable(Exprs.UB);
1760 Dir->setStrideVariable(Exprs.ST);
1761 Dir->setEnsureUpperBound(Exprs.EUB);
1762 Dir->setNextLowerBound(Exprs.NLB);
1763 Dir->setNextUpperBound(Exprs.NUB);
1764 Dir->setNumIterations(Exprs.NumIterations);
1765 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1766 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1767 Dir->setDistInc(Exprs.DistInc);
1768 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1769 Dir->setCounters(Exprs.Counters);
1770 Dir->setPrivateCounters(Exprs.PrivateCounters);
1771 Dir->setInits(Exprs.Inits);
1772 Dir->setUpdates(Exprs.Updates);
1773 Dir->setFinals(Exprs.Finals);
1774 Dir->setDependentCounters(Exprs.DependentCounters);
1775 Dir->setDependentInits(Exprs.DependentInits);
1776 Dir->setFinalsConditions(Exprs.FinalsConditions);
1777 Dir->setPreInits(Exprs.PreInits);
1778 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1779 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1780 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1781 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1782 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1783 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1784 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1785 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1786 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1787 Dir->HasCancel = HasCancel;
1791 OMPTeamsDistributeParallelForDirective *
1792 OMPTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1793 unsigned NumClauses,
1794 unsigned CollapsedNum,
1796 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective),
1797 alignof(OMPClause *));
1798 void *Mem = C.Allocate(
1799 Size + sizeof(OMPClause *) * NumClauses +
1801 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for));
1803 OMPTeamsDistributeParallelForDirective(CollapsedNum, NumClauses);
1806 OMPTargetTeamsDirective *OMPTargetTeamsDirective::Create(
1807 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1808 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
1810 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *));
1812 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
1813 OMPTargetTeamsDirective *Dir =
1814 new (Mem) OMPTargetTeamsDirective(StartLoc, EndLoc, Clauses.size());
1815 Dir->setClauses(Clauses);
1816 Dir->setAssociatedStmt(AssociatedStmt);
1820 OMPTargetTeamsDirective *
1821 OMPTargetTeamsDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses,
1824 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *));
1826 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
1827 return new (Mem) OMPTargetTeamsDirective(NumClauses);
1830 OMPTargetTeamsDistributeDirective *OMPTargetTeamsDistributeDirective::Create(
1831 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1832 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1833 const HelperExprs &Exprs) {
1834 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective),
1835 alignof(OMPClause *));
1836 void *Mem = C.Allocate(
1837 Size + sizeof(OMPClause *) * Clauses.size() +
1839 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute));
1840 OMPTargetTeamsDistributeDirective *Dir =
1841 new (Mem) OMPTargetTeamsDistributeDirective(StartLoc, EndLoc, CollapsedNum,
1843 Dir->setClauses(Clauses);
1844 Dir->setAssociatedStmt(AssociatedStmt);
1845 Dir->setIterationVariable(Exprs.IterationVarRef);
1846 Dir->setLastIteration(Exprs.LastIteration);
1847 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1848 Dir->setPreCond(Exprs.PreCond);
1849 Dir->setCond(Exprs.Cond);
1850 Dir->setInit(Exprs.Init);
1851 Dir->setInc(Exprs.Inc);
1852 Dir->setIsLastIterVariable(Exprs.IL);
1853 Dir->setLowerBoundVariable(Exprs.LB);
1854 Dir->setUpperBoundVariable(Exprs.UB);
1855 Dir->setStrideVariable(Exprs.ST);
1856 Dir->setEnsureUpperBound(Exprs.EUB);
1857 Dir->setNextLowerBound(Exprs.NLB);
1858 Dir->setNextUpperBound(Exprs.NUB);
1859 Dir->setNumIterations(Exprs.NumIterations);
1860 Dir->setCounters(Exprs.Counters);
1861 Dir->setPrivateCounters(Exprs.PrivateCounters);
1862 Dir->setInits(Exprs.Inits);
1863 Dir->setUpdates(Exprs.Updates);
1864 Dir->setFinals(Exprs.Finals);
1865 Dir->setDependentCounters(Exprs.DependentCounters);
1866 Dir->setDependentInits(Exprs.DependentInits);
1867 Dir->setFinalsConditions(Exprs.FinalsConditions);
1868 Dir->setPreInits(Exprs.PreInits);
1872 OMPTargetTeamsDistributeDirective *
1873 OMPTargetTeamsDistributeDirective::CreateEmpty(const ASTContext &C,
1874 unsigned NumClauses,
1875 unsigned CollapsedNum,
1877 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective),
1878 alignof(OMPClause *));
1879 void *Mem = C.Allocate(
1880 Size + sizeof(OMPClause *) * NumClauses +
1882 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute));
1883 return new (Mem) OMPTargetTeamsDistributeDirective(CollapsedNum, NumClauses);
1886 OMPTargetTeamsDistributeParallelForDirective *
1887 OMPTargetTeamsDistributeParallelForDirective::Create(
1888 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1889 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1890 const HelperExprs &Exprs, bool HasCancel) {
1892 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective),
1893 alignof(OMPClause *));
1894 void *Mem = C.Allocate(
1895 Size + sizeof(OMPClause *) * Clauses.size() +
1897 numLoopChildren(CollapsedNum,
1898 OMPD_target_teams_distribute_parallel_for));
1899 OMPTargetTeamsDistributeParallelForDirective *Dir =
1900 new (Mem) OMPTargetTeamsDistributeParallelForDirective(
1901 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1902 Dir->setClauses(Clauses);
1903 Dir->setAssociatedStmt(AssociatedStmt);
1904 Dir->setIterationVariable(Exprs.IterationVarRef);
1905 Dir->setLastIteration(Exprs.LastIteration);
1906 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1907 Dir->setPreCond(Exprs.PreCond);
1908 Dir->setCond(Exprs.Cond);
1909 Dir->setInit(Exprs.Init);
1910 Dir->setInc(Exprs.Inc);
1911 Dir->setIsLastIterVariable(Exprs.IL);
1912 Dir->setLowerBoundVariable(Exprs.LB);
1913 Dir->setUpperBoundVariable(Exprs.UB);
1914 Dir->setStrideVariable(Exprs.ST);
1915 Dir->setEnsureUpperBound(Exprs.EUB);
1916 Dir->setNextLowerBound(Exprs.NLB);
1917 Dir->setNextUpperBound(Exprs.NUB);
1918 Dir->setNumIterations(Exprs.NumIterations);
1919 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1920 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1921 Dir->setDistInc(Exprs.DistInc);
1922 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1923 Dir->setCounters(Exprs.Counters);
1924 Dir->setPrivateCounters(Exprs.PrivateCounters);
1925 Dir->setInits(Exprs.Inits);
1926 Dir->setUpdates(Exprs.Updates);
1927 Dir->setFinals(Exprs.Finals);
1928 Dir->setDependentCounters(Exprs.DependentCounters);
1929 Dir->setDependentInits(Exprs.DependentInits);
1930 Dir->setFinalsConditions(Exprs.FinalsConditions);
1931 Dir->setPreInits(Exprs.PreInits);
1932 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
1933 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
1934 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
1935 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
1936 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
1937 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
1938 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
1939 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
1940 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
1941 Dir->HasCancel = HasCancel;
1945 OMPTargetTeamsDistributeParallelForDirective *
1946 OMPTargetTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C,
1947 unsigned NumClauses,
1948 unsigned CollapsedNum,
1951 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective),
1952 alignof(OMPClause *));
1953 void *Mem = C.Allocate(
1954 Size + sizeof(OMPClause *) * NumClauses +
1956 numLoopChildren(CollapsedNum,
1957 OMPD_target_teams_distribute_parallel_for));
1959 OMPTargetTeamsDistributeParallelForDirective(CollapsedNum, NumClauses);
1962 OMPTargetTeamsDistributeParallelForSimdDirective *
1963 OMPTargetTeamsDistributeParallelForSimdDirective::Create(
1964 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
1965 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
1966 const HelperExprs &Exprs) {
1968 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective),
1969 alignof(OMPClause *));
1970 void *Mem = C.Allocate(
1971 Size + sizeof(OMPClause *) * Clauses.size() +
1973 numLoopChildren(CollapsedNum,
1974 OMPD_target_teams_distribute_parallel_for_simd));
1975 OMPTargetTeamsDistributeParallelForSimdDirective *Dir =
1976 new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective(
1977 StartLoc, EndLoc, CollapsedNum, Clauses.size());
1978 Dir->setClauses(Clauses);
1979 Dir->setAssociatedStmt(AssociatedStmt);
1980 Dir->setIterationVariable(Exprs.IterationVarRef);
1981 Dir->setLastIteration(Exprs.LastIteration);
1982 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
1983 Dir->setPreCond(Exprs.PreCond);
1984 Dir->setCond(Exprs.Cond);
1985 Dir->setInit(Exprs.Init);
1986 Dir->setInc(Exprs.Inc);
1987 Dir->setIsLastIterVariable(Exprs.IL);
1988 Dir->setLowerBoundVariable(Exprs.LB);
1989 Dir->setUpperBoundVariable(Exprs.UB);
1990 Dir->setStrideVariable(Exprs.ST);
1991 Dir->setEnsureUpperBound(Exprs.EUB);
1992 Dir->setNextLowerBound(Exprs.NLB);
1993 Dir->setNextUpperBound(Exprs.NUB);
1994 Dir->setNumIterations(Exprs.NumIterations);
1995 Dir->setPrevLowerBoundVariable(Exprs.PrevLB);
1996 Dir->setPrevUpperBoundVariable(Exprs.PrevUB);
1997 Dir->setDistInc(Exprs.DistInc);
1998 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB);
1999 Dir->setCounters(Exprs.Counters);
2000 Dir->setPrivateCounters(Exprs.PrivateCounters);
2001 Dir->setInits(Exprs.Inits);
2002 Dir->setUpdates(Exprs.Updates);
2003 Dir->setFinals(Exprs.Finals);
2004 Dir->setDependentCounters(Exprs.DependentCounters);
2005 Dir->setDependentInits(Exprs.DependentInits);
2006 Dir->setFinalsConditions(Exprs.FinalsConditions);
2007 Dir->setPreInits(Exprs.PreInits);
2008 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB);
2009 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB);
2010 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB);
2011 Dir->setCombinedInit(Exprs.DistCombinedFields.Init);
2012 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond);
2013 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB);
2014 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB);
2015 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond);
2016 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond);
2020 OMPTargetTeamsDistributeParallelForSimdDirective *
2021 OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty(
2022 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum,
2025 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective),
2026 alignof(OMPClause *));
2027 void *Mem = C.Allocate(
2028 Size + sizeof(OMPClause *) * NumClauses +
2030 numLoopChildren(CollapsedNum,
2031 OMPD_target_teams_distribute_parallel_for_simd));
2032 return new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective(
2033 CollapsedNum, NumClauses);
2036 OMPTargetTeamsDistributeSimdDirective *
2037 OMPTargetTeamsDistributeSimdDirective::Create(
2038 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
2039 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt,
2040 const HelperExprs &Exprs) {
2041 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective),
2042 alignof(OMPClause *));
2043 void *Mem = C.Allocate(
2044 Size + sizeof(OMPClause *) * Clauses.size() +
2046 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd));
2047 OMPTargetTeamsDistributeSimdDirective *Dir = new (Mem)
2048 OMPTargetTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum,
2050 Dir->setClauses(Clauses);
2051 Dir->setAssociatedStmt(AssociatedStmt);
2052 Dir->setIterationVariable(Exprs.IterationVarRef);
2053 Dir->setLastIteration(Exprs.LastIteration);
2054 Dir->setCalcLastIteration(Exprs.CalcLastIteration);
2055 Dir->setPreCond(Exprs.PreCond);
2056 Dir->setCond(Exprs.Cond);
2057 Dir->setInit(Exprs.Init);
2058 Dir->setInc(Exprs.Inc);
2059 Dir->setIsLastIterVariable(Exprs.IL);
2060 Dir->setLowerBoundVariable(Exprs.LB);
2061 Dir->setUpperBoundVariable(Exprs.UB);
2062 Dir->setStrideVariable(Exprs.ST);
2063 Dir->setEnsureUpperBound(Exprs.EUB);
2064 Dir->setNextLowerBound(Exprs.NLB);
2065 Dir->setNextUpperBound(Exprs.NUB);
2066 Dir->setNumIterations(Exprs.NumIterations);
2067 Dir->setCounters(Exprs.Counters);
2068 Dir->setPrivateCounters(Exprs.PrivateCounters);
2069 Dir->setInits(Exprs.Inits);
2070 Dir->setUpdates(Exprs.Updates);
2071 Dir->setFinals(Exprs.Finals);
2072 Dir->setDependentCounters(Exprs.DependentCounters);
2073 Dir->setDependentInits(Exprs.DependentInits);
2074 Dir->setFinalsConditions(Exprs.FinalsConditions);
2075 Dir->setPreInits(Exprs.PreInits);
2079 OMPTargetTeamsDistributeSimdDirective *
2080 OMPTargetTeamsDistributeSimdDirective::CreateEmpty(const ASTContext &C,
2081 unsigned NumClauses,
2082 unsigned CollapsedNum,
2084 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective),
2085 alignof(OMPClause *));
2086 void *Mem = C.Allocate(
2087 Size + sizeof(OMPClause *) * NumClauses +
2089 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd));
2091 OMPTargetTeamsDistributeSimdDirective(CollapsedNum, NumClauses);