StmtOpenMP.cpp revision 321369
1//===--- StmtOpenMP.cpp - Classes for OpenMP directives -------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements the subclesses of Stmt class declared in StmtOpenMP.h 11// 12//===----------------------------------------------------------------------===// 13 14#include "clang/AST/StmtOpenMP.h" 15 16#include "clang/AST/ASTContext.h" 17 18using namespace clang; 19 20void 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()); 24} 25 26void 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()); 30} 31 32void OMPLoopDirective::setPrivateCounters(ArrayRef<Expr *> A) { 33 assert(A.size() == getCollapsedNumber() && "Number of loop private counters " 34 "is not the same as the collapsed " 35 "number"); 36 std::copy(A.begin(), A.end(), getPrivateCounters().begin()); 37} 38 39void 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()); 43} 44 45void 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()); 49} 50 51void 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()); 55} 56 57OMPParallelDirective *OMPParallelDirective::Create( 58 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 59 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) { 60 unsigned Size = 61 llvm::alignTo(sizeof(OMPParallelDirective), alignof(OMPClause *)); 62 void *Mem = 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); 69 return Dir; 70} 71 72OMPParallelDirective *OMPParallelDirective::CreateEmpty(const ASTContext &C, 73 unsigned NumClauses, 74 EmptyShell) { 75 unsigned Size = 76 llvm::alignTo(sizeof(OMPParallelDirective), alignof(OMPClause *)); 77 void *Mem = 78 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 79 return new (Mem) OMPParallelDirective(NumClauses); 80} 81 82OMPSimdDirective * 83OMPSimdDirective::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 *)); 88 void *Mem = 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); 108 return Dir; 109} 110 111OMPSimdDirective *OMPSimdDirective::CreateEmpty(const ASTContext &C, 112 unsigned NumClauses, 113 unsigned CollapsedNum, 114 EmptyShell) { 115 unsigned Size = llvm::alignTo(sizeof(OMPSimdDirective), alignof(OMPClause *)); 116 void *Mem = 117 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 118 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_simd)); 119 return new (Mem) OMPSimdDirective(CollapsedNum, NumClauses); 120} 121 122OMPForDirective * 123OMPForDirective::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 *)); 128 void *Mem = 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); 157 return Dir; 158} 159 160OMPForDirective *OMPForDirective::CreateEmpty(const ASTContext &C, 161 unsigned NumClauses, 162 unsigned CollapsedNum, 163 EmptyShell) { 164 unsigned Size = llvm::alignTo(sizeof(OMPForDirective), alignof(OMPClause *)); 165 void *Mem = 166 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 167 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for)); 168 return new (Mem) OMPForDirective(CollapsedNum, NumClauses); 169} 170 171OMPForSimdDirective * 172OMPForSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc, 173 SourceLocation EndLoc, unsigned CollapsedNum, 174 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 175 const HelperExprs &Exprs) { 176 unsigned Size = 177 llvm::alignTo(sizeof(OMPForSimdDirective), alignof(OMPClause *)); 178 void *Mem = 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); 206 return Dir; 207} 208 209OMPForSimdDirective *OMPForSimdDirective::CreateEmpty(const ASTContext &C, 210 unsigned NumClauses, 211 unsigned CollapsedNum, 212 EmptyShell) { 213 unsigned Size = 214 llvm::alignTo(sizeof(OMPForSimdDirective), alignof(OMPClause *)); 215 void *Mem = 216 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 217 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_for_simd)); 218 return new (Mem) OMPForSimdDirective(CollapsedNum, NumClauses); 219} 220 221OMPSectionsDirective *OMPSectionsDirective::Create( 222 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 223 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) { 224 unsigned Size = 225 llvm::alignTo(sizeof(OMPSectionsDirective), alignof(OMPClause *)); 226 void *Mem = 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); 233 return Dir; 234} 235 236OMPSectionsDirective *OMPSectionsDirective::CreateEmpty(const ASTContext &C, 237 unsigned NumClauses, 238 EmptyShell) { 239 unsigned Size = 240 llvm::alignTo(sizeof(OMPSectionsDirective), alignof(OMPClause *)); 241 void *Mem = 242 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 243 return new (Mem) OMPSectionsDirective(NumClauses); 244} 245 246OMPSectionDirective *OMPSectionDirective::Create(const ASTContext &C, 247 SourceLocation StartLoc, 248 SourceLocation EndLoc, 249 Stmt *AssociatedStmt, 250 bool HasCancel) { 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); 256 return Dir; 257} 258 259OMPSectionDirective *OMPSectionDirective::CreateEmpty(const ASTContext &C, 260 EmptyShell) { 261 unsigned Size = llvm::alignTo(sizeof(OMPSectionDirective), alignof(Stmt *)); 262 void *Mem = C.Allocate(Size + sizeof(Stmt *)); 263 return new (Mem) OMPSectionDirective(); 264} 265 266OMPSingleDirective *OMPSingleDirective::Create(const ASTContext &C, 267 SourceLocation StartLoc, 268 SourceLocation EndLoc, 269 ArrayRef<OMPClause *> Clauses, 270 Stmt *AssociatedStmt) { 271 unsigned Size = 272 llvm::alignTo(sizeof(OMPSingleDirective), alignof(OMPClause *)); 273 void *Mem = 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); 279 return Dir; 280} 281 282OMPSingleDirective *OMPSingleDirective::CreateEmpty(const ASTContext &C, 283 unsigned NumClauses, 284 EmptyShell) { 285 unsigned Size = 286 llvm::alignTo(sizeof(OMPSingleDirective), alignof(OMPClause *)); 287 void *Mem = 288 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 289 return new (Mem) OMPSingleDirective(NumClauses); 290} 291 292OMPMasterDirective *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); 300 return Dir; 301} 302 303OMPMasterDirective *OMPMasterDirective::CreateEmpty(const ASTContext &C, 304 EmptyShell) { 305 unsigned Size = llvm::alignTo(sizeof(OMPMasterDirective), alignof(Stmt *)); 306 void *Mem = C.Allocate(Size + sizeof(Stmt *)); 307 return new (Mem) OMPMasterDirective(); 308} 309 310OMPCriticalDirective *OMPCriticalDirective::Create( 311 const ASTContext &C, const DeclarationNameInfo &Name, 312 SourceLocation StartLoc, SourceLocation EndLoc, 313 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 314 unsigned Size = 315 llvm::alignTo(sizeof(OMPCriticalDirective), alignof(OMPClause *)); 316 void *Mem = 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); 322 return Dir; 323} 324 325OMPCriticalDirective *OMPCriticalDirective::CreateEmpty(const ASTContext &C, 326 unsigned NumClauses, 327 EmptyShell) { 328 unsigned Size = 329 llvm::alignTo(sizeof(OMPCriticalDirective), alignof(OMPClause *)); 330 void *Mem = 331 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 332 return new (Mem) OMPCriticalDirective(NumClauses); 333} 334 335OMPParallelForDirective *OMPParallelForDirective::Create( 336 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 337 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 338 const HelperExprs &Exprs, bool HasCancel) { 339 unsigned Size = 340 llvm::alignTo(sizeof(OMPParallelForDirective), alignof(OMPClause *)); 341 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 342 sizeof(Stmt *) * 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); 370 return Dir; 371} 372 373OMPParallelForDirective * 374OMPParallelForDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 375 unsigned CollapsedNum, EmptyShell) { 376 unsigned Size = 377 llvm::alignTo(sizeof(OMPParallelForDirective), alignof(OMPClause *)); 378 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 379 sizeof(Stmt *) * 380 numLoopChildren(CollapsedNum, OMPD_parallel_for)); 381 return new (Mem) OMPParallelForDirective(CollapsedNum, NumClauses); 382} 383 384OMPParallelForSimdDirective *OMPParallelForSimdDirective::Create( 385 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 386 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 387 const HelperExprs &Exprs) { 388 unsigned Size = 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); 418 return Dir; 419} 420 421OMPParallelForSimdDirective * 422OMPParallelForSimdDirective::CreateEmpty(const ASTContext &C, 423 unsigned NumClauses, 424 unsigned CollapsedNum, EmptyShell) { 425 unsigned Size = 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); 431} 432 433OMPParallelSectionsDirective *OMPParallelSectionsDirective::Create( 434 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 435 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel) { 436 unsigned Size = 437 llvm::alignTo(sizeof(OMPParallelSectionsDirective), alignof(OMPClause *)); 438 void *Mem = 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); 445 return Dir; 446} 447 448OMPParallelSectionsDirective * 449OMPParallelSectionsDirective::CreateEmpty(const ASTContext &C, 450 unsigned NumClauses, EmptyShell) { 451 unsigned Size = 452 llvm::alignTo(sizeof(OMPParallelSectionsDirective), alignof(OMPClause *)); 453 void *Mem = 454 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 455 return new (Mem) OMPParallelSectionsDirective(NumClauses); 456} 457 458OMPTaskDirective * 459OMPTaskDirective::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 *)); 463 void *Mem = 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); 470 return Dir; 471} 472 473OMPTaskDirective *OMPTaskDirective::CreateEmpty(const ASTContext &C, 474 unsigned NumClauses, 475 EmptyShell) { 476 unsigned Size = llvm::alignTo(sizeof(OMPTaskDirective), alignof(OMPClause *)); 477 void *Mem = 478 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 479 return new (Mem) OMPTaskDirective(NumClauses); 480} 481 482OMPTaskyieldDirective *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); 488 return Dir; 489} 490 491OMPTaskyieldDirective *OMPTaskyieldDirective::CreateEmpty(const ASTContext &C, 492 EmptyShell) { 493 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective)); 494 return new (Mem) OMPTaskyieldDirective(); 495} 496 497OMPBarrierDirective *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); 502 return Dir; 503} 504 505OMPBarrierDirective *OMPBarrierDirective::CreateEmpty(const ASTContext &C, 506 EmptyShell) { 507 void *Mem = C.Allocate(sizeof(OMPBarrierDirective)); 508 return new (Mem) OMPBarrierDirective(); 509} 510 511OMPTaskwaitDirective *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); 516 return Dir; 517} 518 519OMPTaskwaitDirective *OMPTaskwaitDirective::CreateEmpty(const ASTContext &C, 520 EmptyShell) { 521 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective)); 522 return new (Mem) OMPTaskwaitDirective(); 523} 524 525OMPTaskgroupDirective *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(), 530 alignof(Stmt *)); 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); 536 return Dir; 537} 538 539OMPTaskgroupDirective *OMPTaskgroupDirective::CreateEmpty(const ASTContext &C, 540 unsigned NumClauses, 541 EmptyShell) { 542 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) + 543 sizeof(OMPClause *) * NumClauses, 544 alignof(Stmt *)); 545 void *Mem = C.Allocate(Size + sizeof(Stmt *)); 546 return new (Mem) OMPTaskgroupDirective(NumClauses); 547} 548 549OMPCancellationPointDirective *OMPCancellationPointDirective::Create( 550 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 551 OpenMPDirectiveKind CancelRegion) { 552 unsigned Size = 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); 558 return Dir; 559} 560 561OMPCancellationPointDirective * 562OMPCancellationPointDirective::CreateEmpty(const ASTContext &C, EmptyShell) { 563 unsigned Size = 564 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *)); 565 void *Mem = C.Allocate(Size); 566 return new (Mem) OMPCancellationPointDirective(); 567} 568 569OMPCancelDirective * 570OMPCancelDirective::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(), 575 alignof(Stmt *)); 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); 581 return Dir; 582} 583 584OMPCancelDirective *OMPCancelDirective::CreateEmpty(const ASTContext &C, 585 unsigned NumClauses, 586 EmptyShell) { 587 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) + 588 sizeof(OMPClause *) * NumClauses, 589 alignof(Stmt *)); 590 void *Mem = C.Allocate(Size); 591 return new (Mem) OMPCancelDirective(NumClauses); 592} 593 594OMPFlushDirective *OMPFlushDirective::Create(const ASTContext &C, 595 SourceLocation StartLoc, 596 SourceLocation EndLoc, 597 ArrayRef<OMPClause *> Clauses) { 598 unsigned Size = 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); 604 return Dir; 605} 606 607OMPFlushDirective *OMPFlushDirective::CreateEmpty(const ASTContext &C, 608 unsigned NumClauses, 609 EmptyShell) { 610 unsigned Size = 611 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *)); 612 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses); 613 return new (Mem) OMPFlushDirective(NumClauses); 614} 615 616OMPOrderedDirective *OMPOrderedDirective::Create(const ASTContext &C, 617 SourceLocation StartLoc, 618 SourceLocation EndLoc, 619 ArrayRef<OMPClause *> Clauses, 620 Stmt *AssociatedStmt) { 621 unsigned Size = 622 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *)); 623 void *Mem = 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); 629 return Dir; 630} 631 632OMPOrderedDirective *OMPOrderedDirective::CreateEmpty(const ASTContext &C, 633 unsigned NumClauses, 634 EmptyShell) { 635 unsigned Size = 636 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *)); 637 void *Mem = 638 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * NumClauses); 639 return new (Mem) OMPOrderedDirective(NumClauses); 640} 641 642OMPAtomicDirective *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) { 646 unsigned Size = 647 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *)); 648 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 649 5 * sizeof(Stmt *)); 650 OMPAtomicDirective *Dir = 651 new (Mem) OMPAtomicDirective(StartLoc, EndLoc, Clauses.size()); 652 Dir->setClauses(Clauses); 653 Dir->setAssociatedStmt(AssociatedStmt); 654 Dir->setX(X); 655 Dir->setV(V); 656 Dir->setExpr(E); 657 Dir->setUpdateExpr(UE); 658 Dir->IsXLHSInRHSPart = IsXLHSInRHSPart; 659 Dir->IsPostfixUpdate = IsPostfixUpdate; 660 return Dir; 661} 662 663OMPAtomicDirective *OMPAtomicDirective::CreateEmpty(const ASTContext &C, 664 unsigned NumClauses, 665 EmptyShell) { 666 unsigned Size = 667 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *)); 668 void *Mem = 669 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 5 * sizeof(Stmt *)); 670 return new (Mem) OMPAtomicDirective(NumClauses); 671} 672 673OMPTargetDirective *OMPTargetDirective::Create(const ASTContext &C, 674 SourceLocation StartLoc, 675 SourceLocation EndLoc, 676 ArrayRef<OMPClause *> Clauses, 677 Stmt *AssociatedStmt) { 678 unsigned Size = 679 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *)); 680 void *Mem = 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); 686 return Dir; 687} 688 689OMPTargetDirective *OMPTargetDirective::CreateEmpty(const ASTContext &C, 690 unsigned NumClauses, 691 EmptyShell) { 692 unsigned Size = 693 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *)); 694 void *Mem = 695 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 696 return new (Mem) OMPTargetDirective(NumClauses); 697} 698 699OMPTargetParallelDirective *OMPTargetParallelDirective::Create( 700 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 701 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 702 unsigned Size = 703 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *)); 704 void *Mem = 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); 710 return Dir; 711} 712 713OMPTargetParallelDirective * 714OMPTargetParallelDirective::CreateEmpty(const ASTContext &C, 715 unsigned NumClauses, EmptyShell) { 716 unsigned Size = 717 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *)); 718 void *Mem = 719 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 720 return new (Mem) OMPTargetParallelDirective(NumClauses); 721} 722 723OMPTargetParallelForDirective *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); 758 return Dir; 759} 760 761OMPTargetParallelForDirective * 762OMPTargetParallelForDirective::CreateEmpty(const ASTContext &C, 763 unsigned NumClauses, 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); 771} 772 773OMPTargetDataDirective *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); 783 return Dir; 784} 785 786OMPTargetDataDirective *OMPTargetDataDirective::CreateEmpty(const ASTContext &C, 787 unsigned N, 788 EmptyShell) { 789 void *Mem = C.Allocate( 790 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) + 791 sizeof(OMPClause *) * N + sizeof(Stmt *)); 792 return new (Mem) OMPTargetDataDirective(N); 793} 794 795OMPTargetEnterDataDirective *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); 804 return Dir; 805} 806 807OMPTargetEnterDataDirective * 808OMPTargetEnterDataDirective::CreateEmpty(const ASTContext &C, unsigned N, 809 EmptyShell) { 810 void *Mem = C.Allocate( 811 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) + 812 sizeof(OMPClause *) * N); 813 return new (Mem) OMPTargetEnterDataDirective(N); 814} 815 816OMPTargetExitDataDirective * 817OMPTargetExitDataDirective::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); 826 return Dir; 827} 828 829OMPTargetExitDataDirective * 830OMPTargetExitDataDirective::CreateEmpty(const ASTContext &C, unsigned N, 831 EmptyShell) { 832 void *Mem = C.Allocate( 833 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) + 834 sizeof(OMPClause *) * N); 835 return new (Mem) OMPTargetExitDataDirective(N); 836} 837 838OMPTeamsDirective *OMPTeamsDirective::Create(const ASTContext &C, 839 SourceLocation StartLoc, 840 SourceLocation EndLoc, 841 ArrayRef<OMPClause *> Clauses, 842 Stmt *AssociatedStmt) { 843 unsigned Size = 844 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *)); 845 void *Mem = 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); 851 return Dir; 852} 853 854OMPTeamsDirective *OMPTeamsDirective::CreateEmpty(const ASTContext &C, 855 unsigned NumClauses, 856 EmptyShell) { 857 unsigned Size = 858 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *)); 859 void *Mem = 860 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 861 return new (Mem) OMPTeamsDirective(NumClauses); 862} 863 864OMPTaskLoopDirective *OMPTaskLoopDirective::Create( 865 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 866 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 867 const HelperExprs &Exprs) { 868 unsigned Size = 869 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *)); 870 void *Mem = 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); 898 return Dir; 899} 900 901OMPTaskLoopDirective *OMPTaskLoopDirective::CreateEmpty(const ASTContext &C, 902 unsigned NumClauses, 903 unsigned CollapsedNum, 904 EmptyShell) { 905 unsigned Size = 906 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *)); 907 void *Mem = 908 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 909 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop)); 910 return new (Mem) OMPTaskLoopDirective(CollapsedNum, NumClauses); 911} 912 913OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create( 914 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 915 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 916 const HelperExprs &Exprs) { 917 unsigned Size = 918 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *)); 919 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 920 sizeof(Stmt *) * 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); 947 return Dir; 948} 949 950OMPTaskLoopSimdDirective * 951OMPTaskLoopSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 952 unsigned CollapsedNum, EmptyShell) { 953 unsigned Size = 954 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *)); 955 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 956 sizeof(Stmt *) * 957 numLoopChildren(CollapsedNum, OMPD_taskloop_simd)); 958 return new (Mem) OMPTaskLoopSimdDirective(CollapsedNum, NumClauses); 959} 960 961OMPDistributeDirective *OMPDistributeDirective::Create( 962 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 963 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 964 const HelperExprs &Exprs) { 965 unsigned Size = 966 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *)); 967 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 968 sizeof(Stmt *) * 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); 995 return Dir; 996} 997 998OMPDistributeDirective * 999OMPDistributeDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1000 unsigned CollapsedNum, EmptyShell) { 1001 unsigned Size = 1002 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *)); 1003 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1004 sizeof(Stmt *) * 1005 numLoopChildren(CollapsedNum, OMPD_distribute)); 1006 return new (Mem) OMPDistributeDirective(CollapsedNum, NumClauses); 1007} 1008 1009OMPTargetUpdateDirective * 1010OMPTargetUpdateDirective::Create(const ASTContext &C, SourceLocation StartLoc, 1011 SourceLocation EndLoc, 1012 ArrayRef<OMPClause *> Clauses) { 1013 unsigned Size = 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); 1019 return Dir; 1020} 1021 1022OMPTargetUpdateDirective * 1023OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1024 EmptyShell) { 1025 unsigned Size = 1026 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *)); 1027 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses); 1028 return new (Mem) OMPTargetUpdateDirective(NumClauses); 1029} 1030 1031OMPDistributeParallelForDirective *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() + 1039 sizeof(Stmt *) * 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); 1078 return Dir; 1079} 1080 1081OMPDistributeParallelForDirective * 1082OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C, 1083 unsigned NumClauses, 1084 unsigned CollapsedNum, 1085 EmptyShell) { 1086 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective), 1087 alignof(OMPClause *)); 1088 void *Mem = C.Allocate( 1089 Size + sizeof(OMPClause *) * NumClauses + 1090 sizeof(Stmt *) * 1091 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for)); 1092 return new (Mem) OMPDistributeParallelForDirective(CollapsedNum, NumClauses); 1093} 1094 1095OMPDistributeParallelForSimdDirective * 1096OMPDistributeParallelForSimdDirective::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() + 1104 sizeof(Stmt *) * 1105 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd)); 1106 OMPDistributeParallelForSimdDirective *Dir = new (Mem) 1107 OMPDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum, 1108 Clauses.size()); 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); 1143 return Dir; 1144} 1145 1146OMPDistributeParallelForSimdDirective * 1147OMPDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C, 1148 unsigned NumClauses, 1149 unsigned CollapsedNum, 1150 EmptyShell) { 1151 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective), 1152 alignof(OMPClause *)); 1153 void *Mem = C.Allocate( 1154 Size + sizeof(OMPClause *) * NumClauses + 1155 sizeof(Stmt *) * 1156 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd)); 1157 return new (Mem) 1158 OMPDistributeParallelForSimdDirective(CollapsedNum, NumClauses); 1159} 1160 1161OMPDistributeSimdDirective *OMPDistributeSimdDirective::Create( 1162 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1163 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1164 const HelperExprs &Exprs) { 1165 unsigned Size = 1166 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *)); 1167 void *Mem = C.Allocate( 1168 Size + sizeof(OMPClause *) * Clauses.size() + 1169 sizeof(Stmt *) * 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); 1196 return Dir; 1197} 1198 1199OMPDistributeSimdDirective * 1200OMPDistributeSimdDirective::CreateEmpty(const ASTContext &C, 1201 unsigned NumClauses, 1202 unsigned CollapsedNum, EmptyShell) { 1203 unsigned Size = 1204 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *)); 1205 void *Mem = C.Allocate( 1206 Size + sizeof(OMPClause *) * NumClauses + 1207 sizeof(Stmt *) * 1208 numLoopChildren(CollapsedNum, OMPD_distribute_simd)); 1209 return new (Mem) OMPDistributeSimdDirective(CollapsedNum, NumClauses); 1210} 1211 1212OMPTargetParallelForSimdDirective *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() + 1220 sizeof(Stmt *) * 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); 1248 return Dir; 1249} 1250 1251OMPTargetParallelForSimdDirective * 1252OMPTargetParallelForSimdDirective::CreateEmpty(const ASTContext &C, 1253 unsigned NumClauses, 1254 unsigned CollapsedNum, 1255 EmptyShell) { 1256 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective), 1257 alignof(OMPClause *)); 1258 void *Mem = C.Allocate( 1259 Size + sizeof(OMPClause *) * NumClauses + 1260 sizeof(Stmt *) * 1261 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd)); 1262 return new (Mem) OMPTargetParallelForSimdDirective(CollapsedNum, NumClauses); 1263} 1264 1265OMPTargetSimdDirective * 1266OMPTargetSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc, 1267 SourceLocation EndLoc, unsigned CollapsedNum, 1268 ArrayRef<OMPClause *> Clauses, 1269 Stmt *AssociatedStmt, const HelperExprs &Exprs) { 1270 unsigned Size = 1271 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *)); 1272 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 1273 sizeof(Stmt *) * 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); 1292 return Dir; 1293} 1294 1295OMPTargetSimdDirective * 1296OMPTargetSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1297 unsigned CollapsedNum, EmptyShell) { 1298 unsigned Size = 1299 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *)); 1300 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1301 sizeof(Stmt *) * 1302 numLoopChildren(CollapsedNum, OMPD_target_simd)); 1303 return new (Mem) OMPTargetSimdDirective(CollapsedNum, NumClauses); 1304} 1305 1306OMPTeamsDistributeDirective *OMPTeamsDistributeDirective::Create( 1307 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1308 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1309 const HelperExprs &Exprs) { 1310 unsigned Size = 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); 1340 return Dir; 1341} 1342 1343OMPTeamsDistributeDirective * 1344OMPTeamsDistributeDirective::CreateEmpty(const ASTContext &C, 1345 unsigned NumClauses, 1346 unsigned CollapsedNum, EmptyShell) { 1347 unsigned Size = 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); 1353} 1354 1355OMPTeamsDistributeSimdDirective *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 *)); 1361 void *Mem = 1362 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 1363 sizeof(Stmt *) * 1364 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd)); 1365 OMPTeamsDistributeSimdDirective *Dir = 1366 new (Mem) OMPTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum, 1367 Clauses.size()); 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); 1391 return Dir; 1392} 1393 1394OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::CreateEmpty( 1395 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, 1396 EmptyShell) { 1397 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective), 1398 alignof(OMPClause *)); 1399 void *Mem = 1400 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1401 sizeof(Stmt *) * 1402 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd)); 1403 return new (Mem) OMPTeamsDistributeSimdDirective(CollapsedNum, NumClauses); 1404} 1405 1406OMPTeamsDistributeParallelForSimdDirective * 1407OMPTeamsDistributeParallelForSimdDirective::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 *)); 1413 void *Mem = 1414 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 1415 sizeof(Stmt *) * 1416 numLoopChildren(CollapsedNum, 1417 OMPD_teams_distribute_parallel_for_simd)); 1418 OMPTeamsDistributeParallelForSimdDirective *Dir = new (Mem) 1419 OMPTeamsDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum, 1420 Clauses.size()); 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); 1455 return Dir; 1456} 1457 1458OMPTeamsDistributeParallelForSimdDirective * 1459OMPTeamsDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C, 1460 unsigned NumClauses, 1461 unsigned CollapsedNum, 1462 EmptyShell) { 1463 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective), 1464 alignof(OMPClause *)); 1465 void *Mem = 1466 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1467 sizeof(Stmt *) * 1468 numLoopChildren(CollapsedNum, 1469 OMPD_teams_distribute_parallel_for_simd)); 1470 return new (Mem) 1471 OMPTeamsDistributeParallelForSimdDirective(CollapsedNum, NumClauses); 1472} 1473 1474OMPTeamsDistributeParallelForDirective * 1475OMPTeamsDistributeParallelForDirective::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() + 1483 sizeof(Stmt *) * 1484 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for)); 1485 OMPTeamsDistributeParallelForDirective *Dir = new (Mem) 1486 OMPTeamsDistributeParallelForDirective(StartLoc, EndLoc, CollapsedNum, 1487 Clauses.size()); 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); 1522 return Dir; 1523} 1524 1525OMPTeamsDistributeParallelForDirective * 1526OMPTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C, 1527 unsigned NumClauses, 1528 unsigned CollapsedNum, 1529 EmptyShell) { 1530 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective), 1531 alignof(OMPClause *)); 1532 void *Mem = C.Allocate( 1533 Size + sizeof(OMPClause *) * NumClauses + 1534 sizeof(Stmt *) * 1535 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for)); 1536 return new (Mem) 1537 OMPTeamsDistributeParallelForDirective(CollapsedNum, NumClauses); 1538} 1539 1540OMPTargetTeamsDirective *OMPTargetTeamsDirective::Create( 1541 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1542 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 1543 auto Size = 1544 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *)); 1545 void *Mem = 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); 1551 return Dir; 1552} 1553 1554OMPTargetTeamsDirective * 1555OMPTargetTeamsDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1556 EmptyShell) { 1557 auto Size = 1558 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *)); 1559 void *Mem = 1560 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 1561 return new (Mem) OMPTargetTeamsDirective(NumClauses); 1562} 1563 1564OMPTargetTeamsDistributeDirective *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() + 1572 sizeof(Stmt *) * 1573 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute)); 1574 OMPTargetTeamsDistributeDirective *Dir = 1575 new (Mem) OMPTargetTeamsDistributeDirective(StartLoc, EndLoc, CollapsedNum, 1576 Clauses.size()); 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); 1600 return Dir; 1601} 1602 1603OMPTargetTeamsDistributeDirective * 1604OMPTargetTeamsDistributeDirective::CreateEmpty(const ASTContext &C, 1605 unsigned NumClauses, 1606 unsigned CollapsedNum, 1607 EmptyShell) { 1608 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective), 1609 alignof(OMPClause *)); 1610 void *Mem = C.Allocate( 1611 Size + sizeof(OMPClause *) * NumClauses + 1612 sizeof(Stmt *) * 1613 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute)); 1614 return new (Mem) OMPTargetTeamsDistributeDirective(CollapsedNum, NumClauses); 1615} 1616 1617OMPTargetTeamsDistributeParallelForDirective * 1618OMPTargetTeamsDistributeParallelForDirective::Create( 1619 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1620 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1621 const HelperExprs &Exprs) { 1622 auto Size = 1623 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective), 1624 alignof(OMPClause *)); 1625 void *Mem = C.Allocate( 1626 Size + sizeof(OMPClause *) * Clauses.size() + 1627 sizeof(Stmt *) * 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); 1667 return Dir; 1668} 1669 1670OMPTargetTeamsDistributeParallelForDirective * 1671OMPTargetTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C, 1672 unsigned NumClauses, 1673 unsigned CollapsedNum, 1674 EmptyShell) { 1675 auto Size = 1676 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective), 1677 alignof(OMPClause *)); 1678 void *Mem = C.Allocate( 1679 Size + sizeof(OMPClause *) * NumClauses + 1680 sizeof(Stmt *) * 1681 numLoopChildren(CollapsedNum, 1682 OMPD_target_teams_distribute_parallel_for)); 1683 return new (Mem) 1684 OMPTargetTeamsDistributeParallelForDirective(CollapsedNum, NumClauses); 1685} 1686 1687OMPTargetTeamsDistributeParallelForSimdDirective * 1688OMPTargetTeamsDistributeParallelForSimdDirective::Create( 1689 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1690 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1691 const HelperExprs &Exprs) { 1692 auto Size = 1693 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective), 1694 alignof(OMPClause *)); 1695 void *Mem = C.Allocate( 1696 Size + sizeof(OMPClause *) * Clauses.size() + 1697 sizeof(Stmt *) * 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); 1737 return Dir; 1738} 1739 1740OMPTargetTeamsDistributeParallelForSimdDirective * 1741OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty( 1742 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, 1743 EmptyShell) { 1744 auto Size = 1745 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective), 1746 alignof(OMPClause *)); 1747 void *Mem = C.Allocate( 1748 Size + sizeof(OMPClause *) * NumClauses + 1749 sizeof(Stmt *) * 1750 numLoopChildren(CollapsedNum, 1751 OMPD_target_teams_distribute_parallel_for_simd)); 1752 return new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective( 1753 CollapsedNum, NumClauses); 1754} 1755 1756OMPTargetTeamsDistributeSimdDirective * 1757OMPTargetTeamsDistributeSimdDirective::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() + 1765 sizeof(Stmt *) * 1766 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd)); 1767 OMPTargetTeamsDistributeSimdDirective *Dir = new (Mem) 1768 OMPTargetTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum, 1769 Clauses.size()); 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); 1793 return Dir; 1794} 1795 1796OMPTargetTeamsDistributeSimdDirective * 1797OMPTargetTeamsDistributeSimdDirective::CreateEmpty(const ASTContext &C, 1798 unsigned NumClauses, 1799 unsigned CollapsedNum, 1800 EmptyShell) { 1801 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective), 1802 alignof(OMPClause *)); 1803 void *Mem = C.Allocate( 1804 Size + sizeof(OMPClause *) * NumClauses + 1805 sizeof(Stmt *) * 1806 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd)); 1807 return new (Mem) 1808 OMPTargetTeamsDistributeSimdDirective(CollapsedNum, NumClauses); 1809} 1810