16 #ifndef LLVM_CLANG_AST_OPENMPCLAUSE_H 17 #define LLVM_CLANG_AST_OPENMPCLAUSE_H 28 #include "llvm/ADT/ArrayRef.h" 29 #include "llvm/ADT/MapVector.h" 30 #include "llvm/ADT/SmallVector.h" 31 #include "llvm/ADT/iterator.h" 32 #include "llvm/ADT/iterator_range.h" 33 #include "llvm/Support/Casting.h" 34 #include "llvm/Support/Compiler.h" 35 #include "llvm/Support/TrailingObjects.h" 62 : StartLoc(StartLoc), EndLoc(EndLoc), Kind(K) {}
111 Stmt *PreInit =
nullptr;
118 assert(
get(This) &&
"get is not tuned for pre-init.");
124 CaptureRegion = ThisRegion;
147 Expr *PostUpdate =
nullptr;
150 OMPClauseWithPostUpdate(
const OMPClause *This) : OMPClauseWithPreInit(This) {
151 assert(
get(This) &&
"get is not tuned for post-update.");
179 : StartLoc(StartLoc), LParenLoc(LParenLoc), EndLoc(EndLoc) {}
204 :
OMPClause(K, StartLoc, EndLoc), LParenLoc(LParenLoc), NumVars(N) {}
209 static_cast<T *
>(
this)->
template getTrailingObjects<Expr *>(), NumVars);
214 assert(VL.size() == NumVars &&
215 "Number of variables is not the same as the preallocated buffer");
216 std::copy(VL.begin(), VL.end(),
217 static_cast<T *
>(
this)->
template getTrailingObjects<Expr *>());
249 return llvm::makeArrayRef(
250 static_cast<const T *>(
this)->
template getTrailingObjects<Expr *>(),
270 Stmt *Allocator =
nullptr;
273 void setAllocator(
Expr *A) { Allocator = A; }
284 :
OMPClause(OMPC_allocator, StartLoc, EndLoc), LParenLoc(LParenLoc),
334 Expr *Allocator =
nullptr;
351 Allocator(Allocator), ColonLoc(ColonLoc) {}
364 void setAllocator(
Expr *A) { Allocator = A; }
394 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
395 reinterpret_cast<Stmt **>(varlist_end()));
429 Stmt *Condition =
nullptr;
441 void setCondition(
Expr *Cond) { Condition = Cond; }
447 void setNameModifierLoc(
SourceLocation Loc) { NameModifierLoc = Loc; }
469 :
OMPClause(OMPC_if, StartLoc, EndLoc), OMPClauseWithPreInit(this),
470 LParenLoc(LParenLoc), Condition(Cond), ColonLoc(ColonLoc),
471 NameModifier(NameModifier), NameModifierLoc(NameModifierLoc) {
472 setPreInitStmt(HelperCond, CaptureRegion);
478 OMPClauseWithPreInit(this) {}
529 Stmt *Condition =
nullptr;
532 void setCondition(
Expr *Cond) { Condition = Cond; }
543 :
OMPClause(OMPC_final, StartLoc, EndLoc), LParenLoc(LParenLoc),
592 Stmt *NumThreads =
nullptr;
595 void setNumThreads(
Expr *NThreads) { NumThreads = NThreads; }
611 :
OMPClause(OMPC_num_threads, StartLoc, EndLoc),
612 OMPClauseWithPreInit(this), LParenLoc(LParenLoc),
613 NumThreads(NumThreads) {
614 setPreInitStmt(HelperNumThreads, CaptureRegion);
620 OMPClauseWithPreInit(this) {}
668 Stmt *Safelen =
nullptr;
671 void setSafelen(
Expr *Len) { Safelen = Len; }
681 :
OMPClause(OMPC_safelen, StartLoc, EndLoc), LParenLoc(LParenLoc),
733 Stmt *Simdlen =
nullptr;
736 void setSimdlen(
Expr *Len) { Simdlen = Len; }
746 :
OMPClause(OMPC_simdlen, StartLoc, EndLoc), LParenLoc(LParenLoc),
798 Stmt *NumForLoops =
nullptr;
801 void setNumForLoops(
Expr *Num) { NumForLoops = Num; }
812 :
OMPClause(OMPC_collapse, StartLoc, EndLoc), LParenLoc(LParenLoc),
873 void setDefaultKindKwLoc(
SourceLocation KLoc) { KindKwLoc = KLoc; }
886 :
OMPClause(OMPC_default, StartLoc, EndLoc), LParenLoc(LParenLoc),
887 Kind(A), KindKwLoc(ALoc) {}
953 void setProcBindKindKwLoc(
SourceLocation KLoc) { KindKwLoc = KLoc; }
967 :
OMPClause(OMPC_proc_bind, StartLoc, EndLoc), LParenLoc(LParenLoc),
968 Kind(A), KindKwLoc(ALoc) {}
1022 :
OMPClause(OMPC_unified_address, StartLoc, EndLoc) {}
1064 :
OMPClause(OMPC_unified_shared_memory, StartLoc, EndLoc) {}
1106 :
OMPClause(OMPC_reverse_offload, StartLoc, EndLoc) {}
1148 :
OMPClause(OMPC_dynamic_allocators, StartLoc, EndLoc) {}
1223 :
OMPClause(OMPC_atomic_default_mem_order, StartLoc, EndLoc),
1224 LParenLoc(LParenLoc), Kind(A), KindKwLoc(ALoc) {}
1282 enum {FIRST, SECOND, NUM_MODIFIERS};
1295 Expr *ChunkSize =
nullptr;
1306 Modifiers[FIRST] = M;
1313 Modifiers[SECOND] = M;
1318 ModifiersLoc[FIRST] = Loc;
1323 ModifiersLoc[SECOND] = Loc;
1331 Modifiers[FIRST] = M;
1334 Modifiers[SECOND] = M;
1356 void setChunkSize(
Expr *E) { ChunkSize = E; }
1377 Expr *ChunkSize,
Stmt *HelperChunkSize,
1380 :
OMPClause(OMPC_schedule, StartLoc, EndLoc), OMPClauseWithPreInit(this),
1381 LParenLoc(LParenLoc), Kind(Kind), KindLoc(KLoc), CommaLoc(CommaLoc),
1382 ChunkSize(ChunkSize) {
1383 setPreInitStmt(HelperChunkSize);
1384 Modifiers[FIRST] = M1;
1385 Modifiers[SECOND] = M2;
1386 ModifiersLoc[FIRST] = M1Loc;
1387 ModifiersLoc[SECOND] = M2Loc;
1393 OMPClauseWithPreInit(this) {
1403 return Modifiers[FIRST];
1408 return Modifiers[SECOND];
1419 return ModifiersLoc[FIRST];
1424 return ModifiersLoc[SECOND];
1437 return child_range(reinterpret_cast<Stmt **>(&ChunkSize),
1438 reinterpret_cast<Stmt **>(&ChunkSize) + 1);
1475 Stmt *NumForLoops =
nullptr;
1478 unsigned NumberOfLoops = 0;
1489 :
OMPClause(OMPC_ordered, StartLoc, EndLoc), LParenLoc(LParenLoc),
1490 NumForLoops(Num), NumberOfLoops(NumLoops) {}
1495 NumberOfLoops(NumLoops) {}
1498 void setNumForLoops(
Expr *Num) { NumForLoops = Num; }
1526 void setLoopNumIterations(
unsigned NumLoop,
Expr *NumIterations);
1531 void setLoopCounter(
unsigned NumLoop,
Expr *Counter);
1533 Expr *getLoopCounter(
unsigned NumLoop);
1534 const Expr *getLoopCounter(
unsigned NumLoop)
const;
1567 :
OMPClause(OMPC_nowait, StartLoc, EndLoc) {}
1606 :
OMPClause(OMPC_untied, StartLoc, EndLoc) {}
1646 :
OMPClause(OMPC_mergeable, StartLoc, EndLoc) {}
1685 :
OMPClause(OMPC_read, StartLoc, EndLoc) {}
1723 :
OMPClause(OMPC_write, StartLoc, EndLoc) {}
1763 :
OMPClause(OMPC_update, StartLoc, EndLoc) {}
1803 :
OMPClause(OMPC_capture, StartLoc, EndLoc) {}
1843 :
OMPClause(OMPC_seq_cst, StartLoc, EndLoc) {}
1913 return llvm::makeArrayRef(varlist_end(), varlist_size());
1940 llvm::iterator_range<private_copies_const_iterator>;
1944 getPrivateCopies().end());
1949 getPrivateCopies().end());
1953 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
1954 reinterpret_cast<Stmt **>(varlist_end()));
1984 public OMPClauseWithPreInit,
1999 LParenLoc, EndLoc, N),
2000 OMPClauseWithPreInit(this) {}
2009 OMPClauseWithPreInit(this) {}
2022 return llvm::makeArrayRef(varlist_end(), varlist_size());
2036 return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
2068 llvm::iterator_range<private_copies_const_iterator>;
2072 getPrivateCopies().end());
2076 getPrivateCopies().end());
2092 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2093 reinterpret_cast<Stmt **>(varlist_end()));
2123 public OMPClauseWithPostUpdate,
2154 LParenLoc, EndLoc, N),
2155 OMPClauseWithPostUpdate(this) {}
2164 OMPClauseWithPostUpdate(this) {}
2172 return llvm::makeArrayRef(varlist_end(), varlist_size());
2186 return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
2200 return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
2213 return llvm::makeArrayRef(getDestinationExprs().end(), varlist_size());
2257 llvm::iterator_range<helper_expr_const_iterator>;
2265 getPrivateCopies().end());
2270 getPrivateCopies().end());
2275 getSourceExprs().end());
2284 getDestinationExprs().end());
2289 getDestinationExprs().end());
2294 getAssignmentOps().end());
2299 getAssignmentOps().end());
2303 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2304 reinterpret_cast<Stmt **>(varlist_end()));
2375 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2376 reinterpret_cast<Stmt **>(varlist_end()));
2406 public OMPClauseWithPostUpdate,
2435 LParenLoc, EndLoc, N),
2436 OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
2437 QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
2446 OMPClauseWithPostUpdate(this) {}
2467 return llvm::makeArrayRef(varlist_end(), varlist_size());
2480 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
2495 return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
2509 return llvm::makeArrayRef(getRHSExprs().end(), varlist_size());
2572 llvm::iterator_range<helper_expr_const_iterator>;
2600 getReductionOps().end());
2605 getReductionOps().end());
2609 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2610 reinterpret_cast<Stmt **>(varlist_end()));
2640 public OMPClauseWithPostUpdate,
2669 LParenLoc, EndLoc, N),
2670 OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
2671 QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
2680 OMPClauseWithPostUpdate(this) {}
2700 return llvm::makeArrayRef(varlist_end(), varlist_size());
2713 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
2727 return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
2741 return llvm::makeArrayRef(getRHSExprs().end(), varlist_size());
2804 llvm::iterator_range<helper_expr_const_iterator>;
2832 getReductionOps().end());
2837 getReductionOps().end());
2841 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2842 reinterpret_cast<Stmt **>(varlist_end()));
2871 public OMPClauseWithPostUpdate,
2900 LParenLoc, EndLoc, N),
2901 OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
2902 QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
2911 OMPClauseWithPostUpdate(this) {}
2931 return llvm::makeArrayRef(varlist_end(), varlist_size());
2944 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
2958 return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
2972 return llvm::makeArrayRef(getRHSExprs().end(), varlist_size());
2983 return llvm::makeArrayRef(getReductionOps().end(), varlist_size());
3049 llvm::iterator_range<helper_expr_const_iterator>;
3077 getReductionOps().end());
3082 getReductionOps().end());
3087 getTaskgroupDescriptors().end());
3092 getTaskgroupDescriptors().end());
3096 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3097 reinterpret_cast<Stmt **>(varlist_end()));
3127 public OMPClauseWithPostUpdate,
3161 OMPClauseWithPostUpdate(this), Modifier(Modifier),
3162 ModifierLoc(ModifierLoc), ColonLoc(ColonLoc) {}
3171 OMPClauseWithPostUpdate(this) {}
3189 return llvm::makeArrayRef(varlist_end(), varlist_size());
3196 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
3204 return llvm::makeArrayRef(
getInits().end(), varlist_size());
3212 return llvm::makeArrayRef(
getUpdates().end(), varlist_size());
3347 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3348 reinterpret_cast<Stmt **>(varlist_end()));
3387 void setAlignment(Expr *A) { *varlist_end() = A; }
3397 SourceLocation ColonLoc, SourceLocation EndLoc,
3401 ColonLoc(ColonLoc) {}
3408 SourceLocation(), SourceLocation(),
3422 SourceLocation LParenLoc,
3423 SourceLocation ColonLoc,
3424 SourceLocation EndLoc, ArrayRef<Expr *> VL,
3446 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3447 reinterpret_cast<Stmt **>(varlist_end()));
3463 return T->getClauseKind() == OMPC_aligned;
3501 SourceLocation EndLoc,
unsigned N)
3510 SourceLocation(), SourceLocation(),
3516 void setSourceExprs(ArrayRef<Expr *> SrcExprs);
3519 MutableArrayRef<Expr *> getSourceExprs() {
3520 return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
3522 ArrayRef<const Expr *> getSourceExprs()
const {
3523 return llvm::makeArrayRef(varlist_end(), varlist_size());
3529 void setDestinationExprs(ArrayRef<Expr *> DstExprs);
3532 MutableArrayRef<Expr *> getDestinationExprs() {
3533 return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
3535 ArrayRef<const Expr *> getDestinationExprs()
const {
3536 return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
3543 void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
3546 MutableArrayRef<Expr *> getAssignmentOps() {
3547 return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
3549 ArrayRef<const Expr *> getAssignmentOps()
const {
3550 return llvm::makeArrayRef(getDestinationExprs().end(), varlist_size());
3576 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
3577 SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> SrcExprs,
3578 ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps);
3590 llvm::iterator_range<helper_expr_const_iterator>;
3594 getSourceExprs().end());
3603 getDestinationExprs().end());
3608 getDestinationExprs().end());
3613 getAssignmentOps().end());
3618 getAssignmentOps().end());
3622 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3623 reinterpret_cast<Stmt **>(varlist_end()));
3639 return T->getClauseKind() == OMPC_copyin;
3665 SourceLocation EndLoc,
unsigned N)
3667 LParenLoc, EndLoc, N) {}
3674 OMPC_copyprivate, SourceLocation(), SourceLocation(),
3675 SourceLocation(), N) {}
3680 void setSourceExprs(ArrayRef<Expr *> SrcExprs);
3683 MutableArrayRef<Expr *> getSourceExprs() {
3684 return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
3686 ArrayRef<const Expr *> getSourceExprs()
const {
3687 return llvm::makeArrayRef(varlist_end(), varlist_size());
3693 void setDestinationExprs(ArrayRef<Expr *> DstExprs);
3696 MutableArrayRef<Expr *> getDestinationExprs() {
3697 return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
3699 ArrayRef<const Expr *> getDestinationExprs()
const {
3700 return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
3707 void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
3710 MutableArrayRef<Expr *> getAssignmentOps() {
3711 return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
3713 ArrayRef<const Expr *> getAssignmentOps()
const {
3714 return llvm::makeArrayRef(getDestinationExprs().end(), varlist_size());
3739 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
3740 SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> SrcExprs,
3741 ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps);
3753 llvm::iterator_range<helper_expr_const_iterator>;
3757 getSourceExprs().end());
3766 getDestinationExprs().end());
3771 getDestinationExprs().end());
3776 getAssignmentOps().end());
3781 getAssignmentOps().end());
3785 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3786 reinterpret_cast<Stmt **>(varlist_end()));
3802 return T->getClauseKind() == OMPC_copyprivate;
3830 OMPFlushClause(SourceLocation StartLoc, SourceLocation LParenLoc,
3831 SourceLocation EndLoc,
unsigned N)
3832 : OMPVarListClause<OMPFlushClause>(OMPC_flush, StartLoc, LParenLoc,
3839 : OMPVarListClause<OMPFlushClause>(OMPC_flush, SourceLocation(),
3840 SourceLocation(), SourceLocation(),
3852 SourceLocation LParenLoc, SourceLocation EndLoc,
3853 ArrayRef<Expr *> VL);
3862 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3863 reinterpret_cast<Stmt **>(varlist_end()));
3879 return T->getClauseKind() == OMPC_flush;
3902 SourceLocation DepLoc;
3908 unsigned NumLoops = 0;
3919 SourceLocation EndLoc,
unsigned N,
unsigned NumLoops)
3921 EndLoc, N), NumLoops(NumLoops) {}
3930 SourceLocation(), SourceLocation(),
3932 NumLoops(NumLoops) {}
3938 void setDependencyLoc(SourceLocation Loc) { DepLoc = Loc; }
3941 void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
3957 SourceLocation LParenLoc,
3958 SourceLocation EndLoc,
3960 SourceLocation DepLoc, SourceLocation ColonLoc,
3961 ArrayRef<Expr *> VL,
unsigned NumLoops);
3986 void setLoopData(
unsigned NumLoop, Expr *Cnt);
3989 Expr *getLoopData(
unsigned NumLoop);
3990 const Expr *getLoopData(
unsigned NumLoop)
const;
3993 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3994 reinterpret_cast<Stmt **>(varlist_end()));
4010 return T->getClauseKind() == OMPC_depend;
4026 SourceLocation LParenLoc;
4029 Stmt *Device =
nullptr;
4034 void setDevice(Expr *E) { Device = E; }
4046 SourceLocation StartLoc, SourceLocation LParenLoc,
4047 SourceLocation EndLoc)
4048 :
OMPClause(OMPC_device, StartLoc, EndLoc), OMPClauseWithPreInit(this),
4049 LParenLoc(LParenLoc), Device(E) {
4050 setPreInitStmt(HelperE, CaptureRegion);
4055 :
OMPClause(OMPC_device, SourceLocation(), SourceLocation()),
4056 OMPClauseWithPreInit(this) {}
4084 return T->getClauseKind() == OMPC_device;
4101 :
OMPClause(OMPC_threads, StartLoc, EndLoc) {}
4105 :
OMPClause(OMPC_threads, SourceLocation(), SourceLocation()) {}
4123 return T->getClauseKind() == OMPC_threads;
4140 :
OMPClause(OMPC_simd, StartLoc, EndLoc) {}
4161 return T->getClauseKind() == OMPC_simd;
4177 Expr *AssociatedExpression =
nullptr;
4182 ValueDecl *AssociatedDeclaration =
nullptr;
4187 ValueDecl *AssociatedDeclaration)
4188 : AssociatedExpression(AssociatedExpression),
4189 AssociatedDeclaration(
4190 AssociatedDeclaration
4197 return AssociatedDeclaration;
4220 getUniqueDeclarationsTotalNumber(ArrayRef<const ValueDecl *> Declarations);
4236 unsigned NumComponentLists,
unsigned NumComponents)
4237 : NumVars(NumVars), NumUniqueDeclarations(NumUniqueDeclarations),
4238 NumComponentLists(NumComponentLists), NumComponents(NumComponents) {}
4251 unsigned NumUniqueDeclarations;
4254 unsigned NumComponentLists;
4257 unsigned NumComponents;
4260 NestedNameSpecifierLoc MapperQualifierLoc;
4263 DeclarationNameInfo MapperIdInfo;
4285 NestedNameSpecifierLoc *MapperQualifierLocPtr =
nullptr,
4286 DeclarationNameInfo *MapperIdInfoPtr =
nullptr)
4289 NumUniqueDeclarations(Sizes.NumUniqueDeclarations),
4290 NumComponentLists(Sizes.NumComponentLists),
4291 NumComponents(Sizes.NumComponents) {
4292 if (MapperQualifierLocPtr)
4293 MapperQualifierLoc = *MapperQualifierLocPtr;
4294 if (MapperIdInfoPtr)
4295 MapperIdInfo = *MapperIdInfoPtr;
4301 return MutableArrayRef<ValueDecl *>(
4302 static_cast<T *
>(
this)->
template getTrailingObjects<ValueDecl *>(),
4303 NumUniqueDeclarations);
4309 return ArrayRef<ValueDecl *>(
4310 static_cast<const T *
>(
this)
4311 ->
template getTrailingObjects<ValueDecl *>(),
4312 NumUniqueDeclarations);
4318 assert(UDs.size() == NumUniqueDeclarations &&
4319 "Unexpected amount of unique declarations.");
4320 std::copy(UDs.begin(), UDs.end(), getUniqueDeclsRef().begin());
4326 return MutableArrayRef<unsigned>(
4327 static_cast<T *
>(
this)->
template getTrailingObjects<unsigned>(),
4328 NumUniqueDeclarations);
4334 return ArrayRef<unsigned>(
4335 static_cast<const T *
>(
this)->
template getTrailingObjects<unsigned>(),
4336 NumUniqueDeclarations);
4342 assert(DNLs.size() == NumUniqueDeclarations &&
4343 "Unexpected amount of list numbers.");
4344 std::copy(DNLs.begin(), DNLs.end(), getDeclNumListsRef().begin());
4350 return MutableArrayRef<unsigned>(
4351 static_cast<T *
>(
this)->
template getTrailingObjects<unsigned>() +
4352 NumUniqueDeclarations,
4359 return ArrayRef<unsigned>(
4360 static_cast<const T *
>(
this)->
template getTrailingObjects<unsigned>() +
4361 NumUniqueDeclarations,
4368 assert(CLSs.size() == NumComponentLists &&
4369 "Unexpected amount of component lists.");
4370 std::copy(CLSs.begin(), CLSs.end(), getComponentListSizesRef().begin());
4375 return MutableArrayRef<MappableComponent>(
4376 static_cast<T *
>(
this)
4377 ->
template getTrailingObjects<MappableComponent>(),
4383 return ArrayRef<MappableComponent>(
4384 static_cast<const T *
>(
this)
4385 ->
template getTrailingObjects<MappableComponent>(),
4393 ArrayRef<unsigned> CLSs) {
4394 assert(Components.size() == NumComponents &&
4395 "Unexpected amount of component lists.");
4396 assert(CLSs.size() == NumComponentLists &&
4397 "Unexpected amount of list sizes.");
4398 std::copy(Components.begin(), Components.end(), getComponentsRef().begin());
4407 assert(getUniqueDeclarationsTotalNumber(Declarations) ==
4408 NumUniqueDeclarations &&
4409 "Unexpected number of mappable expression info entries!");
4410 assert(getComponentsTotalNumber(ComponentLists) == NumComponents &&
4411 "Unexpected total number of components!");
4412 assert(Declarations.size() == ComponentLists.size() &&
4413 "Declaration and component lists size is not consistent!");
4414 assert(Declarations.size() == NumComponentLists &&
4415 "Unexpected declaration and component lists size!");
4420 llvm::MapVector<ValueDecl *, SmallVector<MappableExprComponentListRef, 8>>
4423 auto CI = ComponentLists.begin();
4424 for (
auto DI = Declarations.begin(), DE = Declarations.end(); DI != DE;
4426 assert(!CI->empty() &&
"Invalid component list!");
4427 ComponentListMap[*DI].push_back(*CI);
4432 auto UniqueDeclarations = getUniqueDeclsRef();
4433 auto UDI = UniqueDeclarations.begin();
4435 auto DeclNumLists = getDeclNumListsRef();
4436 auto DNLI = DeclNumLists.begin();
4438 auto ComponentListSizes = getComponentListSizesRef();
4439 auto CLSI = ComponentListSizes.begin();
4441 auto Components = getComponentsRef();
4442 auto CI = Components.begin();
4445 unsigned PrevSize = 0u;
4448 for (
auto &M : ComponentListMap) {
4465 PrevSize +=
C.size();
4472 CI = std::copy(
C.begin(),
C.end(), CI);
4479 MapperQualifierLoc = NNSL;
4484 MapperIdInfo = MapperId;
4490 return llvm::makeMutableArrayRef<Expr *>(
4491 static_cast<T *
>(
this)->
template getTrailingObjects<Expr *>() +
4499 return llvm::makeArrayRef<Expr *>(
4500 static_cast<T *
>(
this)->
template getTrailingObjects<Expr *>() +
4509 "Unexpected number of user-defined mappers.");
4510 std::copy(DMDs.begin(), DMDs.end(), getUDMapperRefs().begin());
4526 return MapperQualifierLoc;
4535 :
public llvm::iterator_adaptor_base<
4536 const_component_lists_iterator,
4537 MappableExprComponentListRef::const_iterator,
4538 std::forward_iterator_tag, MappableComponent, ptrdiff_t,
4539 MappableComponent, MappableComponent> {
4541 ArrayRef<ValueDecl *>::iterator DeclCur;
4544 ArrayRef<unsigned>::iterator NumListsCur;
4547 unsigned RemainingLists = 0;
4551 unsigned PrevListSize = 0;
4555 ArrayRef<unsigned>::const_iterator ListSizeCur;
4556 ArrayRef<unsigned>::const_iterator ListSizeEnd;
4559 MappableExprComponentListRef::const_iterator
End;
4564 ArrayRef<ValueDecl *> UniqueDecls, ArrayRef<unsigned> DeclsListNum,
4565 ArrayRef<unsigned> CumulativeListSizes,
4568 Components.begin()),
4569 DeclCur(UniqueDecls.begin()), NumListsCur(DeclsListNum.begin()),
4570 ListSizeCur(CumulativeListSizes.begin()),
4571 ListSizeEnd(CumulativeListSizes.end()), End(Components.end()) {
4572 assert(UniqueDecls.size() == DeclsListNum.size() &&
4573 "Inconsistent number of declarations and list sizes!");
4574 if (!DeclsListNum.empty())
4575 RemainingLists = *NumListsCur;
4581 const ValueDecl *Declaration, ArrayRef<ValueDecl *> UniqueDecls,
4582 ArrayRef<unsigned> DeclsListNum, ArrayRef<unsigned> CumulativeListSizes,
4585 CumulativeListSizes, Components) {
4589 for (; DeclCur != UniqueDecls.end(); ++DeclCur, ++NumListsCur) {
4590 if (*DeclCur == Declaration)
4593 assert(*NumListsCur > 0 &&
"No lists associated with declaration??");
4597 std::advance(ListSizeCur, *NumListsCur - 1);
4598 PrevListSize = *ListSizeCur;
4604 if (ListSizeCur == CumulativeListSizes.end()) {
4606 RemainingLists = 0u;
4612 RemainingLists = *NumListsCur;
4615 ListSizeEnd = ListSizeCur;
4616 std::advance(ListSizeEnd, RemainingLists);
4620 std::advance(this->I, PrevListSize);
4625 std::pair<const ValueDecl *, MappableExprComponentListRef>
4627 assert(ListSizeCur != ListSizeEnd &&
"Invalid iterator!");
4628 return std::make_pair(
4632 std::pair<const ValueDecl *, MappableExprComponentListRef>
4639 assert(ListSizeCur != ListSizeEnd && RemainingLists &&
4640 "Invalid iterator!");
4644 if (std::next(ListSizeCur) == ListSizeEnd) {
4648 std::advance(this->I, *ListSizeCur - PrevListSize);
4649 PrevListSize = *ListSizeCur;
4652 if (!(--RemainingLists)) {
4655 RemainingLists = *NumListsCur;
4656 assert(RemainingLists &&
"No lists in the following declaration??");
4666 llvm::iterator_range<const_component_lists_iterator>;
4670 return const_component_lists_iterator(
4671 getUniqueDeclsRef(), getDeclNumListsRef(), getComponentListSizesRef(),
4672 getComponentsRef());
4675 return const_component_lists_iterator(
4676 ArrayRef<ValueDecl *>(), ArrayRef<unsigned>(), ArrayRef<unsigned>(),
4678 getComponentsRef().end()));
4681 return {component_lists_begin(), component_lists_end()};
4686 const_component_lists_iterator
4688 return const_component_lists_iterator(
4689 VD, getUniqueDeclsRef(), getDeclNumListsRef(),
4690 getComponentListSizesRef(), getComponentsRef());
4693 return component_lists_end();
4696 return {decl_component_lists_begin(VD), decl_component_lists_end()};
4705 auto A = getUniqueDeclsRef();
4711 llvm::iterator_range<const_all_num_lists_iterator>;
4714 auto A = getDeclNumListsRef();
4720 llvm::iterator_range<const_all_lists_sizes_iterator>;
4723 auto A = getComponentListSizesRef();
4729 llvm::iterator_range<const_all_components_iterator>;
4732 auto A = getComponentsRef();
4740 llvm::iterator_range<mapperlist_const_iterator>;
4745 return getUDMapperRefs().begin();
4748 return getUDMapperRefs().end();
4768 OMPMapClause, Expr *, ValueDecl *, unsigned,
4769 OMPClauseMappableExprCommon::MappableComponent> {
4777 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
4780 return 2 * varlist_size();
4782 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
4783 return getUniqueDeclarationsNum();
4785 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
4786 return getUniqueDeclarationsNum() + getTotalComponentListNum();
4791 static constexpr
unsigned NumberOfModifiers =
4798 OMPC_MAP_MODIFIER_unknown};
4801 SourceLocation MapTypeModifiersLoc[NumberOfModifiers];
4807 bool MapTypeIsImplicit =
false;
4810 SourceLocation MapLoc;
4835 explicit OMPMapClause(ArrayRef<OpenMPMapModifierKind> MapModifiers,
4836 ArrayRef<SourceLocation> MapModifiersLoc,
4837 NestedNameSpecifierLoc MapperQualifierLoc,
4838 DeclarationNameInfo MapperIdInfo,
4840 SourceLocation MapLoc,
const OMPVarListLocTy &Locs,
4844 MapType(MapType), MapTypeIsImplicit(MapTypeIsImplicit), MapLoc(MapLoc) {
4845 assert(llvm::array_lengthof(MapTypeModifiers) == MapModifiers.size() &&
4846 "Unexpected number of map type modifiers.");
4847 llvm::copy(MapModifiers, std::begin(MapTypeModifiers));
4849 assert(llvm::array_lengthof(MapTypeModifiersLoc) ==
4850 MapModifiersLoc.size() &&
4851 "Unexpected number of map type modifier locations.");
4852 llvm::copy(MapModifiersLoc, std::begin(MapTypeModifiersLoc));
4870 assert(I < NumberOfModifiers &&
4871 "Unexpected index to store map type modifier, exceeds array size.");
4872 MapTypeModifiers[I] = T;
4879 void setMapTypeModifierLoc(
unsigned I, SourceLocation TLoc) {
4880 assert(I < NumberOfModifiers &&
4881 "Index to store map type modifier location exceeds array size.");
4882 MapTypeModifiersLoc[I] = TLoc;
4893 void setMapLoc(SourceLocation TLoc) { MapLoc = TLoc; }
4896 void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
4919 Create(
const ASTContext &
C,
const OMPVarListLocTy &Locs,
4920 ArrayRef<Expr *> Vars, ArrayRef<ValueDecl *> Declarations,
4922 ArrayRef<Expr *> UDMapperRefs,
4923 ArrayRef<OpenMPMapModifierKind> MapModifiers,
4924 ArrayRef<SourceLocation> MapModifiersLoc,
4925 NestedNameSpecifierLoc UDMQualifierLoc, DeclarationNameInfo MapperId,
4955 assert(Cnt < NumberOfModifiers &&
4956 "Requested modifier exceeds the total number of modifiers.");
4957 return MapTypeModifiers[Cnt];
4965 assert(Cnt < NumberOfModifiers &&
4966 "Requested modifier location exceeds total number of modifiers.");
4967 return MapTypeModifiersLoc[Cnt];
4972 return llvm::makeArrayRef(MapTypeModifiers);
4977 return llvm::makeArrayRef(MapTypeModifiersLoc);
4981 SourceLocation
getMapLoc() const LLVM_READONLY {
return MapLoc; }
4988 reinterpret_cast<Stmt **>(varlist_begin()),
4989 reinterpret_cast<Stmt **>(varlist_end()));
5005 return T->getClauseKind() == OMPC_map;
5021 SourceLocation LParenLoc;
5024 Stmt *NumTeams =
nullptr;
5029 void setNumTeams(Expr *E) { NumTeams = E; }
5042 SourceLocation StartLoc, SourceLocation LParenLoc,
5043 SourceLocation EndLoc)
5044 :
OMPClause(OMPC_num_teams, StartLoc, EndLoc), OMPClauseWithPreInit(this),
5045 LParenLoc(LParenLoc), NumTeams(E) {
5046 setPreInitStmt(HelperE, CaptureRegion);
5051 :
OMPClause(OMPC_num_teams, SourceLocation(), SourceLocation()),
5052 OMPClauseWithPreInit(this) {}
5080 return T->getClauseKind() == OMPC_num_teams;
5096 SourceLocation LParenLoc;
5099 Stmt *ThreadLimit =
nullptr;
5104 void setThreadLimit(Expr *E) { ThreadLimit = E; }
5118 SourceLocation StartLoc, SourceLocation LParenLoc,
5119 SourceLocation EndLoc)
5120 :
OMPClause(OMPC_thread_limit, StartLoc, EndLoc),
5121 OMPClauseWithPreInit(this), LParenLoc(LParenLoc), ThreadLimit(E) {
5122 setPreInitStmt(HelperE, CaptureRegion);
5127 :
OMPClause(OMPC_thread_limit, SourceLocation(), SourceLocation()),
5128 OMPClauseWithPreInit(this) {}
5156 return T->getClauseKind() == OMPC_thread_limit;
5172 SourceLocation LParenLoc;
5175 Stmt *Priority =
nullptr;
5180 void setPriority(Expr *E) { Priority = E; }
5190 SourceLocation EndLoc)
5191 :
OMPClause(OMPC_priority, StartLoc, EndLoc), LParenLoc(LParenLoc),
5196 :
OMPClause(OMPC_priority, SourceLocation(), SourceLocation()) {}
5224 return T->getClauseKind() == OMPC_priority;
5240 SourceLocation LParenLoc;
5243 Stmt *Grainsize =
nullptr;
5246 void setGrainsize(Expr *Size) { Grainsize = Size; }
5255 SourceLocation LParenLoc, SourceLocation EndLoc)
5256 :
OMPClause(OMPC_grainsize, StartLoc, EndLoc), LParenLoc(LParenLoc),
5261 :
OMPClause(OMPC_grainsize, SourceLocation(), SourceLocation()) {}
5286 return T->getClauseKind() == OMPC_grainsize;
5303 :
OMPClause(OMPC_nogroup, StartLoc, EndLoc) {}
5307 :
OMPClause(OMPC_nogroup, SourceLocation(), SourceLocation()) {}
5325 return T->getClauseKind() == OMPC_nogroup;
5341 SourceLocation LParenLoc;
5344 Stmt *NumTasks =
nullptr;
5347 void setNumTasks(Expr *Size) { NumTasks = Size; }
5356 SourceLocation LParenLoc, SourceLocation EndLoc)
5357 :
OMPClause(OMPC_num_tasks, StartLoc, EndLoc), LParenLoc(LParenLoc),
5362 :
OMPClause(OMPC_num_tasks, SourceLocation(), SourceLocation()) {}
5387 return T->getClauseKind() == OMPC_num_tasks;
5402 SourceLocation LParenLoc;
5405 Stmt *Hint =
nullptr;
5408 void setHint(Expr *H) { Hint = H; }
5418 SourceLocation EndLoc)
5419 :
OMPClause(OMPC_hint, StartLoc, EndLoc), LParenLoc(LParenLoc),
5432 Expr *
getHint()
const {
return cast_or_null<Expr>(Hint); }
5448 return T->getClauseKind() == OMPC_hint;
5464 SourceLocation LParenLoc;
5470 SourceLocation KindLoc;
5473 SourceLocation CommaLoc;
5476 Expr *ChunkSize =
nullptr;
5486 void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
5491 void setDistScheduleKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
5496 void setCommaLoc(SourceLocation Loc) { CommaLoc = Loc; }
5501 void setChunkSize(Expr *E) { ChunkSize = E; }
5516 SourceLocation KLoc, SourceLocation CommaLoc,
5517 SourceLocation EndLoc,
5519 Stmt *HelperChunkSize)
5520 :
OMPClause(OMPC_dist_schedule, StartLoc, EndLoc),
5521 OMPClauseWithPreInit(this), LParenLoc(LParenLoc), Kind(Kind),
5522 KindLoc(KLoc), CommaLoc(CommaLoc), ChunkSize(ChunkSize) {
5523 setPreInitStmt(HelperChunkSize);
5528 :
OMPClause(OMPC_dist_schedule, SourceLocation(), SourceLocation()),
5529 OMPClauseWithPreInit(this) {}
5550 return child_range(reinterpret_cast<Stmt **>(&ChunkSize),
5551 reinterpret_cast<Stmt **>(&ChunkSize) + 1);
5567 return T->getClauseKind() == OMPC_dist_schedule;
5582 SourceLocation LParenLoc;
5594 SourceLocation KindLoc;
5609 void setDefaultmapModifierLoc(SourceLocation Loc) {
5616 void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
5621 void setDefaultmapKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
5634 SourceLocation MLoc, SourceLocation KLoc,
5637 :
OMPClause(OMPC_defaultmap, StartLoc, EndLoc), LParenLoc(LParenLoc),
5638 Modifier(M), ModifierLoc(MLoc), Kind(Kind), KindLoc(KLoc) {}
5642 :
OMPClause(OMPC_defaultmap, SourceLocation(), SourceLocation()) {}
5679 return T->getClauseKind() == OMPC_defaultmap;
5693 OMPToClause, Expr *, ValueDecl *, unsigned,
5694 OMPClauseMappableExprCommon::MappableComponent> {
5713 explicit OMPToClause(NestedNameSpecifierLoc MapperQualifierLoc,
5714 DeclarationNameInfo MapperIdInfo,
5715 const OMPVarListLocTy &Locs,
5732 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
5735 return 2 * varlist_size();
5737 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
5738 return getUniqueDeclarationsNum();
5740 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
5741 return getUniqueDeclarationsNum() + getTotalComponentListNum();
5760 ArrayRef<Expr *> Vars,
5761 ArrayRef<ValueDecl *> Declarations,
5763 ArrayRef<Expr *> UDMapperRefs,
5764 NestedNameSpecifierLoc UDMQualifierLoc,
5765 DeclarationNameInfo MapperId);
5779 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
5780 reinterpret_cast<Stmt **>(varlist_end()));
5796 return T->getClauseKind() == OMPC_to;
5811 OMPFromClause, Expr *, ValueDecl *, unsigned,
5812 OMPClauseMappableExprCommon::MappableComponent> {
5831 explicit OMPFromClause(NestedNameSpecifierLoc MapperQualifierLoc,
5832 DeclarationNameInfo MapperIdInfo,
5833 const OMPVarListLocTy &Locs,
5850 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
5853 return 2 * varlist_size();
5855 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
5856 return getUniqueDeclarationsNum();
5858 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
5859 return getUniqueDeclarationsNum() + getTotalComponentListNum();
5878 ArrayRef<Expr *> Vars,
5879 ArrayRef<ValueDecl *> Declarations,
5881 ArrayRef<Expr *> UDMapperRefs,
5882 NestedNameSpecifierLoc UDMQualifierLoc,
5883 DeclarationNameInfo MapperId);
5897 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
5898 reinterpret_cast<Stmt **>(varlist_end()));
5914 return T->getClauseKind() == OMPC_from;
5929 OMPUseDevicePtrClause, Expr *, ValueDecl *, unsigned,
5930 OMPClauseMappableExprCommon::MappableComponent> {
5963 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
5964 return 3 * varlist_size();
5966 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
5967 return getUniqueDeclarationsNum();
5969 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
5970 return getUniqueDeclarationsNum() + getTotalComponentListNum();
5976 void setPrivateCopies(ArrayRef<Expr *> VL);
5980 MutableArrayRef<Expr *> getPrivateCopies() {
5981 return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
5983 ArrayRef<const Expr *> getPrivateCopies()
const {
5984 return llvm::makeArrayRef(varlist_end(), varlist_size());
5990 void setInits(ArrayRef<Expr *> VL);
5994 MutableArrayRef<Expr *>
getInits() {
5995 return MutableArrayRef<Expr *>(getPrivateCopies().end(), varlist_size());
5997 ArrayRef<const Expr *>
getInits()
const {
5998 return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
6014 Create(
const ASTContext &
C,
const OMPVarListLocTy &Locs,
6015 ArrayRef<Expr *> Vars, ArrayRef<Expr *> PrivateVars,
6016 ArrayRef<Expr *>
Inits, ArrayRef<ValueDecl *> Declarations,
6034 llvm::iterator_range<private_copies_const_iterator>;
6038 getPrivateCopies().end());
6043 getPrivateCopies().end());
6060 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
6061 reinterpret_cast<Stmt **>(varlist_end()));
6077 return T->getClauseKind() == OMPC_use_device_ptr;
6092 OMPIsDevicePtrClause, Expr *, ValueDecl *, unsigned,
6093 OMPClauseMappableExprCommon::MappableComponent> {
6126 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
6127 return varlist_size();
6129 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
6130 return getUniqueDeclarationsNum();
6132 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
6133 return getUniqueDeclarationsNum() + getTotalComponentListNum();
6147 Create(
const ASTContext &
C,
const OMPVarListLocTy &Locs,
6148 ArrayRef<Expr *> Vars, ArrayRef<ValueDecl *> Declarations,
6163 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
6164 reinterpret_cast<Stmt **>(varlist_end()));
6180 return T->getClauseKind() == OMPC_is_device_ptr;
6186 template<
class ImplClass,
template <
typename>
class Ptr,
typename RetTy>
6189 #define PTR(CLASS) typename Ptr<CLASS>::type 6190 #define DISPATCH(CLASS) \ 6191 return static_cast<ImplClass*>(this)->Visit##CLASS(static_cast<PTR(CLASS)>(S)) 6193 #define OPENMP_CLAUSE(Name, Class) \ 6194 RetTy Visit ## Class (PTR(Class) S) { DISPATCH(Class); } 6195 #include "clang/Basic/OpenMPKinds.def" 6199 switch (S->getClauseKind()) {
6200 default: llvm_unreachable(
"Unknown clause kind!");
6201 #define OPENMP_CLAUSE(Name, Class) \ 6202 case OMPC_ ## Name : return Visit ## Class(static_cast<PTR(Class)>(S)); 6203 #include "clang/Basic/OpenMPKinds.def" 6212 template <
typename T>
6215 template<
class ImplClass,
typename RetTy =
void>
6218 template<
class ImplClass,
typename RetTy =
void>
6224 const PrintingPolicy &Policy;
6227 template <
typename T>
void VisitOMPClauseList(T *
Node,
char StartSym);
6231 : OS(OS), Policy(Policy) {}
6233 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *S); 6234 #include "clang/Basic/OpenMPKinds.def" 6239 #endif // LLVM_CLANG_AST_OPENMPCLAUSE_H const_child_range children() const
ArrayRef< const Expr *>::iterator mapperlist_const_iterator
OMPCaptureClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'capture' clause.
OMPNumTeamsClause(Expr *E, Stmt *HelperE, OpenMPDirectiveKind CaptureRegion, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'num_teams' clause.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
helper_expr_range source_exprs()
OMPHintClause()
Build an empty clause.
const_child_range used_children() const
llvm::iterator_range< helper_expr_iterator > helper_expr_range
static const Decl * getCanonicalDecl(const Decl *D)
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
OMPUntiedClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'untied' clause.
helper_expr_const_range reduction_ops() const
This represents 'thread_limit' clause in the '#pragma omp ...' directive.
typename std::add_pointer< typename std::add_const< T >::type > const_ptr
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Iterator that browse the components by lists.
OMPSeqCstClause()
Build an empty clause.
const_child_range children() const
const_child_range used_children() const
helper_expr_const_range lhs_exprs() const
const_all_decls_range all_decls() const
This represents clause 'copyin' in the '#pragma omp ...' directives.
llvm::iterator_range< private_copies_const_iterator > private_copies_const_range
helper_expr_range source_exprs()
bool varlist_empty() const
child_range used_children()
const Expr * getChunkSize() const
Get chunk size.
child_range used_children()
MutableArrayRef< Expr * >::iterator updates_iterator
static bool classof(const OMPClause *T)
SourceLocation getCommaLoc()
Get location of ','.
const_child_range children() const
helper_expr_range privates()
OpenMPDefaultmapClauseKind
OpenMP attributes for 'defaultmap' clause.
This represents 'atomic_default_mem_order' clause in the '#pragma omp requires' directive.
helper_expr_const_range rhs_exprs() const
const_child_range used_children() const
llvm::iterator_range< inits_iterator > inits_range
const_component_lists_iterator(ArrayRef< ValueDecl *> UniqueDecls, ArrayRef< unsigned > DeclsListNum, ArrayRef< unsigned > CumulativeListSizes, MappableExprComponentListRef Components)
Construct an iterator that scans all lists.
private_copies_range private_copies()
void setUniqueDecls(ArrayRef< ValueDecl *> UDs)
Set the unique declarations that are in the trailing objects of the class.
Stmt - This represents one statement.
This represents clause 'in_reduction' in the '#pragma omp task' directives.
static bool classof(const OMPClause *T)
Class that handles pre-initialization statement for some clauses, like 'shedule', 'firstprivate' etc...
llvm::iterator_range< inits_iterator > inits_range
child_range used_children()
static bool classof(const OMPClause *T)
helper_expr_range rhs_exprs()
OMPUpdateClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'update' clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
Expr * getAllocator() const
Returns allocator.
helper_expr_const_range rhs_exprs() const
This represents 'grainsize' clause in the '#pragma omp ...' directive.
child_range used_children()
static bool classof(const OMPClause *T)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
child_range used_children()
const_child_range children() const
This represents 'if' clause in the '#pragma omp ...' directive.
const_child_range used_children() const
SourceLocation getAtomicDefaultMemOrderKindKwLoc() const
Returns location of clause kind.
OMPUnifiedAddressClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'unified_address' clause.
helper_expr_const_range assignment_ops() const
This class implements a simple visitor for OMPClause subclasses.
OMPSIMDClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'simd' clause.
const_child_range children() const
This represents 'priority' clause in the '#pragma omp ...' directive.
static bool classof(const OMPClause *T)
helper_expr_const_range lhs_exprs() const
llvm::iterator_range< private_copies_iterator > private_copies_range
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
child_range used_children()
OMPAllocatorClause()
Build an empty clause.
Expr * getCondition() const
Returns condition.
This represents 'update' clause in the '#pragma omp atomic' directive.
OMPAtomicDefaultMemOrderClause()
Build an empty clause.
void setComponents(ArrayRef< MappableComponent > Components, ArrayRef< unsigned > CLSs)
Set the components that are in the trailing objects of the class.
ArrayRef< const Expr * >::iterator private_copies_const_iterator
Expr * getCondition() const
Returns condition.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
MutableArrayRef< Expr * >::iterator helper_expr_iterator
OpenMPDefaultmapClauseModifier
OpenMP modifiers for 'defaultmap' clause.
child_range used_children()
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Expr * getAlignment()
Returns alignment.
child_range used_children()
const_child_range children() const
Expr * getNumForLoops() const
Return the number of associated for-loops.
SourceLocation getSecondScheduleModifierLoc() const
Get the second modifier location.
const_child_range children() const
OpenMPMapModifierKind getMapTypeModifier(unsigned Cnt) const LLVM_READONLY
Fetches the map-type-modifier at 'Cnt' index of array of modifiers.
const_child_range used_children() const
helper_expr_range rhs_exprs()
ArrayRef< MappableComponent > getComponentsRef() const
Get the components that are in the trailing objects of the class.
const_child_range children() const
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
static bool classof(const OMPClause *T)
SourceLocation getDependencyLoc() const
Get dependency type location.
This represents 'read' clause in the '#pragma omp atomic' directive.
helper_expr_const_range assignment_ops() const
OMPFinalClause()
Build an empty clause.
OMPAtomicDefaultMemOrderClause(OpenMPAtomicDefaultMemOrderClauseKind A, SourceLocation ALoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'atomic_default_mem_order' clause with argument A ('seq_cst', 'acq_rel' or 'relaxed').
helper_expr_range source_exprs()
This represents clause 'private' in the '#pragma omp ...' directives.
static bool classof(const OMPClause *T)
static bool classof(const OMPClause *T)
const_child_range children() const
const_child_range children() const
This represents 'num_threads' clause in the '#pragma omp ...' directive.
const_child_range used_children() const
const_child_range used_children() const
llvm::iterator_range< const_all_num_lists_iterator > const_all_num_lists_range
const_child_range children() const
This represents 'defaultmap' clause in the '#pragma omp ...' directive.
const_child_range used_children() const
This represents clauses with a list of expressions that are mappable.
llvm::iterator_range< const_all_components_iterator > const_all_components_range
void setUpdates(ArrayRef< Expr *> UL)
Sets the list of update expressions for linear variables.
StmtIterator child_iterator
SourceLocation getColonLoc() const
Return the location of ':'.
This represents implicit clause 'flush' for the '#pragma omp flush' directive.
const_child_range children() const
const DeclarationNameInfo & getNameInfo() const
Gets the name info for specified reduction identifier.
private_copies_const_range private_copies() const
static bool classof(const OMPClause *T)
OMPNumTasksClause(Expr *Size, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'num_tasks' clause.
unsigned getTotalComponentsNum() const
Return the total number of components in all lists derived from the clause.
This represents 'reverse_offload' clause in the '#pragma omp requires' directive. ...
OMPNogroupClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'nogroup' clause.
child_range used_children()
const_child_range used_children() const
child_range used_children()
Struct that defines common infrastructure to handle mappable expressions used in OpenMP clauses...
SourceLocation getLParenLoc() const
Returns the location of '('.
Expr * getGrainsize() const
Return safe iteration space distance.
This represents 'nogroup' clause in the '#pragma omp ...' directive.
This represents 'allocator' clause in the '#pragma omp ...' directive.
child_range used_children()
This represents 'safelen' clause in the '#pragma omp ...' directive.
const_child_range used_children() const
SourceLocation getLParenLoc() const
Returns the location of '('.
MutableArrayRef< Expr * >::iterator inits_iterator
const_child_range children() const
OpenMPMapModifierKind
OpenMP modifier kind for 'map' clause.
static bool classof(const OMPClause *T)
OMPHintClause(Expr *Hint, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'hint' clause with expression Hint.
unsigned varlist_size() const
llvm::iterator_range< private_copies_iterator > private_copies_range
This represents clauses with the list of variables like 'private', 'firstprivate', 'copyin', 'shared', or 'reduction' clauses in the '#pragma omp ...' directives.
OMPProcBindClause()
Build an empty clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
child_range used_children()
child_range used_children()
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
SourceLocation getColonLoc() const
Gets location of ':' symbol in clause.
llvm::iterator_range< helper_expr_iterator > helper_expr_range
clang::OMPLinearClause OMPVarListClause, OMPClauseWithPostUpdate, llvm::TrailingObjects getPrivates()
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
A C++ nested-name-specifier augmented with source location information.
SourceLocation getColonLoc() const
Returns the location of ':'.
This represents 'simd' clause in the '#pragma omp ...' directive.
static bool classof(const OMPClause *T)
llvm::iterator_range< updates_iterator > updates_range
OpenMPLinearClauseKind
OpenMP attributes for 'linear' clause.
MutableArrayRef< Expr *>::iterator varlist_iterator
Expr * getAssociatedExpression() const
static bool classof(const OMPClause *T)
helper_expr_range assignment_ops()
This represents clause 'lastprivate' in the '#pragma omp ...' directives.
OMPSIMDClause()
Build an empty clause.
This represents clause 'allocate' in the '#pragma omp ...' directives.
llvm::iterator_range< helper_expr_iterator > helper_expr_range
child_range used_children()
OMPPriorityClause(Expr *E, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'priority' clause.
OMPVarListClause(OpenMPClauseKind K, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, unsigned N)
Build a clause with N variables.
SourceLocation getLParenLoc() const
Returns the location of '('.
helper_expr_range privates()
RetTy Visit(PTR(OMPClause) S)
varlist_iterator varlist_begin()
ArrayRef< const Expr * >::iterator private_copies_const_iterator
const_child_range children() const
Expr * getChunkSize()
Get chunk size.
This represents clause 'map' in the '#pragma omp ...' directives.
SourceLocation getDefaultKindKwLoc() const
Returns location of clause kind.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
This represents clause 'to' in the '#pragma omp ...' directives.
void setColonLoc(SourceLocation Loc)
Sets the location of ':'.
child_range used_children()
Defines some OpenMP-specific enums and functions.
Expr * getSafelen() const
Return safe iteration space distance.
OMPPriorityClause()
Build an empty clause.
child_range used_children()
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
helper_expr_range lhs_exprs()
Expr * getNumTeams()
Return NumTeams number.
llvm::iterator_range< helper_expr_iterator > helper_expr_range
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
child_range used_children()
child_range used_children()
const_child_range used_children() const
OMPDefaultmapClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KLoc, SourceLocation EndLoc, OpenMPDefaultmapClauseKind Kind, OpenMPDefaultmapClauseModifier M)
Build 'defaultmap' clause with defaultmap kind Kind.
MutableArrayRef< Expr * >::iterator private_copies_iterator
MutableArrayRef< unsigned > getComponentListSizesRef()
Get the cumulative component lists sizes that are in the trailing objects of the class.
const_child_range children() const
MutableArrayRef< Expr * >::iterator helper_expr_iterator
const_child_range used_children() const
const_child_range children() const
OMPSafelenClause()
Build an empty clause.
This represents clause 'copyprivate' in the '#pragma omp ...' directives.
OpenMPDistScheduleClauseKind
OpenMP attributes for 'dist_schedule' clause.
child_range used_children()
ArrayRef< SourceLocation > getMapTypeModifiersLoc() const LLVM_READONLY
Fetches ArrayRef of location of map-type-modifiers.
const_child_range used_children() const
const_child_range children() const
void setModifierLoc(SourceLocation Loc)
Set modifier location.
void setCalcStep(Expr *CalcStep)
Sets the expression to calculate linear step for clause.
helper_expr_range destination_exprs()
const_child_range used_children() const
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
child_range used_children()
const_child_range children() const
child_range used_children()
helper_expr_range privates()
const_child_range children() const
child_range used_children()
SourceLocation getDefaultmapKindLoc()
Get kind location.
MutableArrayRef< Expr * >::iterator private_copies_iterator
const_child_range children() const
const_child_range used_children() const
const_child_range children() const
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
const_child_range children() const
const Stmt * getPreInitStmt() const
Get pre-initialization statement for the clause.
ValueDecl * getAssociatedDeclaration() const
static bool classof(const OMPClause *T)
mapperlist_const_range mapperlists() const
ArrayRef< Expr * > getUDMapperRefs() const
Get the user-defined mappers references that are in the trailing objects of the class.
OMPUnifiedSharedMemoryClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'unified_shared_memory' clause.
SourceLocation getColonLoc() const
Gets location of ':' symbol in clause.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
OMPDistScheduleClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KLoc, SourceLocation CommaLoc, SourceLocation EndLoc, OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize, Stmt *HelperChunkSize)
Build 'dist_schedule' clause with schedule kind Kind and chunk size expression ChunkSize.
SourceLocation getMapTypeModifierLoc(unsigned Cnt) const LLVM_READONLY
Fetches the map-type-modifier location at 'Cnt' index of array of modifiers' locations.
static bool classof(const OMPClause *T)
const_child_range children() const
const_component_lists_iterator(const ValueDecl *Declaration, ArrayRef< ValueDecl *> UniqueDecls, ArrayRef< unsigned > DeclsListNum, ArrayRef< unsigned > CumulativeListSizes, MappableExprComponentListRef Components)
Construct an iterator that scan lists for a given declaration Declaration.
Class that handles post-update expression for some clauses, like 'lastprivate', 'reduction' etc...
SmallVector< MappableComponent, 8 > MappableExprComponentList
helper_expr_range lhs_exprs()
This represents 'default' clause in the '#pragma omp ...' directive.
OMPProcBindClause(OpenMPProcBindClauseKind A, SourceLocation ALoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'proc_bind' clause with argument A ('master', 'close' or 'spread').
OMPWriteClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'write' clause.
Expr * getPriority() const
Return Priority number.
This represents 'final' clause in the '#pragma omp ...' directive.
This represents 'mergeable' clause in the '#pragma omp ...' directive.
const_component_lists_iterator decl_component_lists_begin(const ValueDecl *VD) const
Iterators for component lists associated with the provided declaration.
ArrayRef< MappableComponent > MappableExprComponentListRef
MutableArrayRef< Expr * > getFinals()
Sets the list of final update expressions for linear variables.
OpenMPDependClauseKind getDependencyKind() const
Get dependency type.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
MutableArrayRef< Expr * >::iterator helper_expr_iterator
This represents clause 'reduction' in the '#pragma omp ...' directives.
const_child_range used_children() const
void setPrivates(ArrayRef< Expr *> PL)
Sets the list of the copies of original linear variables.
OMPNogroupClause()
Build an empty clause.
child_range used_children()
child_range used_children()
const_child_range children() const
child_range used_children()
child_range used_children()
const_component_lists_range decl_component_lists(const ValueDecl *VD) const
const_child_range used_children() const
SourceLocation getDefaultmapModifierLoc() const
Get the modifier location.
ArrayRef< const Expr * >::iterator private_copies_const_iterator
helper_expr_const_range source_exprs() const
child_range used_children()
unsigned NumVars
Number of expressions listed.
void setColonLoc(SourceLocation Loc)
Sets the location of ':'.
static bool classof(const OMPClause *T)
This represents clause 'is_device_ptr' in the '#pragma omp ...' directives.
child_range used_children()
Get the iterator range for the expressions used in the clauses.
MutableArrayRef< Expr * >::iterator helper_expr_iterator
unsigned getUniqueDeclarationsNum() const
Return the number of unique base declarations in this clause.
Expr * getPostUpdateExpr()
Get post-update expression for the clause.
Expr * getDevice() const
Return device number.
RetTy VisitOMPClause(PTR(OMPClause) Node)
helper_expr_const_range source_exprs() const
void setFinals(ArrayRef< Expr *> FL)
Sets the list of final update expressions for linear variables.
static bool classof(const OMPClause *T)
llvm::iterator_range< helper_expr_iterator > helper_expr_range
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
OMPSeqCstClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'seq_cst' clause.
void setModifier(OpenMPLinearClauseKind Kind)
Set modifier.
helper_expr_const_range privates() const
private_copies_range private_copies()
This represents clause 'from' in the '#pragma omp ...' directives.
static bool classof(const OMPClause *T)
child_range used_children()
OMPScheduleClause()
Build an empty clause.
child_range used_children()
SourceLocation getLParenLoc() const
Returns the location of '('.
OMPGrainsizeClause(Expr *Size, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'grainsize' clause.
static bool classof(const OMPClause *T)
helper_expr_const_range reduction_ops() const
OMPCollapseClause(Expr *Num, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'collapse' clause.
This represents 'dynamic_allocators' clause in the '#pragma omp requires' directive.
const_child_range children() const
static bool classof(const OMPClause *)
OMPDistScheduleClause()
Build an empty clause.
static bool classof(const OMPClause *T)
OpenMPDefaultClauseKind getDefaultKind() const
Returns kind of the clause.
OMPLinearClause(SourceLocation StartLoc, SourceLocation LParenLoc, OpenMPLinearClauseKind Modifier, SourceLocation ModifierLoc, SourceLocation ColonLoc, SourceLocation EndLoc, unsigned NumVars)
Build 'linear' clause with given number of variables NumVars.
This represents 'threads' clause in the '#pragma omp ...' directive.
NestedNameSpecifierLoc getMapperQualifierLoc() const
Gets the nested name specifier for associated user-defined mapper.
const_child_range children() const
helper_expr_const_range destination_exprs() const
Expr * getSimdlen() const
Return safe iteration space distance.
friend class OMPClauseReader
OMPMappableExprListClause(OpenMPClauseKind K, const OMPVarListLocTy &Locs, const OMPMappableExprListSizeTy &Sizes, NestedNameSpecifierLoc *MapperQualifierLocPtr=nullptr, DeclarationNameInfo *MapperIdInfoPtr=nullptr)
Build a clause for NumUniqueDeclarations declarations, NumComponentLists total component lists...
helper_expr_range assignment_ops()
helper_expr_const_range source_exprs() const
OMPNowaitClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'nowait' clause.
This represents clause 'aligned' in the '#pragma omp ...' directives.
OpenMPClauseKind getClauseKind() const
Returns kind of OpenMP clause (private, shared, reduction, etc.).
static bool classof(const OMPClause *T)
mapperlist_iterator mapperlist_begin()
void setLocEnd(SourceLocation Loc)
Sets the ending location of the clause.
OMPWriteClause()
Build an empty clause.
llvm::iterator_range< mapperlist_const_iterator > mapperlist_const_range
static bool classof(const OMPClause *T)
OMPCaptureClause()
Build an empty clause.
helper_expr_const_range private_copies() const
static bool classof(const OMPClause *T)
OMPSafelenClause(Expr *Len, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'safelen' clause.
This represents clause 'task_reduction' in the '#pragma omp taskgroup' directives.
SourceLocation getLParenLoc() const
Returns the location of '('.
static bool classof(const OMPClause *T)
helper_expr_range assignment_ops()
helper_expr_const_range destination_exprs() const
OpenMPProcBindClauseKind getProcBindKind() const
Returns kind of the clause.
const_child_range children() const
SourceLocation getLParenLoc() const
Returns the locaiton of '('.
llvm::iterator_range< inits_const_iterator > inits_const_range
unsigned getNumLoops() const
Get number of loops associated with the clause.
std::pair< const ValueDecl *, MappableExprComponentListRef > operator->() const
const_child_range children() const
This represents implicit clause 'depend' for the '#pragma omp task' directive.
Expr * getStep()
Returns linear step.
const_all_num_lists_range all_num_lists() const
ArrayRef< unsigned >::iterator const_all_lists_sizes_iterator
child_range used_children()
llvm::iterator_range< inits_iterator > inits_range
const_child_range used_children() const
child_range used_children()
child_range used_children()
const_child_range used_children() const
This represents 'proc_bind' clause in the '#pragma omp ...' directive.
This represents 'capture' clause in the '#pragma omp atomic' directive.
const_child_range children() const
This represents one expression.
const_component_lists_iterator decl_component_lists_end() const
SourceLocation getMapLoc() const LLVM_READONLY
Fetches location of clause mapping kind.
OMPIfClause(OpenMPDirectiveKind NameModifier, Expr *Cond, Stmt *HelperCond, OpenMPDirectiveKind CaptureRegion, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation NameModifierLoc, SourceLocation ColonLoc, SourceLocation EndLoc)
Build 'if' clause with condition Cond.
child_range used_children()
child_range used_children()
This represents 'simdlen' clause in the '#pragma omp ...' directive.
MutableArrayRef< Expr * > getUpdates()
Sets the list of update expressions for linear variables.
Expr * getNumTasks() const
Return safe iteration space distance.
unsigned NumComponentLists
Number of component lists.
SourceLocation getScheduleKindLoc()
Get kind location.
static bool classof(const OMPClause *T)
MutableArrayRef< Expr * > getVarRefs()
Fetches list of variables associated with this clause.
varlist_const_iterator varlist_end() const
SourceLocation getLParenLoc() const
Returns the location of '('.
OMPDynamicAllocatorsClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'dynamic_allocators' clause.
static bool classof(const OMPClause *T)
MutableArrayRef< Expr * >::iterator inits_iterator
const_child_range children() const
SourceLocation getLParenLoc() const
Returns the location of '('.
Expr * getAllocator() const
Returns the allocator expression or nullptr, if no allocator is specified.
OpenMPClauseKind
OpenMP clauses.
static bool classof(const OMPClause *T)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
const_child_range used_children() const
const_child_range used_children() const
OpenMPDistScheduleClauseKind getDistScheduleKind() const
Get kind of the clause.
static bool classof(const OMPClause *T)
helper_expr_const_range rhs_exprs() const
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setDeclNumLists(ArrayRef< unsigned > DNLs)
Set the number of lists per declaration that are in the trailing objects of the class.
This represents 'ordered' clause in the '#pragma omp ...' directive.
MutableArrayRef< unsigned > getDeclNumListsRef()
Get the number of lists per declaration that are in the trailing objects of the class.
Expr * getCalcStep()
Returns expression to calculate linear step.
const_child_range used_children() const
const_child_range used_children() const
const_child_range used_children() const
const_child_range children() const
SourceLocation getColonLoc() const
Get colon location.
const_component_lists_range component_lists() const
static bool classof(const OMPClause *T)
void setMapperIdInfo(DeclarationNameInfo MapperId)
Set the name of associated user-defined mapper.
static bool classof(const OMPClause *T)
const_child_range used_children() const
static OMPLinearClause * CreateEmpty(const ASTContext &C, unsigned NumVars)
Creates an empty clause with the place for NumVars variables.
static bool classof(const OMPClause *T)
static bool classof(const OMPClause *T)
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
llvm::iterator_range< helper_expr_iterator > helper_expr_range
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
child_range used_children()
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Expr * getDevice()
Return device number.
This represents 'collapse' clause in the '#pragma omp ...' directive.
This represents clause 'firstprivate' in the '#pragma omp ...' directives.
inits_const_range inits() const
SourceLocation getCommaLoc()
Get location of ','.
const_child_range used_children() const
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
static bool classof(const OMPClause *T)
const_child_range children() const
OpenMPProcBindClauseKind
OpenMP attributes for 'proc_bind' clause.
MutableArrayRef< Expr * >::iterator inits_iterator
const_child_range children() const
OMPThreadLimitClause()
Build an empty clause.
helper_expr_range destination_exprs()
const_child_range children() const
This represents 'seq_cst' clause in the '#pragma omp atomic' directive.
helper_expr_const_range assignment_ops() const
This represents 'untied' clause in the '#pragma omp ...' directive.
static bool classof(const OMPClause *T)
helper_expr_range lhs_exprs()
mapperlist_range mapperlists()
helper_expr_range reduction_ops()
static bool classof(const OMPClause *T)
SourceLocation getModifierLoc() const
Return modifier location.
OMPMergeableClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'mergeable' clause.
OMPNumThreadsClause(Expr *NumThreads, Stmt *HelperNumThreads, OpenMPDirectiveKind CaptureRegion, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'num_threads' clause with condition NumThreads.
static bool classof(const OMPClause *T)
static bool classof(const OMPClause *T)
This represents 'unified_address' clause in the '#pragma omp requires' directive. ...
void setPostUpdateExpr(Expr *S)
Set pre-initialization statement for the clause.
SourceLocation getLParenLoc()
Get location of '('.
helper_expr_range destination_exprs()
SourceLocation getColonLoc() const
Returns the location of ':'.
const_child_range children() const
This represents 'num_teams' clause in the '#pragma omp ...' directive.
OMPSimdlenClause(Expr *Len, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'simdlen' clause.
llvm::iterator_range< child_iterator > child_range
SourceLocation LParenLoc
Location of '('.
SourceLocation getLParenLoc()
Get location of '('.
const_child_range children() const
MappableComponent(Expr *AssociatedExpression, ValueDecl *AssociatedDeclaration)
helper_expr_const_range taskgroup_descriptors() const
helper_expr_range private_copies()
const Expr * getChunkSize() const
Get chunk size.
OMPCollapseClause()
Build an empty clause.
llvm::iterator_range< updates_const_iterator > updates_const_range
unsigned getTotalComponentListNum() const
Return the number of lists derived from the clause expressions.
ArrayRef< unsigned > getDeclNumListsRef() const
Get the number of lists per declaration that are in the trailing objects of the class.
static bool classof(const OMPClause *T)
OMPThreadsClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'threads' clause.
Encodes a location in the source.
mapperlist_iterator mapperlist_end()
Expr * getNumTeams() const
Return NumTeams number.
const_child_range used_children() const
This represents 'hint' clause in the '#pragma omp ...' directive.
OpenMPDependClauseKind
OpenMP attributes for 'depend' clause.
MutableArrayRef< Expr * > getInits()
varlist_const_iterator varlist_begin() const
const_child_range used_children() const
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
helper_expr_range rhs_exprs()
child_range used_children()
const_child_range used_children() const
llvm::iterator_range< const_all_lists_sizes_iterator > const_all_lists_sizes_range
private_copies_range private_copies()
ArrayRef< const Expr * >::iterator updates_const_iterator
This structure contains all sizes needed for by an OMPMappableExprListClause.
const_child_range used_children() const
This represents 'schedule' clause in the '#pragma omp ...' directive.
llvm::iterator_range< finals_const_iterator > finals_const_range
MutableArrayRef< Expr * >::iterator privates_iterator
OMPMergeableClause()
Build an empty clause.
OMPClausePrinter(raw_ostream &OS, const PrintingPolicy &Policy)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
OpenMPDirectiveKind
OpenMP directives.
OMPDynamicAllocatorsClause()
Build an empty clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
This represents clause 'shared' in the '#pragma omp ...' directives.
SourceLocation getProcBindKindKwLoc() const
Returns location of clause kind.
const_child_range children() const
OMPNumTeamsClause()
Build an empty clause.
llvm::iterator_range< const_child_iterator > const_child_range
static bool classof(const OMPClause *T)
Expr * getPriority()
Return Priority number.
void setMapperQualifierLoc(NestedNameSpecifierLoc NNSL)
Set the nested name specifier of associated user-defined mapper.
const_child_range used_children() const
OMPVarListLocTy(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
ArrayRef< ValueDecl * > getUniqueDeclsRef() const
Get the unique declarations that are in the trailing objects of the class.
OpenMPLinearClauseKind Modifier
Modifier of 'linear' clause.
const_child_range children() const
OpenMPMapClauseKind getMapType() const LLVM_READONLY
Fetches mapping kind for the clause.
static bool classof(const OMPClause *T)
const_child_range children() const
child_range used_children()
const_component_lists_iterator & operator++()
This is a basic class for representing single OpenMP clause.
const_child_range children() const
const_child_range children() const
child_range used_children()
SourceLocation getColonLoc() const
Returns the location of the ':' delimiter.
MutableArrayRef< Expr * >::iterator helper_expr_iterator
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
child_range used_children()
MutableArrayRef< Expr * >::iterator finals_iterator
SourceLocation getNameModifierLoc() const
Return the location of directive name modifier.
void setVarRefs(ArrayRef< Expr *> VL)
Sets the list of variables for this clause.
OMPUnifiedSharedMemoryClause()
Build an empty clause.
static bool classof(const OMPClause *T)
ArrayRef< MappableComponent >::iterator const_all_components_iterator
const_child_range used_children() const
SourceLocation EndLoc
Ending location of the clause.
ConstStmtIterator const_child_iterator
Expr * getNumForLoops() const
Return the number of associated for-loops.
const_child_range used_children() const
const_all_lists_sizes_range all_lists_sizes() const
helper_expr_range reduction_ops()
static bool classof(const OMPClause *T)
std::pair< const ValueDecl *, MappableExprComponentListRef > operator*() const
MutableArrayRef< Expr * >::iterator helper_expr_iterator
SourceLocation getLParenLoc() const
Returns the location of '('.
helper_expr_const_range lhs_exprs() const
child_range used_children()
const_child_range used_children() const
ArrayRef< unsigned >::iterator const_all_num_lists_iterator
llvm::iterator_range< inits_const_iterator > inits_const_range
ArrayRef< const Expr * >::iterator inits_const_iterator
OpenMPDirectiveKind getCaptureRegion() const
Get capture region for the stmt in the clause.
OMPDefaultmapClause()
Build an empty clause.
const_component_lists_iterator component_lists_begin() const
Iterators for all component lists.
void setStep(Expr *Step)
Sets the linear step for clause.
ast_type_traits::DynTypedNode Node
ArrayRef< OpenMPMapModifierKind > getMapTypeModifiers() const LLVM_READONLY
Fetches ArrayRef of map-type-modifiers.
llvm::iterator_range< const_all_decls_iterator > const_all_decls_range
Optional< types::ID > Type
const_child_range used_children() const
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
OpenMPScheduleClauseModifier
OpenMP modifiers for 'schedule' clause.
llvm::iterator_range< varlist_const_iterator > varlist_const_range
Dataflow Directional Tag Classes.
ArrayRef< const Expr * > getVarRefs() const
Fetches list of all variables in the clause.
SourceLocation getColonLoc() const
Get colon location.
This represents 'device' clause in the '#pragma omp ...' directive.
const Expr * getAlignment() const
Returns alignment.
OMPThreadsClause()
Build an empty clause.
OpenMPDefaultmapClauseKind getDefaultmapKind() const
Get kind of the clause.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
SourceLocation ModifierLoc
Location of linear modifier if any.
helper_expr_const_range privates() const
static bool classof(const OMPClause *T)
OpenMPAtomicDefaultMemOrderClauseKind
OpenMP attributes for 'atomic_default_mem_order' clause.
static bool classof(const OMPClause *T)
const_all_components_range all_components() const
const_child_range children() const
child_range used_children()
child_range used_children()
OMPNumThreadsClause()
Build an empty clause.
MutableArrayRef< ValueDecl * > getUniqueDeclsRef()
Get the unique declarations that are in the trailing objects of the class.
SourceLocation getLParenLoc()
Get location of '('.
Stmt * getPreInitStmt()
Get pre-initialization statement for the clause.
U cast(CodeGen::Address addr)
static bool classof(const OMPClause *T)
child_range used_children()
static bool classof(const OMPClause *T)
This represents 'unified_shared_memory' clause in the '#pragma omp requires' directive.
This represents clause 'linear' in the '#pragma omp ...' directives.
static bool classof(const OMPClause *T)
ArrayRef< const Expr * >::iterator inits_const_iterator
const_child_range used_children() const
const_child_range children() const
static bool classof(const OMPClause *T)
const_child_range used_children() const
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspnd...
OpenMPDefaultmapClauseModifier getDefaultmapModifier() const
Get the modifier of the clause.
void setLocStart(SourceLocation Loc)
Sets the starting location of the clause.
SourceLocation getBeginLoc() const
Returns the starting location of the clause.
ArrayRef< MappableExprComponentList > MappableExprComponentListsRef
child_range used_children()
unsigned NumUniqueDeclarations
Number of unique base declarations.
SourceLocation getLParenLoc() const
Returns the location of '('.
static bool classof(const OMPClause *T)
SmallVector< MappableExprComponentList, 8 > MappableExprComponentLists
bool isImplicitMapType() const LLVM_READONLY
Is this an implicit map type? We have to capture 'IsMapTypeImplicit' from the parser for more informa...
llvm::iterator_range< private_copies_iterator > private_copies_range
const_child_range children() const
MutableArrayRef< Expr * >::iterator private_copies_iterator
child_range used_children()
ArrayRef< unsigned > getComponentListSizesRef() const
Get the cumulative component lists sizes that are in the trailing objects of the class.
SourceLocation getEndLoc() const
Returns the ending location of the clause.
void setComponentListSizes(ArrayRef< unsigned > CLSs)
Set the cumulative component lists sizes that are in the trailing objects of the class.
helper_expr_const_range privates() const
llvm::iterator_range< mapperlist_iterator > mapperlist_range
Class that represents a component of a mappable expression.
ArrayRef< const Expr * >::iterator inits_const_iterator
private_copies_const_range private_copies() const
inits_const_range inits() const
child_range used_children()
OMPDefaultClause(OpenMPDefaultClauseKind A, SourceLocation ALoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'default' clause with argument A ('none' or 'shared').
OMPDeviceClause(Expr *E, Stmt *HelperE, OpenMPDirectiveKind CaptureRegion, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'device' clause.
OMPReadClause()
Build an empty clause.
OMPThreadLimitClause(Expr *E, Stmt *HelperE, OpenMPDirectiveKind CaptureRegion, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'thread_limit' clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
mapperlist_const_iterator mapperlist_begin() const
const_child_range children() const
const_child_range used_children() const
OpenMPDirectiveKind getNameModifier() const
Return directive name modifier associated with the clause.
llvm::iterator_range< privates_const_iterator > privates_const_range
const_child_range used_children() const
llvm::iterator_range< private_copies_const_iterator > private_copies_const_range
const_component_lists_iterator component_lists_end() const
helper_expr_const_range destination_exprs() const
llvm::iterator_range< const_component_lists_iterator > const_component_lists_range
ArrayRef< const Expr * >::iterator finals_const_iterator
llvm::iterator_range< private_copies_const_iterator > private_copies_const_range
OMPUntiedClause()
Build an empty clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
SourceLocation getColonLoc() const
Gets location of ':' symbol in clause.
OpenMPScheduleClauseKind
OpenMP attributes for 'schedule' clause.
const_child_range children() const
void setUDMapperRefs(ArrayRef< Expr *> DMDs)
Set the user-defined mappers that are in the trailing objects of the class.
OMPFinalClause(Expr *Cond, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'final' clause with condition Cond.
const_child_range used_children() const
const_child_range used_children() const
private_copies_const_range private_copies() const
OpenMPDefaultClauseKind
OpenMP attributes for 'default' clause.
OMPDeviceClause()
Build an empty clause.
llvm::iterator_range< inits_const_iterator > inits_const_range
SourceLocation getDistScheduleKindLoc()
Get kind location.
llvm::iterator_range< finals_iterator > finals_range
OMPNowaitClause()
Build an empty clause.
privates_range privates()
const DeclarationNameInfo & getNameInfo() const
Gets the name info for specified reduction identifier.
const_child_range children() const
This represents 'write' clause in the '#pragma omp atomic' directive.
const_child_range used_children() const
OMPNumTasksClause()
Build an empty clause.
helper_expr_range taskgroup_descriptors()
SourceLocation getLParenLoc() const
Returns the location of '('.
void setClauseInfo(ArrayRef< ValueDecl *> Declarations, MappableExprComponentListsRef ComponentLists)
Fill the clause information from the list of declarations and associated component lists...
static bool classof(const OMPClause *T)
const_child_range used_children() const
const_child_range used_children() const
static bool classof(const OMPClause *T)
SourceLocation getLParenLoc() const
Returns the location of '('.
const DeclarationNameInfo & getNameInfo() const
Gets the name info for specified reduction identifier.
ArrayRef< ValueDecl *>::iterator const_all_decls_iterator
Iterators to access all the declarations, number of lists, list sizes, and components.
OpenMPScheduleClauseModifier getSecondScheduleModifier() const
Get the second modifier of the clause.
child_range used_children()
Defines the clang::SourceLocation class and associated facilities.
llvm::iterator_range< privates_iterator > privates_range
OMPUnifiedAddressClause()
Build an empty clause.
This represents 'nowait' clause in the '#pragma omp ...' directive.
MutableArrayRef< MappableComponent > getComponentsRef()
Get the components that are in the trailing objects of the class.
helper_expr_range reduction_ops()
varlist_iterator varlist_end()
OpenMPScheduleClauseModifier getFirstScheduleModifier() const
Get the first modifier of the clause.
This represents 'num_tasks' clause in the '#pragma omp ...' directive.
const_child_range children() const
const_child_range used_children() const
child_range used_children()
OpenMPScheduleClauseKind getScheduleKind() const
Get kind of the clause.
varlist_const_range varlists() const
const_child_range used_children() const
Privates[]
Gets the list of initial values for linear variables.
OpenMPMapClauseKind
OpenMP mapping kind for 'map' clause.
const_child_range used_children() const
const_child_range used_children() const
child_range used_children()
OpenMPLinearClauseKind getModifier() const
Return modifier.
SourceLocation getFirstScheduleModifierLoc() const
Get the first modifier location.
OMPClause(OpenMPClauseKind K, SourceLocation StartLoc, SourceLocation EndLoc)
const_child_range used_children() const
const_child_range used_children() const
helper_expr_const_range reduction_ops() const
MutableArrayRef< Expr *>::iterator mapperlist_iterator
const_child_range children() const
OMPSimdlenClause()
Build an empty clause.
const_child_range children() const
Expr * getThreadLimit()
Return ThreadLimit number.
child_range used_children()
OMPIfClause()
Build an empty clause.
child_range used_children()
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
OMPScheduleClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KLoc, SourceLocation CommaLoc, SourceLocation EndLoc, OpenMPScheduleClauseKind Kind, Expr *ChunkSize, Stmt *HelperChunkSize, OpenMPScheduleClauseModifier M1, SourceLocation M1Loc, OpenMPScheduleClauseModifier M2, SourceLocation M2Loc)
Build 'schedule' clause with schedule kind Kind and chunk size expression ChunkSize.
ArrayRef< const Expr * >::iterator privates_const_iterator
OMPUpdateClause()
Build an empty clause.
This represents 'dist_schedule' clause in the '#pragma omp ...' directive.
mapperlist_const_iterator mapperlist_end() const
ArrayRef< const Expr *>::iterator varlist_const_iterator
MutableArrayRef< Expr * > getUDMapperRefs()
Get the user-defined mapper references that are in the trailing objects of the class.
const_child_range used_children() const
Expr * getHint() const
Returns number of threads.
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
void setInits(ArrayRef< Expr *> IL)
Sets the list of the initial values for linear variables.
OMPGrainsizeClause()
Build an empty clause.
static bool classof(const OMPClause *T)
const_child_range children() const
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
Expr * getChunkSize()
Get chunk size.
Expr * getNumThreads() const
Returns number of threads.
This structure contains most locations needed for by an OMPVarListClause.
OMPReadClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'read' clause.
OMPReverseOffloadClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'reverse_offload' clause.
const_child_range children() const
SourceLocation getLParenLoc() const
Returns the location of '('.
child_range used_children()
static bool classof(const OMPClause *T)
const_child_range used_children() const
OMPReverseOffloadClause()
Build an empty clause.
const_child_range children() const
OMPAllocatorClause(Expr *A, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'allocator' clause with the given allocator.
const Expr * getPostUpdateExpr() const
Get post-update expression for the clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
OpenMPAtomicDefaultMemOrderClauseKind getAtomicDefaultMemOrderKind() const
Returns kind of the clause.
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
const_child_range used_children() const
const DeclarationNameInfo & getMapperIdInfo() const
Gets the name info for associated user-defined mapper.
SourceLocation ColonLoc
Location of ':'.
unsigned NumComponents
Total number of expression components.
const_child_range children() const
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
llvm::iterator_range< varlist_iterator > varlist_range
OMPMappableExprListSizeTy(unsigned NumVars, unsigned NumUniqueDeclarations, unsigned NumComponentLists, unsigned NumComponents)
const_child_range used_children() const
This represents clause 'use_device_ptr' in the '#pragma omp ...' directives.
OMPDefaultClause()
Build an empty clause.
static bool classof(const OMPClause *T)
OMPClauseWithPreInit(const OMPClause *This)
Expr * getThreadLimit() const
Return ThreadLimit number.
static OMPLinearClause * Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation LParenLoc, OpenMPLinearClauseKind Modifier, SourceLocation ModifierLoc, SourceLocation ColonLoc, SourceLocation EndLoc, ArrayRef< Expr *> VL, ArrayRef< Expr *> PL, ArrayRef< Expr *> IL, Expr *Step, Expr *CalcStep, Stmt *PreInit, Expr *PostUpdate)
Creates clause with a list of variables VL and a linear step Step.
child_range used_children()
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
const_child_range children() const
static bool classof(const OMPClause *T)
SourceLocation StartLoc
Starting location of the clause (the clause keyword).