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 18 using namespace clang; 19 20 void OMPExecutableDirective::setClauses(ArrayRef<OMPClause *> Clauses) { 21 assert(Clauses.size() == getNumClauses() && 22 "Number of clauses is not the same as the preallocated buffer"); 23 std::copy(Clauses.begin(), Clauses.end(), getClauses().begin()); 24 } 25 26 void OMPLoopDirective::setCounters(ArrayRef<Expr *> A) { 27 assert(A.size() == getCollapsedNumber() && 28 "Number of loop counters is not the same as the collapsed number"); 29 std::copy(A.begin(), A.end(), getCounters().begin()); 30 } 31 32 void OMPLoopDirective::setPrivateCounters(ArrayRef<Expr *> A) { 33 assert(A.size() == getCollapsedNumber() && "Number of loop private counters " 34 "is not the same as the collapsed " 35 "number"); 36 std::copy(A.begin(), A.end(), getPrivateCounters().begin()); 37 } 38 39 void OMPLoopDirective::setInits(ArrayRef<Expr *> A) { 40 assert(A.size() == getCollapsedNumber() && 41 "Number of counter inits is not the same as the collapsed number"); 42 std::copy(A.begin(), A.end(), getInits().begin()); 43 } 44 45 void OMPLoopDirective::setUpdates(ArrayRef<Expr *> A) { 46 assert(A.size() == getCollapsedNumber() && 47 "Number of counter updates is not the same as the collapsed number"); 48 std::copy(A.begin(), A.end(), getUpdates().begin()); 49 } 50 51 void OMPLoopDirective::setFinals(ArrayRef<Expr *> A) { 52 assert(A.size() == getCollapsedNumber() && 53 "Number of counter finals is not the same as the collapsed number"); 54 std::copy(A.begin(), A.end(), getFinals().begin()); 55 } 56 57 OMPParallelDirective *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 72 OMPParallelDirective *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 82 OMPSimdDirective * 83 OMPSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc, 84 SourceLocation EndLoc, unsigned CollapsedNum, 85 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 86 const HelperExprs &Exprs) { 87 unsigned Size = llvm::alignTo(sizeof(OMPSimdDirective), alignof(OMPClause *)); 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 111 OMPSimdDirective *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 122 OMPForDirective * 123 OMPForDirective::Create(const ASTContext &C, SourceLocation StartLoc, 124 SourceLocation EndLoc, unsigned CollapsedNum, 125 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 126 const HelperExprs &Exprs, bool HasCancel) { 127 unsigned Size = llvm::alignTo(sizeof(OMPForDirective), alignof(OMPClause *)); 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 160 OMPForDirective *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 171 OMPForSimdDirective * 172 OMPForSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc, 173 SourceLocation EndLoc, unsigned CollapsedNum, 174 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 175 const HelperExprs &Exprs) { 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 209 OMPForSimdDirective *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 221 OMPSectionsDirective *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 236 OMPSectionsDirective *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 246 OMPSectionDirective *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 259 OMPSectionDirective *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 266 OMPSingleDirective *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 282 OMPSingleDirective *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 292 OMPMasterDirective *OMPMasterDirective::Create(const ASTContext &C, 293 SourceLocation StartLoc, 294 SourceLocation EndLoc, 295 Stmt *AssociatedStmt) { 296 unsigned Size = llvm::alignTo(sizeof(OMPMasterDirective), alignof(Stmt *)); 297 void *Mem = C.Allocate(Size + sizeof(Stmt *)); 298 OMPMasterDirective *Dir = new (Mem) OMPMasterDirective(StartLoc, EndLoc); 299 Dir->setAssociatedStmt(AssociatedStmt); 300 return Dir; 301 } 302 303 OMPMasterDirective *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 310 OMPCriticalDirective *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 325 OMPCriticalDirective *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 335 OMPParallelForDirective *OMPParallelForDirective::Create( 336 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 337 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 338 const HelperExprs &Exprs, bool HasCancel) { 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 373 OMPParallelForDirective * 374 OMPParallelForDirective::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 384 OMPParallelForSimdDirective *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 421 OMPParallelForSimdDirective * 422 OMPParallelForSimdDirective::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 433 OMPParallelSectionsDirective *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 448 OMPParallelSectionsDirective * 449 OMPParallelSectionsDirective::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 458 OMPTaskDirective * 459 OMPTaskDirective::Create(const ASTContext &C, SourceLocation StartLoc, 460 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses, 461 Stmt *AssociatedStmt, bool HasCancel) { 462 unsigned Size = llvm::alignTo(sizeof(OMPTaskDirective), alignof(OMPClause *)); 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 473 OMPTaskDirective *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 482 OMPTaskyieldDirective *OMPTaskyieldDirective::Create(const ASTContext &C, 483 SourceLocation StartLoc, 484 SourceLocation EndLoc) { 485 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective)); 486 OMPTaskyieldDirective *Dir = 487 new (Mem) OMPTaskyieldDirective(StartLoc, EndLoc); 488 return Dir; 489 } 490 491 OMPTaskyieldDirective *OMPTaskyieldDirective::CreateEmpty(const ASTContext &C, 492 EmptyShell) { 493 void *Mem = C.Allocate(sizeof(OMPTaskyieldDirective)); 494 return new (Mem) OMPTaskyieldDirective(); 495 } 496 497 OMPBarrierDirective *OMPBarrierDirective::Create(const ASTContext &C, 498 SourceLocation StartLoc, 499 SourceLocation EndLoc) { 500 void *Mem = C.Allocate(sizeof(OMPBarrierDirective)); 501 OMPBarrierDirective *Dir = new (Mem) OMPBarrierDirective(StartLoc, EndLoc); 502 return Dir; 503 } 504 505 OMPBarrierDirective *OMPBarrierDirective::CreateEmpty(const ASTContext &C, 506 EmptyShell) { 507 void *Mem = C.Allocate(sizeof(OMPBarrierDirective)); 508 return new (Mem) OMPBarrierDirective(); 509 } 510 511 OMPTaskwaitDirective *OMPTaskwaitDirective::Create(const ASTContext &C, 512 SourceLocation StartLoc, 513 SourceLocation EndLoc) { 514 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective)); 515 OMPTaskwaitDirective *Dir = new (Mem) OMPTaskwaitDirective(StartLoc, EndLoc); 516 return Dir; 517 } 518 519 OMPTaskwaitDirective *OMPTaskwaitDirective::CreateEmpty(const ASTContext &C, 520 EmptyShell) { 521 void *Mem = C.Allocate(sizeof(OMPTaskwaitDirective)); 522 return new (Mem) OMPTaskwaitDirective(); 523 } 524 525 OMPTaskgroupDirective *OMPTaskgroupDirective::Create( 526 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 527 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *ReductionRef) { 528 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) + 529 sizeof(OMPClause *) * Clauses.size(), 530 alignof(Stmt *)); 531 void *Mem = C.Allocate(Size + sizeof(Stmt *) + sizeof(Expr *)); 532 OMPTaskgroupDirective *Dir = 533 new (Mem) OMPTaskgroupDirective(StartLoc, EndLoc, Clauses.size()); 534 Dir->setAssociatedStmt(AssociatedStmt); 535 Dir->setReductionRef(ReductionRef); 536 Dir->setClauses(Clauses); 537 return Dir; 538 } 539 540 OMPTaskgroupDirective *OMPTaskgroupDirective::CreateEmpty(const ASTContext &C, 541 unsigned NumClauses, 542 EmptyShell) { 543 unsigned Size = llvm::alignTo(sizeof(OMPTaskgroupDirective) + 544 sizeof(OMPClause *) * NumClauses, 545 alignof(Stmt *)); 546 void *Mem = C.Allocate(Size + sizeof(Stmt *) + sizeof(Expr *)); 547 return new (Mem) OMPTaskgroupDirective(NumClauses); 548 } 549 550 OMPCancellationPointDirective *OMPCancellationPointDirective::Create( 551 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 552 OpenMPDirectiveKind CancelRegion) { 553 unsigned Size = 554 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *)); 555 void *Mem = C.Allocate(Size); 556 OMPCancellationPointDirective *Dir = 557 new (Mem) OMPCancellationPointDirective(StartLoc, EndLoc); 558 Dir->setCancelRegion(CancelRegion); 559 return Dir; 560 } 561 562 OMPCancellationPointDirective * 563 OMPCancellationPointDirective::CreateEmpty(const ASTContext &C, EmptyShell) { 564 unsigned Size = 565 llvm::alignTo(sizeof(OMPCancellationPointDirective), alignof(Stmt *)); 566 void *Mem = C.Allocate(Size); 567 return new (Mem) OMPCancellationPointDirective(); 568 } 569 570 OMPCancelDirective * 571 OMPCancelDirective::Create(const ASTContext &C, SourceLocation StartLoc, 572 SourceLocation EndLoc, ArrayRef<OMPClause *> Clauses, 573 OpenMPDirectiveKind CancelRegion) { 574 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) + 575 sizeof(OMPClause *) * Clauses.size(), 576 alignof(Stmt *)); 577 void *Mem = C.Allocate(Size); 578 OMPCancelDirective *Dir = 579 new (Mem) OMPCancelDirective(StartLoc, EndLoc, Clauses.size()); 580 Dir->setClauses(Clauses); 581 Dir->setCancelRegion(CancelRegion); 582 return Dir; 583 } 584 585 OMPCancelDirective *OMPCancelDirective::CreateEmpty(const ASTContext &C, 586 unsigned NumClauses, 587 EmptyShell) { 588 unsigned Size = llvm::alignTo(sizeof(OMPCancelDirective) + 589 sizeof(OMPClause *) * NumClauses, 590 alignof(Stmt *)); 591 void *Mem = C.Allocate(Size); 592 return new (Mem) OMPCancelDirective(NumClauses); 593 } 594 595 OMPFlushDirective *OMPFlushDirective::Create(const ASTContext &C, 596 SourceLocation StartLoc, 597 SourceLocation EndLoc, 598 ArrayRef<OMPClause *> Clauses) { 599 unsigned Size = 600 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *)); 601 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size()); 602 OMPFlushDirective *Dir = 603 new (Mem) OMPFlushDirective(StartLoc, EndLoc, Clauses.size()); 604 Dir->setClauses(Clauses); 605 return Dir; 606 } 607 608 OMPFlushDirective *OMPFlushDirective::CreateEmpty(const ASTContext &C, 609 unsigned NumClauses, 610 EmptyShell) { 611 unsigned Size = 612 llvm::alignTo(sizeof(OMPFlushDirective), alignof(OMPClause *)); 613 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses); 614 return new (Mem) OMPFlushDirective(NumClauses); 615 } 616 617 OMPOrderedDirective *OMPOrderedDirective::Create(const ASTContext &C, 618 SourceLocation StartLoc, 619 SourceLocation EndLoc, 620 ArrayRef<OMPClause *> Clauses, 621 Stmt *AssociatedStmt) { 622 unsigned Size = 623 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *)); 624 void *Mem = 625 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * Clauses.size()); 626 OMPOrderedDirective *Dir = 627 new (Mem) OMPOrderedDirective(StartLoc, EndLoc, Clauses.size()); 628 Dir->setClauses(Clauses); 629 Dir->setAssociatedStmt(AssociatedStmt); 630 return Dir; 631 } 632 633 OMPOrderedDirective *OMPOrderedDirective::CreateEmpty(const ASTContext &C, 634 unsigned NumClauses, 635 EmptyShell) { 636 unsigned Size = 637 llvm::alignTo(sizeof(OMPOrderedDirective), alignof(OMPClause *)); 638 void *Mem = 639 C.Allocate(Size + sizeof(Stmt *) + sizeof(OMPClause *) * NumClauses); 640 return new (Mem) OMPOrderedDirective(NumClauses); 641 } 642 643 OMPAtomicDirective *OMPAtomicDirective::Create( 644 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 645 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *X, Expr *V, 646 Expr *E, Expr *UE, bool IsXLHSInRHSPart, bool IsPostfixUpdate) { 647 unsigned Size = 648 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *)); 649 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 650 5 * sizeof(Stmt *)); 651 OMPAtomicDirective *Dir = 652 new (Mem) OMPAtomicDirective(StartLoc, EndLoc, Clauses.size()); 653 Dir->setClauses(Clauses); 654 Dir->setAssociatedStmt(AssociatedStmt); 655 Dir->setX(X); 656 Dir->setV(V); 657 Dir->setExpr(E); 658 Dir->setUpdateExpr(UE); 659 Dir->IsXLHSInRHSPart = IsXLHSInRHSPart; 660 Dir->IsPostfixUpdate = IsPostfixUpdate; 661 return Dir; 662 } 663 664 OMPAtomicDirective *OMPAtomicDirective::CreateEmpty(const ASTContext &C, 665 unsigned NumClauses, 666 EmptyShell) { 667 unsigned Size = 668 llvm::alignTo(sizeof(OMPAtomicDirective), alignof(OMPClause *)); 669 void *Mem = 670 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 5 * sizeof(Stmt *)); 671 return new (Mem) OMPAtomicDirective(NumClauses); 672 } 673 674 OMPTargetDirective *OMPTargetDirective::Create(const ASTContext &C, 675 SourceLocation StartLoc, 676 SourceLocation EndLoc, 677 ArrayRef<OMPClause *> Clauses, 678 Stmt *AssociatedStmt) { 679 unsigned Size = 680 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *)); 681 void *Mem = 682 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 683 OMPTargetDirective *Dir = 684 new (Mem) OMPTargetDirective(StartLoc, EndLoc, Clauses.size()); 685 Dir->setClauses(Clauses); 686 Dir->setAssociatedStmt(AssociatedStmt); 687 return Dir; 688 } 689 690 OMPTargetDirective *OMPTargetDirective::CreateEmpty(const ASTContext &C, 691 unsigned NumClauses, 692 EmptyShell) { 693 unsigned Size = 694 llvm::alignTo(sizeof(OMPTargetDirective), alignof(OMPClause *)); 695 void *Mem = 696 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 697 return new (Mem) OMPTargetDirective(NumClauses); 698 } 699 700 OMPTargetParallelDirective *OMPTargetParallelDirective::Create( 701 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 702 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 703 unsigned Size = 704 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *)); 705 void *Mem = 706 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 707 OMPTargetParallelDirective *Dir = 708 new (Mem) OMPTargetParallelDirective(StartLoc, EndLoc, Clauses.size()); 709 Dir->setClauses(Clauses); 710 Dir->setAssociatedStmt(AssociatedStmt); 711 return Dir; 712 } 713 714 OMPTargetParallelDirective * 715 OMPTargetParallelDirective::CreateEmpty(const ASTContext &C, 716 unsigned NumClauses, EmptyShell) { 717 unsigned Size = 718 llvm::alignTo(sizeof(OMPTargetParallelDirective), alignof(OMPClause *)); 719 void *Mem = 720 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 721 return new (Mem) OMPTargetParallelDirective(NumClauses); 722 } 723 724 OMPTargetParallelForDirective *OMPTargetParallelForDirective::Create( 725 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 726 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 727 const HelperExprs &Exprs, bool HasCancel) { 728 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective), 729 alignof(OMPClause *)); 730 void *Mem = C.Allocate( 731 Size + sizeof(OMPClause *) * Clauses.size() + 732 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for)); 733 OMPTargetParallelForDirective *Dir = new (Mem) OMPTargetParallelForDirective( 734 StartLoc, EndLoc, CollapsedNum, Clauses.size()); 735 Dir->setClauses(Clauses); 736 Dir->setAssociatedStmt(AssociatedStmt); 737 Dir->setIterationVariable(Exprs.IterationVarRef); 738 Dir->setLastIteration(Exprs.LastIteration); 739 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 740 Dir->setPreCond(Exprs.PreCond); 741 Dir->setCond(Exprs.Cond); 742 Dir->setInit(Exprs.Init); 743 Dir->setInc(Exprs.Inc); 744 Dir->setIsLastIterVariable(Exprs.IL); 745 Dir->setLowerBoundVariable(Exprs.LB); 746 Dir->setUpperBoundVariable(Exprs.UB); 747 Dir->setStrideVariable(Exprs.ST); 748 Dir->setEnsureUpperBound(Exprs.EUB); 749 Dir->setNextLowerBound(Exprs.NLB); 750 Dir->setNextUpperBound(Exprs.NUB); 751 Dir->setNumIterations(Exprs.NumIterations); 752 Dir->setCounters(Exprs.Counters); 753 Dir->setPrivateCounters(Exprs.PrivateCounters); 754 Dir->setInits(Exprs.Inits); 755 Dir->setUpdates(Exprs.Updates); 756 Dir->setFinals(Exprs.Finals); 757 Dir->setPreInits(Exprs.PreInits); 758 Dir->setHasCancel(HasCancel); 759 return Dir; 760 } 761 762 OMPTargetParallelForDirective * 763 OMPTargetParallelForDirective::CreateEmpty(const ASTContext &C, 764 unsigned NumClauses, 765 unsigned CollapsedNum, EmptyShell) { 766 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForDirective), 767 alignof(OMPClause *)); 768 void *Mem = C.Allocate( 769 Size + sizeof(OMPClause *) * NumClauses + 770 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_target_parallel_for)); 771 return new (Mem) OMPTargetParallelForDirective(CollapsedNum, NumClauses); 772 } 773 774 OMPTargetDataDirective *OMPTargetDataDirective::Create( 775 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 776 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 777 void *Mem = C.Allocate( 778 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) + 779 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 780 OMPTargetDataDirective *Dir = 781 new (Mem) OMPTargetDataDirective(StartLoc, EndLoc, Clauses.size()); 782 Dir->setClauses(Clauses); 783 Dir->setAssociatedStmt(AssociatedStmt); 784 return Dir; 785 } 786 787 OMPTargetDataDirective *OMPTargetDataDirective::CreateEmpty(const ASTContext &C, 788 unsigned N, 789 EmptyShell) { 790 void *Mem = C.Allocate( 791 llvm::alignTo(sizeof(OMPTargetDataDirective), alignof(OMPClause *)) + 792 sizeof(OMPClause *) * N + sizeof(Stmt *)); 793 return new (Mem) OMPTargetDataDirective(N); 794 } 795 796 OMPTargetEnterDataDirective *OMPTargetEnterDataDirective::Create( 797 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 798 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 799 void *Mem = C.Allocate( 800 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) + 801 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 802 OMPTargetEnterDataDirective *Dir = 803 new (Mem) OMPTargetEnterDataDirective(StartLoc, EndLoc, Clauses.size()); 804 Dir->setClauses(Clauses); 805 Dir->setAssociatedStmt(AssociatedStmt); 806 return Dir; 807 } 808 809 OMPTargetEnterDataDirective * 810 OMPTargetEnterDataDirective::CreateEmpty(const ASTContext &C, unsigned N, 811 EmptyShell) { 812 void *Mem = C.Allocate( 813 llvm::alignTo(sizeof(OMPTargetEnterDataDirective), alignof(OMPClause *)) + 814 sizeof(OMPClause *) * N + sizeof(Stmt *)); 815 return new (Mem) OMPTargetEnterDataDirective(N); 816 } 817 818 OMPTargetExitDataDirective *OMPTargetExitDataDirective::Create( 819 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 820 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 821 void *Mem = C.Allocate( 822 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) + 823 sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 824 OMPTargetExitDataDirective *Dir = 825 new (Mem) OMPTargetExitDataDirective(StartLoc, EndLoc, Clauses.size()); 826 Dir->setClauses(Clauses); 827 Dir->setAssociatedStmt(AssociatedStmt); 828 return Dir; 829 } 830 831 OMPTargetExitDataDirective * 832 OMPTargetExitDataDirective::CreateEmpty(const ASTContext &C, unsigned N, 833 EmptyShell) { 834 void *Mem = C.Allocate( 835 llvm::alignTo(sizeof(OMPTargetExitDataDirective), alignof(OMPClause *)) + 836 sizeof(OMPClause *) * N + sizeof(Stmt *)); 837 return new (Mem) OMPTargetExitDataDirective(N); 838 } 839 840 OMPTeamsDirective *OMPTeamsDirective::Create(const ASTContext &C, 841 SourceLocation StartLoc, 842 SourceLocation EndLoc, 843 ArrayRef<OMPClause *> Clauses, 844 Stmt *AssociatedStmt) { 845 unsigned Size = 846 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *)); 847 void *Mem = 848 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 849 OMPTeamsDirective *Dir = 850 new (Mem) OMPTeamsDirective(StartLoc, EndLoc, Clauses.size()); 851 Dir->setClauses(Clauses); 852 Dir->setAssociatedStmt(AssociatedStmt); 853 return Dir; 854 } 855 856 OMPTeamsDirective *OMPTeamsDirective::CreateEmpty(const ASTContext &C, 857 unsigned NumClauses, 858 EmptyShell) { 859 unsigned Size = 860 llvm::alignTo(sizeof(OMPTeamsDirective), alignof(OMPClause *)); 861 void *Mem = 862 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 863 return new (Mem) OMPTeamsDirective(NumClauses); 864 } 865 866 OMPTaskLoopDirective *OMPTaskLoopDirective::Create( 867 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 868 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 869 const HelperExprs &Exprs) { 870 unsigned Size = 871 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *)); 872 void *Mem = 873 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 874 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop)); 875 OMPTaskLoopDirective *Dir = new (Mem) 876 OMPTaskLoopDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size()); 877 Dir->setClauses(Clauses); 878 Dir->setAssociatedStmt(AssociatedStmt); 879 Dir->setIterationVariable(Exprs.IterationVarRef); 880 Dir->setLastIteration(Exprs.LastIteration); 881 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 882 Dir->setPreCond(Exprs.PreCond); 883 Dir->setCond(Exprs.Cond); 884 Dir->setInit(Exprs.Init); 885 Dir->setInc(Exprs.Inc); 886 Dir->setIsLastIterVariable(Exprs.IL); 887 Dir->setLowerBoundVariable(Exprs.LB); 888 Dir->setUpperBoundVariable(Exprs.UB); 889 Dir->setStrideVariable(Exprs.ST); 890 Dir->setEnsureUpperBound(Exprs.EUB); 891 Dir->setNextLowerBound(Exprs.NLB); 892 Dir->setNextUpperBound(Exprs.NUB); 893 Dir->setNumIterations(Exprs.NumIterations); 894 Dir->setCounters(Exprs.Counters); 895 Dir->setPrivateCounters(Exprs.PrivateCounters); 896 Dir->setInits(Exprs.Inits); 897 Dir->setUpdates(Exprs.Updates); 898 Dir->setFinals(Exprs.Finals); 899 Dir->setPreInits(Exprs.PreInits); 900 return Dir; 901 } 902 903 OMPTaskLoopDirective *OMPTaskLoopDirective::CreateEmpty(const ASTContext &C, 904 unsigned NumClauses, 905 unsigned CollapsedNum, 906 EmptyShell) { 907 unsigned Size = 908 llvm::alignTo(sizeof(OMPTaskLoopDirective), alignof(OMPClause *)); 909 void *Mem = 910 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 911 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_taskloop)); 912 return new (Mem) OMPTaskLoopDirective(CollapsedNum, NumClauses); 913 } 914 915 OMPTaskLoopSimdDirective *OMPTaskLoopSimdDirective::Create( 916 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 917 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 918 const HelperExprs &Exprs) { 919 unsigned Size = 920 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *)); 921 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 922 sizeof(Stmt *) * 923 numLoopChildren(CollapsedNum, OMPD_taskloop_simd)); 924 OMPTaskLoopSimdDirective *Dir = new (Mem) 925 OMPTaskLoopSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size()); 926 Dir->setClauses(Clauses); 927 Dir->setAssociatedStmt(AssociatedStmt); 928 Dir->setIterationVariable(Exprs.IterationVarRef); 929 Dir->setLastIteration(Exprs.LastIteration); 930 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 931 Dir->setPreCond(Exprs.PreCond); 932 Dir->setCond(Exprs.Cond); 933 Dir->setInit(Exprs.Init); 934 Dir->setInc(Exprs.Inc); 935 Dir->setIsLastIterVariable(Exprs.IL); 936 Dir->setLowerBoundVariable(Exprs.LB); 937 Dir->setUpperBoundVariable(Exprs.UB); 938 Dir->setStrideVariable(Exprs.ST); 939 Dir->setEnsureUpperBound(Exprs.EUB); 940 Dir->setNextLowerBound(Exprs.NLB); 941 Dir->setNextUpperBound(Exprs.NUB); 942 Dir->setNumIterations(Exprs.NumIterations); 943 Dir->setCounters(Exprs.Counters); 944 Dir->setPrivateCounters(Exprs.PrivateCounters); 945 Dir->setInits(Exprs.Inits); 946 Dir->setUpdates(Exprs.Updates); 947 Dir->setFinals(Exprs.Finals); 948 Dir->setPreInits(Exprs.PreInits); 949 return Dir; 950 } 951 952 OMPTaskLoopSimdDirective * 953 OMPTaskLoopSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 954 unsigned CollapsedNum, EmptyShell) { 955 unsigned Size = 956 llvm::alignTo(sizeof(OMPTaskLoopSimdDirective), alignof(OMPClause *)); 957 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 958 sizeof(Stmt *) * 959 numLoopChildren(CollapsedNum, OMPD_taskloop_simd)); 960 return new (Mem) OMPTaskLoopSimdDirective(CollapsedNum, NumClauses); 961 } 962 963 OMPDistributeDirective *OMPDistributeDirective::Create( 964 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 965 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 966 const HelperExprs &Exprs) { 967 unsigned Size = 968 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *)); 969 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 970 sizeof(Stmt *) * 971 numLoopChildren(CollapsedNum, OMPD_distribute)); 972 OMPDistributeDirective *Dir = new (Mem) 973 OMPDistributeDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size()); 974 Dir->setClauses(Clauses); 975 Dir->setAssociatedStmt(AssociatedStmt); 976 Dir->setIterationVariable(Exprs.IterationVarRef); 977 Dir->setLastIteration(Exprs.LastIteration); 978 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 979 Dir->setPreCond(Exprs.PreCond); 980 Dir->setCond(Exprs.Cond); 981 Dir->setInit(Exprs.Init); 982 Dir->setInc(Exprs.Inc); 983 Dir->setIsLastIterVariable(Exprs.IL); 984 Dir->setLowerBoundVariable(Exprs.LB); 985 Dir->setUpperBoundVariable(Exprs.UB); 986 Dir->setStrideVariable(Exprs.ST); 987 Dir->setEnsureUpperBound(Exprs.EUB); 988 Dir->setNextLowerBound(Exprs.NLB); 989 Dir->setNextUpperBound(Exprs.NUB); 990 Dir->setNumIterations(Exprs.NumIterations); 991 Dir->setCounters(Exprs.Counters); 992 Dir->setPrivateCounters(Exprs.PrivateCounters); 993 Dir->setInits(Exprs.Inits); 994 Dir->setUpdates(Exprs.Updates); 995 Dir->setFinals(Exprs.Finals); 996 Dir->setPreInits(Exprs.PreInits); 997 return Dir; 998 } 999 1000 OMPDistributeDirective * 1001 OMPDistributeDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1002 unsigned CollapsedNum, EmptyShell) { 1003 unsigned Size = 1004 llvm::alignTo(sizeof(OMPDistributeDirective), alignof(OMPClause *)); 1005 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1006 sizeof(Stmt *) * 1007 numLoopChildren(CollapsedNum, OMPD_distribute)); 1008 return new (Mem) OMPDistributeDirective(CollapsedNum, NumClauses); 1009 } 1010 1011 OMPTargetUpdateDirective *OMPTargetUpdateDirective::Create( 1012 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1013 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 1014 unsigned Size = 1015 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *)); 1016 void *Mem = 1017 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 1018 OMPTargetUpdateDirective *Dir = 1019 new (Mem) OMPTargetUpdateDirective(StartLoc, EndLoc, Clauses.size()); 1020 Dir->setClauses(Clauses); 1021 Dir->setAssociatedStmt(AssociatedStmt); 1022 return Dir; 1023 } 1024 1025 OMPTargetUpdateDirective * 1026 OMPTargetUpdateDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1027 EmptyShell) { 1028 unsigned Size = 1029 llvm::alignTo(sizeof(OMPTargetUpdateDirective), alignof(OMPClause *)); 1030 void *Mem = 1031 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 1032 return new (Mem) OMPTargetUpdateDirective(NumClauses); 1033 } 1034 1035 OMPDistributeParallelForDirective *OMPDistributeParallelForDirective::Create( 1036 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1037 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1038 const HelperExprs &Exprs, bool HasCancel) { 1039 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective), 1040 alignof(OMPClause *)); 1041 void *Mem = C.Allocate( 1042 Size + sizeof(OMPClause *) * Clauses.size() + 1043 sizeof(Stmt *) * 1044 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for)); 1045 OMPDistributeParallelForDirective *Dir = 1046 new (Mem) OMPDistributeParallelForDirective(StartLoc, EndLoc, 1047 CollapsedNum, Clauses.size()); 1048 Dir->setClauses(Clauses); 1049 Dir->setAssociatedStmt(AssociatedStmt); 1050 Dir->setIterationVariable(Exprs.IterationVarRef); 1051 Dir->setLastIteration(Exprs.LastIteration); 1052 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1053 Dir->setPreCond(Exprs.PreCond); 1054 Dir->setCond(Exprs.Cond); 1055 Dir->setInit(Exprs.Init); 1056 Dir->setInc(Exprs.Inc); 1057 Dir->setIsLastIterVariable(Exprs.IL); 1058 Dir->setLowerBoundVariable(Exprs.LB); 1059 Dir->setUpperBoundVariable(Exprs.UB); 1060 Dir->setStrideVariable(Exprs.ST); 1061 Dir->setEnsureUpperBound(Exprs.EUB); 1062 Dir->setNextLowerBound(Exprs.NLB); 1063 Dir->setNextUpperBound(Exprs.NUB); 1064 Dir->setNumIterations(Exprs.NumIterations); 1065 Dir->setPrevLowerBoundVariable(Exprs.PrevLB); 1066 Dir->setPrevUpperBoundVariable(Exprs.PrevUB); 1067 Dir->setDistInc(Exprs.DistInc); 1068 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB); 1069 Dir->setCounters(Exprs.Counters); 1070 Dir->setPrivateCounters(Exprs.PrivateCounters); 1071 Dir->setInits(Exprs.Inits); 1072 Dir->setUpdates(Exprs.Updates); 1073 Dir->setFinals(Exprs.Finals); 1074 Dir->setPreInits(Exprs.PreInits); 1075 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB); 1076 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB); 1077 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB); 1078 Dir->setCombinedInit(Exprs.DistCombinedFields.Init); 1079 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond); 1080 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB); 1081 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB); 1082 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond); 1083 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond); 1084 Dir->HasCancel = HasCancel; 1085 return Dir; 1086 } 1087 1088 OMPDistributeParallelForDirective * 1089 OMPDistributeParallelForDirective::CreateEmpty(const ASTContext &C, 1090 unsigned NumClauses, 1091 unsigned CollapsedNum, 1092 EmptyShell) { 1093 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForDirective), 1094 alignof(OMPClause *)); 1095 void *Mem = C.Allocate( 1096 Size + sizeof(OMPClause *) * NumClauses + 1097 sizeof(Stmt *) * 1098 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for)); 1099 return new (Mem) OMPDistributeParallelForDirective(CollapsedNum, NumClauses); 1100 } 1101 1102 OMPDistributeParallelForSimdDirective * 1103 OMPDistributeParallelForSimdDirective::Create( 1104 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1105 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1106 const HelperExprs &Exprs) { 1107 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective), 1108 alignof(OMPClause *)); 1109 void *Mem = C.Allocate( 1110 Size + sizeof(OMPClause *) * Clauses.size() + 1111 sizeof(Stmt *) * 1112 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd)); 1113 OMPDistributeParallelForSimdDirective *Dir = new (Mem) 1114 OMPDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum, 1115 Clauses.size()); 1116 Dir->setClauses(Clauses); 1117 Dir->setAssociatedStmt(AssociatedStmt); 1118 Dir->setIterationVariable(Exprs.IterationVarRef); 1119 Dir->setLastIteration(Exprs.LastIteration); 1120 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1121 Dir->setPreCond(Exprs.PreCond); 1122 Dir->setCond(Exprs.Cond); 1123 Dir->setInit(Exprs.Init); 1124 Dir->setInc(Exprs.Inc); 1125 Dir->setIsLastIterVariable(Exprs.IL); 1126 Dir->setLowerBoundVariable(Exprs.LB); 1127 Dir->setUpperBoundVariable(Exprs.UB); 1128 Dir->setStrideVariable(Exprs.ST); 1129 Dir->setEnsureUpperBound(Exprs.EUB); 1130 Dir->setNextLowerBound(Exprs.NLB); 1131 Dir->setNextUpperBound(Exprs.NUB); 1132 Dir->setNumIterations(Exprs.NumIterations); 1133 Dir->setPrevLowerBoundVariable(Exprs.PrevLB); 1134 Dir->setPrevUpperBoundVariable(Exprs.PrevUB); 1135 Dir->setDistInc(Exprs.DistInc); 1136 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB); 1137 Dir->setCounters(Exprs.Counters); 1138 Dir->setPrivateCounters(Exprs.PrivateCounters); 1139 Dir->setInits(Exprs.Inits); 1140 Dir->setUpdates(Exprs.Updates); 1141 Dir->setFinals(Exprs.Finals); 1142 Dir->setPreInits(Exprs.PreInits); 1143 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB); 1144 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB); 1145 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB); 1146 Dir->setCombinedInit(Exprs.DistCombinedFields.Init); 1147 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond); 1148 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB); 1149 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB); 1150 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond); 1151 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond); 1152 return Dir; 1153 } 1154 1155 OMPDistributeParallelForSimdDirective * 1156 OMPDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C, 1157 unsigned NumClauses, 1158 unsigned CollapsedNum, 1159 EmptyShell) { 1160 unsigned Size = llvm::alignTo(sizeof(OMPDistributeParallelForSimdDirective), 1161 alignof(OMPClause *)); 1162 void *Mem = C.Allocate( 1163 Size + sizeof(OMPClause *) * NumClauses + 1164 sizeof(Stmt *) * 1165 numLoopChildren(CollapsedNum, OMPD_distribute_parallel_for_simd)); 1166 return new (Mem) 1167 OMPDistributeParallelForSimdDirective(CollapsedNum, NumClauses); 1168 } 1169 1170 OMPDistributeSimdDirective *OMPDistributeSimdDirective::Create( 1171 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1172 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1173 const HelperExprs &Exprs) { 1174 unsigned Size = 1175 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *)); 1176 void *Mem = C.Allocate( 1177 Size + sizeof(OMPClause *) * Clauses.size() + 1178 sizeof(Stmt *) * 1179 numLoopChildren(CollapsedNum, OMPD_distribute_simd)); 1180 OMPDistributeSimdDirective *Dir = new (Mem) OMPDistributeSimdDirective( 1181 StartLoc, EndLoc, CollapsedNum, Clauses.size()); 1182 Dir->setClauses(Clauses); 1183 Dir->setAssociatedStmt(AssociatedStmt); 1184 Dir->setIterationVariable(Exprs.IterationVarRef); 1185 Dir->setLastIteration(Exprs.LastIteration); 1186 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1187 Dir->setPreCond(Exprs.PreCond); 1188 Dir->setCond(Exprs.Cond); 1189 Dir->setInit(Exprs.Init); 1190 Dir->setInc(Exprs.Inc); 1191 Dir->setIsLastIterVariable(Exprs.IL); 1192 Dir->setLowerBoundVariable(Exprs.LB); 1193 Dir->setUpperBoundVariable(Exprs.UB); 1194 Dir->setStrideVariable(Exprs.ST); 1195 Dir->setEnsureUpperBound(Exprs.EUB); 1196 Dir->setNextLowerBound(Exprs.NLB); 1197 Dir->setNextUpperBound(Exprs.NUB); 1198 Dir->setNumIterations(Exprs.NumIterations); 1199 Dir->setCounters(Exprs.Counters); 1200 Dir->setPrivateCounters(Exprs.PrivateCounters); 1201 Dir->setInits(Exprs.Inits); 1202 Dir->setUpdates(Exprs.Updates); 1203 Dir->setFinals(Exprs.Finals); 1204 Dir->setPreInits(Exprs.PreInits); 1205 return Dir; 1206 } 1207 1208 OMPDistributeSimdDirective * 1209 OMPDistributeSimdDirective::CreateEmpty(const ASTContext &C, 1210 unsigned NumClauses, 1211 unsigned CollapsedNum, EmptyShell) { 1212 unsigned Size = 1213 llvm::alignTo(sizeof(OMPDistributeSimdDirective), alignof(OMPClause *)); 1214 void *Mem = C.Allocate( 1215 Size + sizeof(OMPClause *) * NumClauses + 1216 sizeof(Stmt *) * 1217 numLoopChildren(CollapsedNum, OMPD_distribute_simd)); 1218 return new (Mem) OMPDistributeSimdDirective(CollapsedNum, NumClauses); 1219 } 1220 1221 OMPTargetParallelForSimdDirective *OMPTargetParallelForSimdDirective::Create( 1222 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1223 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1224 const HelperExprs &Exprs) { 1225 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective), 1226 alignof(OMPClause *)); 1227 void *Mem = C.Allocate( 1228 Size + sizeof(OMPClause *) * Clauses.size() + 1229 sizeof(Stmt *) * 1230 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd)); 1231 OMPTargetParallelForSimdDirective *Dir = 1232 new (Mem) OMPTargetParallelForSimdDirective(StartLoc, EndLoc, 1233 CollapsedNum, Clauses.size()); 1234 Dir->setClauses(Clauses); 1235 Dir->setAssociatedStmt(AssociatedStmt); 1236 Dir->setIterationVariable(Exprs.IterationVarRef); 1237 Dir->setLastIteration(Exprs.LastIteration); 1238 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1239 Dir->setPreCond(Exprs.PreCond); 1240 Dir->setCond(Exprs.Cond); 1241 Dir->setInit(Exprs.Init); 1242 Dir->setInc(Exprs.Inc); 1243 Dir->setIsLastIterVariable(Exprs.IL); 1244 Dir->setLowerBoundVariable(Exprs.LB); 1245 Dir->setUpperBoundVariable(Exprs.UB); 1246 Dir->setStrideVariable(Exprs.ST); 1247 Dir->setEnsureUpperBound(Exprs.EUB); 1248 Dir->setNextLowerBound(Exprs.NLB); 1249 Dir->setNextUpperBound(Exprs.NUB); 1250 Dir->setNumIterations(Exprs.NumIterations); 1251 Dir->setCounters(Exprs.Counters); 1252 Dir->setPrivateCounters(Exprs.PrivateCounters); 1253 Dir->setInits(Exprs.Inits); 1254 Dir->setUpdates(Exprs.Updates); 1255 Dir->setFinals(Exprs.Finals); 1256 Dir->setPreInits(Exprs.PreInits); 1257 return Dir; 1258 } 1259 1260 OMPTargetParallelForSimdDirective * 1261 OMPTargetParallelForSimdDirective::CreateEmpty(const ASTContext &C, 1262 unsigned NumClauses, 1263 unsigned CollapsedNum, 1264 EmptyShell) { 1265 unsigned Size = llvm::alignTo(sizeof(OMPTargetParallelForSimdDirective), 1266 alignof(OMPClause *)); 1267 void *Mem = C.Allocate( 1268 Size + sizeof(OMPClause *) * NumClauses + 1269 sizeof(Stmt *) * 1270 numLoopChildren(CollapsedNum, OMPD_target_parallel_for_simd)); 1271 return new (Mem) OMPTargetParallelForSimdDirective(CollapsedNum, NumClauses); 1272 } 1273 1274 OMPTargetSimdDirective * 1275 OMPTargetSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc, 1276 SourceLocation EndLoc, unsigned CollapsedNum, 1277 ArrayRef<OMPClause *> Clauses, 1278 Stmt *AssociatedStmt, const HelperExprs &Exprs) { 1279 unsigned Size = 1280 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *)); 1281 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 1282 sizeof(Stmt *) * 1283 numLoopChildren(CollapsedNum, OMPD_target_simd)); 1284 OMPTargetSimdDirective *Dir = new (Mem) 1285 OMPTargetSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size()); 1286 Dir->setClauses(Clauses); 1287 Dir->setAssociatedStmt(AssociatedStmt); 1288 Dir->setIterationVariable(Exprs.IterationVarRef); 1289 Dir->setLastIteration(Exprs.LastIteration); 1290 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1291 Dir->setPreCond(Exprs.PreCond); 1292 Dir->setCond(Exprs.Cond); 1293 Dir->setInit(Exprs.Init); 1294 Dir->setInc(Exprs.Inc); 1295 Dir->setCounters(Exprs.Counters); 1296 Dir->setPrivateCounters(Exprs.PrivateCounters); 1297 Dir->setInits(Exprs.Inits); 1298 Dir->setUpdates(Exprs.Updates); 1299 Dir->setFinals(Exprs.Finals); 1300 Dir->setPreInits(Exprs.PreInits); 1301 return Dir; 1302 } 1303 1304 OMPTargetSimdDirective * 1305 OMPTargetSimdDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1306 unsigned CollapsedNum, EmptyShell) { 1307 unsigned Size = 1308 llvm::alignTo(sizeof(OMPTargetSimdDirective), alignof(OMPClause *)); 1309 void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1310 sizeof(Stmt *) * 1311 numLoopChildren(CollapsedNum, OMPD_target_simd)); 1312 return new (Mem) OMPTargetSimdDirective(CollapsedNum, NumClauses); 1313 } 1314 1315 OMPTeamsDistributeDirective *OMPTeamsDistributeDirective::Create( 1316 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1317 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1318 const HelperExprs &Exprs) { 1319 unsigned Size = 1320 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *)); 1321 void *Mem = C.Allocate( 1322 Size + sizeof(OMPClause *) * Clauses.size() + 1323 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute)); 1324 OMPTeamsDistributeDirective *Dir = new (Mem) OMPTeamsDistributeDirective( 1325 StartLoc, EndLoc, CollapsedNum, Clauses.size()); 1326 Dir->setClauses(Clauses); 1327 Dir->setAssociatedStmt(AssociatedStmt); 1328 Dir->setIterationVariable(Exprs.IterationVarRef); 1329 Dir->setLastIteration(Exprs.LastIteration); 1330 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1331 Dir->setPreCond(Exprs.PreCond); 1332 Dir->setCond(Exprs.Cond); 1333 Dir->setInit(Exprs.Init); 1334 Dir->setInc(Exprs.Inc); 1335 Dir->setIsLastIterVariable(Exprs.IL); 1336 Dir->setLowerBoundVariable(Exprs.LB); 1337 Dir->setUpperBoundVariable(Exprs.UB); 1338 Dir->setStrideVariable(Exprs.ST); 1339 Dir->setEnsureUpperBound(Exprs.EUB); 1340 Dir->setNextLowerBound(Exprs.NLB); 1341 Dir->setNextUpperBound(Exprs.NUB); 1342 Dir->setNumIterations(Exprs.NumIterations); 1343 Dir->setCounters(Exprs.Counters); 1344 Dir->setPrivateCounters(Exprs.PrivateCounters); 1345 Dir->setInits(Exprs.Inits); 1346 Dir->setUpdates(Exprs.Updates); 1347 Dir->setFinals(Exprs.Finals); 1348 Dir->setPreInits(Exprs.PreInits); 1349 return Dir; 1350 } 1351 1352 OMPTeamsDistributeDirective * 1353 OMPTeamsDistributeDirective::CreateEmpty(const ASTContext &C, 1354 unsigned NumClauses, 1355 unsigned CollapsedNum, EmptyShell) { 1356 unsigned Size = 1357 llvm::alignTo(sizeof(OMPTeamsDistributeDirective), alignof(OMPClause *)); 1358 void *Mem = C.Allocate( 1359 Size + sizeof(OMPClause *) * NumClauses + 1360 sizeof(Stmt *) * numLoopChildren(CollapsedNum, OMPD_teams_distribute)); 1361 return new (Mem) OMPTeamsDistributeDirective(CollapsedNum, NumClauses); 1362 } 1363 1364 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::Create( 1365 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1366 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1367 const HelperExprs &Exprs) { 1368 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective), 1369 alignof(OMPClause *)); 1370 void *Mem = 1371 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 1372 sizeof(Stmt *) * 1373 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd)); 1374 OMPTeamsDistributeSimdDirective *Dir = 1375 new (Mem) OMPTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum, 1376 Clauses.size()); 1377 Dir->setClauses(Clauses); 1378 Dir->setAssociatedStmt(AssociatedStmt); 1379 Dir->setIterationVariable(Exprs.IterationVarRef); 1380 Dir->setLastIteration(Exprs.LastIteration); 1381 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1382 Dir->setPreCond(Exprs.PreCond); 1383 Dir->setCond(Exprs.Cond); 1384 Dir->setInit(Exprs.Init); 1385 Dir->setInc(Exprs.Inc); 1386 Dir->setIsLastIterVariable(Exprs.IL); 1387 Dir->setLowerBoundVariable(Exprs.LB); 1388 Dir->setUpperBoundVariable(Exprs.UB); 1389 Dir->setStrideVariable(Exprs.ST); 1390 Dir->setEnsureUpperBound(Exprs.EUB); 1391 Dir->setNextLowerBound(Exprs.NLB); 1392 Dir->setNextUpperBound(Exprs.NUB); 1393 Dir->setNumIterations(Exprs.NumIterations); 1394 Dir->setCounters(Exprs.Counters); 1395 Dir->setPrivateCounters(Exprs.PrivateCounters); 1396 Dir->setInits(Exprs.Inits); 1397 Dir->setUpdates(Exprs.Updates); 1398 Dir->setFinals(Exprs.Finals); 1399 Dir->setPreInits(Exprs.PreInits); 1400 return Dir; 1401 } 1402 1403 OMPTeamsDistributeSimdDirective *OMPTeamsDistributeSimdDirective::CreateEmpty( 1404 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, 1405 EmptyShell) { 1406 unsigned Size = llvm::alignTo(sizeof(OMPTeamsDistributeSimdDirective), 1407 alignof(OMPClause *)); 1408 void *Mem = 1409 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1410 sizeof(Stmt *) * 1411 numLoopChildren(CollapsedNum, OMPD_teams_distribute_simd)); 1412 return new (Mem) OMPTeamsDistributeSimdDirective(CollapsedNum, NumClauses); 1413 } 1414 1415 OMPTeamsDistributeParallelForSimdDirective * 1416 OMPTeamsDistributeParallelForSimdDirective::Create( 1417 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1418 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1419 const HelperExprs &Exprs) { 1420 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective), 1421 alignof(OMPClause *)); 1422 void *Mem = 1423 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + 1424 sizeof(Stmt *) * 1425 numLoopChildren(CollapsedNum, 1426 OMPD_teams_distribute_parallel_for_simd)); 1427 OMPTeamsDistributeParallelForSimdDirective *Dir = new (Mem) 1428 OMPTeamsDistributeParallelForSimdDirective(StartLoc, EndLoc, CollapsedNum, 1429 Clauses.size()); 1430 Dir->setClauses(Clauses); 1431 Dir->setAssociatedStmt(AssociatedStmt); 1432 Dir->setIterationVariable(Exprs.IterationVarRef); 1433 Dir->setLastIteration(Exprs.LastIteration); 1434 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1435 Dir->setPreCond(Exprs.PreCond); 1436 Dir->setCond(Exprs.Cond); 1437 Dir->setInit(Exprs.Init); 1438 Dir->setInc(Exprs.Inc); 1439 Dir->setIsLastIterVariable(Exprs.IL); 1440 Dir->setLowerBoundVariable(Exprs.LB); 1441 Dir->setUpperBoundVariable(Exprs.UB); 1442 Dir->setStrideVariable(Exprs.ST); 1443 Dir->setEnsureUpperBound(Exprs.EUB); 1444 Dir->setNextLowerBound(Exprs.NLB); 1445 Dir->setNextUpperBound(Exprs.NUB); 1446 Dir->setNumIterations(Exprs.NumIterations); 1447 Dir->setPrevLowerBoundVariable(Exprs.PrevLB); 1448 Dir->setPrevUpperBoundVariable(Exprs.PrevUB); 1449 Dir->setDistInc(Exprs.DistInc); 1450 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB); 1451 Dir->setCounters(Exprs.Counters); 1452 Dir->setPrivateCounters(Exprs.PrivateCounters); 1453 Dir->setInits(Exprs.Inits); 1454 Dir->setUpdates(Exprs.Updates); 1455 Dir->setFinals(Exprs.Finals); 1456 Dir->setPreInits(Exprs.PreInits); 1457 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB); 1458 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB); 1459 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB); 1460 Dir->setCombinedInit(Exprs.DistCombinedFields.Init); 1461 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond); 1462 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB); 1463 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB); 1464 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond); 1465 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond); 1466 return Dir; 1467 } 1468 1469 OMPTeamsDistributeParallelForSimdDirective * 1470 OMPTeamsDistributeParallelForSimdDirective::CreateEmpty(const ASTContext &C, 1471 unsigned NumClauses, 1472 unsigned CollapsedNum, 1473 EmptyShell) { 1474 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForSimdDirective), 1475 alignof(OMPClause *)); 1476 void *Mem = 1477 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + 1478 sizeof(Stmt *) * 1479 numLoopChildren(CollapsedNum, 1480 OMPD_teams_distribute_parallel_for_simd)); 1481 return new (Mem) 1482 OMPTeamsDistributeParallelForSimdDirective(CollapsedNum, NumClauses); 1483 } 1484 1485 OMPTeamsDistributeParallelForDirective * 1486 OMPTeamsDistributeParallelForDirective::Create( 1487 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1488 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1489 const HelperExprs &Exprs, bool HasCancel) { 1490 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective), 1491 alignof(OMPClause *)); 1492 void *Mem = C.Allocate( 1493 Size + sizeof(OMPClause *) * Clauses.size() + 1494 sizeof(Stmt *) * 1495 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for)); 1496 OMPTeamsDistributeParallelForDirective *Dir = new (Mem) 1497 OMPTeamsDistributeParallelForDirective(StartLoc, EndLoc, CollapsedNum, 1498 Clauses.size()); 1499 Dir->setClauses(Clauses); 1500 Dir->setAssociatedStmt(AssociatedStmt); 1501 Dir->setIterationVariable(Exprs.IterationVarRef); 1502 Dir->setLastIteration(Exprs.LastIteration); 1503 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1504 Dir->setPreCond(Exprs.PreCond); 1505 Dir->setCond(Exprs.Cond); 1506 Dir->setInit(Exprs.Init); 1507 Dir->setInc(Exprs.Inc); 1508 Dir->setIsLastIterVariable(Exprs.IL); 1509 Dir->setLowerBoundVariable(Exprs.LB); 1510 Dir->setUpperBoundVariable(Exprs.UB); 1511 Dir->setStrideVariable(Exprs.ST); 1512 Dir->setEnsureUpperBound(Exprs.EUB); 1513 Dir->setNextLowerBound(Exprs.NLB); 1514 Dir->setNextUpperBound(Exprs.NUB); 1515 Dir->setNumIterations(Exprs.NumIterations); 1516 Dir->setPrevLowerBoundVariable(Exprs.PrevLB); 1517 Dir->setPrevUpperBoundVariable(Exprs.PrevUB); 1518 Dir->setDistInc(Exprs.DistInc); 1519 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB); 1520 Dir->setCounters(Exprs.Counters); 1521 Dir->setPrivateCounters(Exprs.PrivateCounters); 1522 Dir->setInits(Exprs.Inits); 1523 Dir->setUpdates(Exprs.Updates); 1524 Dir->setFinals(Exprs.Finals); 1525 Dir->setPreInits(Exprs.PreInits); 1526 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB); 1527 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB); 1528 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB); 1529 Dir->setCombinedInit(Exprs.DistCombinedFields.Init); 1530 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond); 1531 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB); 1532 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB); 1533 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond); 1534 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond); 1535 Dir->HasCancel = HasCancel; 1536 return Dir; 1537 } 1538 1539 OMPTeamsDistributeParallelForDirective * 1540 OMPTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C, 1541 unsigned NumClauses, 1542 unsigned CollapsedNum, 1543 EmptyShell) { 1544 auto Size = llvm::alignTo(sizeof(OMPTeamsDistributeParallelForDirective), 1545 alignof(OMPClause *)); 1546 void *Mem = C.Allocate( 1547 Size + sizeof(OMPClause *) * NumClauses + 1548 sizeof(Stmt *) * 1549 numLoopChildren(CollapsedNum, OMPD_teams_distribute_parallel_for)); 1550 return new (Mem) 1551 OMPTeamsDistributeParallelForDirective(CollapsedNum, NumClauses); 1552 } 1553 1554 OMPTargetTeamsDirective *OMPTargetTeamsDirective::Create( 1555 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1556 ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) { 1557 auto Size = 1558 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *)); 1559 void *Mem = 1560 C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *)); 1561 OMPTargetTeamsDirective *Dir = 1562 new (Mem) OMPTargetTeamsDirective(StartLoc, EndLoc, Clauses.size()); 1563 Dir->setClauses(Clauses); 1564 Dir->setAssociatedStmt(AssociatedStmt); 1565 return Dir; 1566 } 1567 1568 OMPTargetTeamsDirective * 1569 OMPTargetTeamsDirective::CreateEmpty(const ASTContext &C, unsigned NumClauses, 1570 EmptyShell) { 1571 auto Size = 1572 llvm::alignTo(sizeof(OMPTargetTeamsDirective), alignof(OMPClause *)); 1573 void *Mem = 1574 C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *)); 1575 return new (Mem) OMPTargetTeamsDirective(NumClauses); 1576 } 1577 1578 OMPTargetTeamsDistributeDirective *OMPTargetTeamsDistributeDirective::Create( 1579 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1580 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1581 const HelperExprs &Exprs) { 1582 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective), 1583 alignof(OMPClause *)); 1584 void *Mem = C.Allocate( 1585 Size + sizeof(OMPClause *) * Clauses.size() + 1586 sizeof(Stmt *) * 1587 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute)); 1588 OMPTargetTeamsDistributeDirective *Dir = 1589 new (Mem) OMPTargetTeamsDistributeDirective(StartLoc, EndLoc, CollapsedNum, 1590 Clauses.size()); 1591 Dir->setClauses(Clauses); 1592 Dir->setAssociatedStmt(AssociatedStmt); 1593 Dir->setIterationVariable(Exprs.IterationVarRef); 1594 Dir->setLastIteration(Exprs.LastIteration); 1595 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1596 Dir->setPreCond(Exprs.PreCond); 1597 Dir->setCond(Exprs.Cond); 1598 Dir->setInit(Exprs.Init); 1599 Dir->setInc(Exprs.Inc); 1600 Dir->setIsLastIterVariable(Exprs.IL); 1601 Dir->setLowerBoundVariable(Exprs.LB); 1602 Dir->setUpperBoundVariable(Exprs.UB); 1603 Dir->setStrideVariable(Exprs.ST); 1604 Dir->setEnsureUpperBound(Exprs.EUB); 1605 Dir->setNextLowerBound(Exprs.NLB); 1606 Dir->setNextUpperBound(Exprs.NUB); 1607 Dir->setNumIterations(Exprs.NumIterations); 1608 Dir->setCounters(Exprs.Counters); 1609 Dir->setPrivateCounters(Exprs.PrivateCounters); 1610 Dir->setInits(Exprs.Inits); 1611 Dir->setUpdates(Exprs.Updates); 1612 Dir->setFinals(Exprs.Finals); 1613 Dir->setPreInits(Exprs.PreInits); 1614 return Dir; 1615 } 1616 1617 OMPTargetTeamsDistributeDirective * 1618 OMPTargetTeamsDistributeDirective::CreateEmpty(const ASTContext &C, 1619 unsigned NumClauses, 1620 unsigned CollapsedNum, 1621 EmptyShell) { 1622 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeDirective), 1623 alignof(OMPClause *)); 1624 void *Mem = C.Allocate( 1625 Size + sizeof(OMPClause *) * NumClauses + 1626 sizeof(Stmt *) * 1627 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute)); 1628 return new (Mem) OMPTargetTeamsDistributeDirective(CollapsedNum, NumClauses); 1629 } 1630 1631 OMPTargetTeamsDistributeParallelForDirective * 1632 OMPTargetTeamsDistributeParallelForDirective::Create( 1633 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1634 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1635 const HelperExprs &Exprs, bool HasCancel) { 1636 auto Size = 1637 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective), 1638 alignof(OMPClause *)); 1639 void *Mem = C.Allocate( 1640 Size + sizeof(OMPClause *) * Clauses.size() + 1641 sizeof(Stmt *) * 1642 numLoopChildren(CollapsedNum, 1643 OMPD_target_teams_distribute_parallel_for)); 1644 OMPTargetTeamsDistributeParallelForDirective *Dir = 1645 new (Mem) OMPTargetTeamsDistributeParallelForDirective( 1646 StartLoc, EndLoc, CollapsedNum, Clauses.size()); 1647 Dir->setClauses(Clauses); 1648 Dir->setAssociatedStmt(AssociatedStmt); 1649 Dir->setIterationVariable(Exprs.IterationVarRef); 1650 Dir->setLastIteration(Exprs.LastIteration); 1651 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1652 Dir->setPreCond(Exprs.PreCond); 1653 Dir->setCond(Exprs.Cond); 1654 Dir->setInit(Exprs.Init); 1655 Dir->setInc(Exprs.Inc); 1656 Dir->setIsLastIterVariable(Exprs.IL); 1657 Dir->setLowerBoundVariable(Exprs.LB); 1658 Dir->setUpperBoundVariable(Exprs.UB); 1659 Dir->setStrideVariable(Exprs.ST); 1660 Dir->setEnsureUpperBound(Exprs.EUB); 1661 Dir->setNextLowerBound(Exprs.NLB); 1662 Dir->setNextUpperBound(Exprs.NUB); 1663 Dir->setNumIterations(Exprs.NumIterations); 1664 Dir->setPrevLowerBoundVariable(Exprs.PrevLB); 1665 Dir->setPrevUpperBoundVariable(Exprs.PrevUB); 1666 Dir->setDistInc(Exprs.DistInc); 1667 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB); 1668 Dir->setCounters(Exprs.Counters); 1669 Dir->setPrivateCounters(Exprs.PrivateCounters); 1670 Dir->setInits(Exprs.Inits); 1671 Dir->setUpdates(Exprs.Updates); 1672 Dir->setFinals(Exprs.Finals); 1673 Dir->setPreInits(Exprs.PreInits); 1674 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB); 1675 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB); 1676 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB); 1677 Dir->setCombinedInit(Exprs.DistCombinedFields.Init); 1678 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond); 1679 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB); 1680 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB); 1681 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond); 1682 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond); 1683 Dir->HasCancel = HasCancel; 1684 return Dir; 1685 } 1686 1687 OMPTargetTeamsDistributeParallelForDirective * 1688 OMPTargetTeamsDistributeParallelForDirective::CreateEmpty(const ASTContext &C, 1689 unsigned NumClauses, 1690 unsigned CollapsedNum, 1691 EmptyShell) { 1692 auto Size = 1693 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForDirective), 1694 alignof(OMPClause *)); 1695 void *Mem = C.Allocate( 1696 Size + sizeof(OMPClause *) * NumClauses + 1697 sizeof(Stmt *) * 1698 numLoopChildren(CollapsedNum, 1699 OMPD_target_teams_distribute_parallel_for)); 1700 return new (Mem) 1701 OMPTargetTeamsDistributeParallelForDirective(CollapsedNum, NumClauses); 1702 } 1703 1704 OMPTargetTeamsDistributeParallelForSimdDirective * 1705 OMPTargetTeamsDistributeParallelForSimdDirective::Create( 1706 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1707 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1708 const HelperExprs &Exprs) { 1709 auto Size = 1710 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective), 1711 alignof(OMPClause *)); 1712 void *Mem = C.Allocate( 1713 Size + sizeof(OMPClause *) * Clauses.size() + 1714 sizeof(Stmt *) * 1715 numLoopChildren(CollapsedNum, 1716 OMPD_target_teams_distribute_parallel_for_simd)); 1717 OMPTargetTeamsDistributeParallelForSimdDirective *Dir = 1718 new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective( 1719 StartLoc, EndLoc, CollapsedNum, Clauses.size()); 1720 Dir->setClauses(Clauses); 1721 Dir->setAssociatedStmt(AssociatedStmt); 1722 Dir->setIterationVariable(Exprs.IterationVarRef); 1723 Dir->setLastIteration(Exprs.LastIteration); 1724 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1725 Dir->setPreCond(Exprs.PreCond); 1726 Dir->setCond(Exprs.Cond); 1727 Dir->setInit(Exprs.Init); 1728 Dir->setInc(Exprs.Inc); 1729 Dir->setIsLastIterVariable(Exprs.IL); 1730 Dir->setLowerBoundVariable(Exprs.LB); 1731 Dir->setUpperBoundVariable(Exprs.UB); 1732 Dir->setStrideVariable(Exprs.ST); 1733 Dir->setEnsureUpperBound(Exprs.EUB); 1734 Dir->setNextLowerBound(Exprs.NLB); 1735 Dir->setNextUpperBound(Exprs.NUB); 1736 Dir->setNumIterations(Exprs.NumIterations); 1737 Dir->setPrevLowerBoundVariable(Exprs.PrevLB); 1738 Dir->setPrevUpperBoundVariable(Exprs.PrevUB); 1739 Dir->setDistInc(Exprs.DistInc); 1740 Dir->setPrevEnsureUpperBound(Exprs.PrevEUB); 1741 Dir->setCounters(Exprs.Counters); 1742 Dir->setPrivateCounters(Exprs.PrivateCounters); 1743 Dir->setInits(Exprs.Inits); 1744 Dir->setUpdates(Exprs.Updates); 1745 Dir->setFinals(Exprs.Finals); 1746 Dir->setPreInits(Exprs.PreInits); 1747 Dir->setCombinedLowerBoundVariable(Exprs.DistCombinedFields.LB); 1748 Dir->setCombinedUpperBoundVariable(Exprs.DistCombinedFields.UB); 1749 Dir->setCombinedEnsureUpperBound(Exprs.DistCombinedFields.EUB); 1750 Dir->setCombinedInit(Exprs.DistCombinedFields.Init); 1751 Dir->setCombinedCond(Exprs.DistCombinedFields.Cond); 1752 Dir->setCombinedNextLowerBound(Exprs.DistCombinedFields.NLB); 1753 Dir->setCombinedNextUpperBound(Exprs.DistCombinedFields.NUB); 1754 Dir->setCombinedDistCond(Exprs.DistCombinedFields.DistCond); 1755 Dir->setCombinedParForInDistCond(Exprs.DistCombinedFields.ParForInDistCond); 1756 return Dir; 1757 } 1758 1759 OMPTargetTeamsDistributeParallelForSimdDirective * 1760 OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty( 1761 const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, 1762 EmptyShell) { 1763 auto Size = 1764 llvm::alignTo(sizeof(OMPTargetTeamsDistributeParallelForSimdDirective), 1765 alignof(OMPClause *)); 1766 void *Mem = C.Allocate( 1767 Size + sizeof(OMPClause *) * NumClauses + 1768 sizeof(Stmt *) * 1769 numLoopChildren(CollapsedNum, 1770 OMPD_target_teams_distribute_parallel_for_simd)); 1771 return new (Mem) OMPTargetTeamsDistributeParallelForSimdDirective( 1772 CollapsedNum, NumClauses); 1773 } 1774 1775 OMPTargetTeamsDistributeSimdDirective * 1776 OMPTargetTeamsDistributeSimdDirective::Create( 1777 const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, 1778 unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, 1779 const HelperExprs &Exprs) { 1780 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective), 1781 alignof(OMPClause *)); 1782 void *Mem = C.Allocate( 1783 Size + sizeof(OMPClause *) * Clauses.size() + 1784 sizeof(Stmt *) * 1785 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd)); 1786 OMPTargetTeamsDistributeSimdDirective *Dir = new (Mem) 1787 OMPTargetTeamsDistributeSimdDirective(StartLoc, EndLoc, CollapsedNum, 1788 Clauses.size()); 1789 Dir->setClauses(Clauses); 1790 Dir->setAssociatedStmt(AssociatedStmt); 1791 Dir->setIterationVariable(Exprs.IterationVarRef); 1792 Dir->setLastIteration(Exprs.LastIteration); 1793 Dir->setCalcLastIteration(Exprs.CalcLastIteration); 1794 Dir->setPreCond(Exprs.PreCond); 1795 Dir->setCond(Exprs.Cond); 1796 Dir->setInit(Exprs.Init); 1797 Dir->setInc(Exprs.Inc); 1798 Dir->setIsLastIterVariable(Exprs.IL); 1799 Dir->setLowerBoundVariable(Exprs.LB); 1800 Dir->setUpperBoundVariable(Exprs.UB); 1801 Dir->setStrideVariable(Exprs.ST); 1802 Dir->setEnsureUpperBound(Exprs.EUB); 1803 Dir->setNextLowerBound(Exprs.NLB); 1804 Dir->setNextUpperBound(Exprs.NUB); 1805 Dir->setNumIterations(Exprs.NumIterations); 1806 Dir->setCounters(Exprs.Counters); 1807 Dir->setPrivateCounters(Exprs.PrivateCounters); 1808 Dir->setInits(Exprs.Inits); 1809 Dir->setUpdates(Exprs.Updates); 1810 Dir->setFinals(Exprs.Finals); 1811 Dir->setPreInits(Exprs.PreInits); 1812 return Dir; 1813 } 1814 1815 OMPTargetTeamsDistributeSimdDirective * 1816 OMPTargetTeamsDistributeSimdDirective::CreateEmpty(const ASTContext &C, 1817 unsigned NumClauses, 1818 unsigned CollapsedNum, 1819 EmptyShell) { 1820 auto Size = llvm::alignTo(sizeof(OMPTargetTeamsDistributeSimdDirective), 1821 alignof(OMPClause *)); 1822 void *Mem = C.Allocate( 1823 Size + sizeof(OMPClause *) * NumClauses + 1824 sizeof(Stmt *) * 1825 numLoopChildren(CollapsedNum, OMPD_target_teams_distribute_simd)); 1826 return new (Mem) 1827 OMPTargetTeamsDistributeSimdDirective(CollapsedNum, NumClauses); 1828 } 1829