17 #ifndef LLVM_CLANG_AST_OPENMPCLAUSE_H 18 #define LLVM_CLANG_AST_OPENMPCLAUSE_H 29 #include "llvm/ADT/ArrayRef.h" 30 #include "llvm/ADT/MapVector.h" 31 #include "llvm/ADT/SmallVector.h" 32 #include "llvm/ADT/iterator.h" 33 #include "llvm/ADT/iterator_range.h" 34 #include "llvm/Support/Casting.h" 35 #include "llvm/Support/Compiler.h" 36 #include "llvm/Support/TrailingObjects.h" 63 : StartLoc(StartLoc), EndLoc(EndLoc), Kind(K) {}
103 Stmt *PreInit =
nullptr;
110 assert(
get(This) &&
"get is not tuned for pre-init.");
116 CaptureRegion = ThisRegion;
124 Stmt *getPreInitStmt() {
return PreInit; }
139 Expr *PostUpdate =
nullptr;
143 assert(
get(This) &&
"get is not tuned for post-update.");
182 :
OMPClause(K, StartLoc, EndLoc), LParenLoc(LParenLoc), NumVars(N) {}
187 static_cast<T *
>(
this)->
template getTrailingObjects<Expr *>(), NumVars);
192 assert(VL.size() == NumVars &&
193 "Number of variables is not the same as the preallocated buffer");
194 std::copy(VL.begin(), VL.end(),
195 static_cast<T *
>(
this)->
template getTrailingObjects<Expr *>());
227 return llvm::makeArrayRef(
228 static_cast<const T *>(
this)->
template getTrailingObjects<Expr *>(),
247 Stmt *Condition =
nullptr;
259 void setCondition(
Expr *Cond) { Condition = Cond; }
265 void setNameModifierLoc(
SourceLocation Loc) { NameModifierLoc = Loc; }
287 :
OMPClause(OMPC_if, StartLoc, EndLoc), OMPClauseWithPreInit(this),
288 LParenLoc(LParenLoc), Condition(Cond), ColonLoc(ColonLoc),
289 NameModifier(NameModifier), NameModifierLoc(NameModifierLoc) {
290 setPreInitStmt(HelperCond, CaptureRegion);
296 OMPClauseWithPreInit(this) {}
337 Stmt *Condition =
nullptr;
340 void setCondition(
Expr *Cond) { Condition = Cond; }
351 :
OMPClause(OMPC_final, StartLoc, EndLoc), LParenLoc(LParenLoc),
389 Stmt *NumThreads =
nullptr;
392 void setNumThreads(
Expr *NThreads) { NumThreads = NThreads; }
408 :
OMPClause(OMPC_num_threads, StartLoc, EndLoc),
409 OMPClauseWithPreInit(this), LParenLoc(LParenLoc),
410 NumThreads(NumThreads) {
411 setPreInitStmt(HelperNumThreads, CaptureRegion);
417 OMPClauseWithPreInit(this) {}
454 Stmt *Safelen =
nullptr;
457 void setSafelen(
Expr *Len) { Safelen = Len; }
467 :
OMPClause(OMPC_safelen, StartLoc, EndLoc), LParenLoc(LParenLoc),
508 Stmt *Simdlen =
nullptr;
511 void setSimdlen(
Expr *Len) { Simdlen = Len; }
521 :
OMPClause(OMPC_simdlen, StartLoc, EndLoc), LParenLoc(LParenLoc),
562 Stmt *NumForLoops =
nullptr;
565 void setNumForLoops(
Expr *Num) { NumForLoops = Num; }
576 :
OMPClause(OMPC_collapse, StartLoc, EndLoc), LParenLoc(LParenLoc),
626 void setDefaultKindKwLoc(
SourceLocation KLoc) { KindKwLoc = KLoc; }
639 :
OMPClause(OMPC_default, StartLoc, EndLoc), LParenLoc(LParenLoc),
640 Kind(A), KindKwLoc(ALoc) {}
695 void setProcBindKindKwLoc(
SourceLocation KLoc) { KindKwLoc = KLoc; }
709 :
OMPClause(OMPC_proc_bind, StartLoc, EndLoc), LParenLoc(LParenLoc),
710 Kind(A), KindKwLoc(ALoc) {}
754 enum {FIRST, SECOND, NUM_MODIFIERS};
767 Expr *ChunkSize =
nullptr;
778 Modifiers[FIRST] = M;
785 Modifiers[SECOND] = M;
790 ModifiersLoc[FIRST] = Loc;
795 ModifiersLoc[SECOND] = Loc;
803 Modifiers[FIRST] = M;
806 Modifiers[SECOND] = M;
828 void setChunkSize(
Expr *E) { ChunkSize = E; }
849 Expr *ChunkSize,
Stmt *HelperChunkSize,
852 :
OMPClause(OMPC_schedule, StartLoc, EndLoc), OMPClauseWithPreInit(this),
853 LParenLoc(LParenLoc), Kind(Kind), KindLoc(KLoc), CommaLoc(CommaLoc),
854 ChunkSize(ChunkSize) {
855 setPreInitStmt(HelperChunkSize);
856 Modifiers[FIRST] = M1;
857 Modifiers[SECOND] = M2;
858 ModifiersLoc[FIRST] = M1Loc;
859 ModifiersLoc[SECOND] = M2Loc;
865 OMPClauseWithPreInit(this) {
875 return Modifiers[FIRST];
880 return Modifiers[SECOND];
891 return ModifiersLoc[FIRST];
896 return ModifiersLoc[SECOND];
909 return child_range(reinterpret_cast<Stmt **>(&ChunkSize),
910 reinterpret_cast<Stmt **>(&ChunkSize) + 1);
932 Stmt *NumForLoops =
nullptr;
935 void setNumForLoops(
Expr *Num) { NumForLoops = Num; }
946 :
OMPClause(OMPC_ordered, StartLoc, EndLoc), LParenLoc(LParenLoc),
982 :
OMPClause(OMPC_nowait, StartLoc, EndLoc) {}
1010 :
OMPClause(OMPC_untied, StartLoc, EndLoc) {}
1039 :
OMPClause(OMPC_mergeable, StartLoc, EndLoc) {}
1067 :
OMPClause(OMPC_read, StartLoc, EndLoc) {}
1094 :
OMPClause(OMPC_write, StartLoc, EndLoc) {}
1123 :
OMPClause(OMPC_update, StartLoc, EndLoc) {}
1152 :
OMPClause(OMPC_capture, StartLoc, EndLoc) {}
1181 :
OMPClause(OMPC_seq_cst, StartLoc, EndLoc) {}
1240 return llvm::makeArrayRef(varlist_end(), varlist_size());
1267 llvm::iterator_range<private_copies_const_iterator>;
1271 getPrivateCopies().end());
1276 getPrivateCopies().end());
1280 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
1281 reinterpret_cast<Stmt **>(varlist_end()));
1299 public OMPClauseWithPreInit,
1314 LParenLoc, EndLoc, N),
1315 OMPClauseWithPreInit(this) {}
1324 OMPClauseWithPreInit(this) {}
1337 return llvm::makeArrayRef(varlist_end(), varlist_size());
1351 return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
1383 llvm::iterator_range<private_copies_const_iterator>;
1387 getPrivateCopies().end());
1391 getPrivateCopies().end());
1407 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
1408 reinterpret_cast<Stmt **>(varlist_end()));
1426 public OMPClauseWithPostUpdate,
1457 LParenLoc, EndLoc, N),
1458 OMPClauseWithPostUpdate(this) {}
1467 OMPClauseWithPostUpdate(this) {}
1475 return llvm::makeArrayRef(varlist_end(), varlist_size());
1489 return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
1503 return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
1516 return llvm::makeArrayRef(getDestinationExprs().end(), varlist_size());
1560 llvm::iterator_range<helper_expr_const_iterator>;
1568 getPrivateCopies().end());
1573 getPrivateCopies().end());
1578 getSourceExprs().end());
1587 getDestinationExprs().end());
1592 getDestinationExprs().end());
1597 getAssignmentOps().end());
1602 getAssignmentOps().end());
1606 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
1607 reinterpret_cast<Stmt **>(varlist_end()));
1666 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
1667 reinterpret_cast<Stmt **>(varlist_end()));
1685 public OMPClauseWithPostUpdate,
1714 LParenLoc, EndLoc, N),
1715 OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
1716 QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
1725 OMPClauseWithPostUpdate(this) {}
1746 return llvm::makeArrayRef(varlist_end(), varlist_size());
1759 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
1774 return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
1788 return llvm::makeArrayRef(getRHSExprs().end(), varlist_size());
1851 llvm::iterator_range<helper_expr_const_iterator>;
1879 getReductionOps().end());
1884 getReductionOps().end());
1888 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
1889 reinterpret_cast<Stmt **>(varlist_end()));
1907 public OMPClauseWithPostUpdate,
1936 LParenLoc, EndLoc, N),
1937 OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
1938 QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
1947 OMPClauseWithPostUpdate(this) {}
1967 return llvm::makeArrayRef(varlist_end(), varlist_size());
1980 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
1994 return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
2008 return llvm::makeArrayRef(getRHSExprs().end(), varlist_size());
2071 llvm::iterator_range<helper_expr_const_iterator>;
2099 getReductionOps().end());
2104 getReductionOps().end());
2108 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2109 reinterpret_cast<Stmt **>(varlist_end()));
2126 public OMPClauseWithPostUpdate,
2155 LParenLoc, EndLoc, N),
2156 OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
2157 QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
2166 OMPClauseWithPostUpdate(this) {}
2186 return llvm::makeArrayRef(varlist_end(), varlist_size());
2199 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
2213 return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
2227 return llvm::makeArrayRef(getRHSExprs().end(), varlist_size());
2238 return llvm::makeArrayRef(getReductionOps().end(), varlist_size());
2304 llvm::iterator_range<helper_expr_const_iterator>;
2332 getReductionOps().end());
2337 getReductionOps().end());
2342 getTaskgroupDescriptors().end());
2347 getTaskgroupDescriptors().end());
2351 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2352 reinterpret_cast<Stmt **>(varlist_end()));
2370 public OMPClauseWithPostUpdate,
2404 OMPClauseWithPostUpdate(this), Modifier(Modifier),
2405 ModifierLoc(ModifierLoc), ColonLoc(ColonLoc) {}
2414 OMPClauseWithPostUpdate(this) {}
2432 return llvm::makeArrayRef(varlist_end(), varlist_size());
2439 return llvm::makeArrayRef(
getPrivates().end(), varlist_size());
2447 return llvm::makeArrayRef(
getInits().end(), varlist_size());
2455 return llvm::makeArrayRef(
getUpdates().end(), varlist_size());
2590 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2591 reinterpret_cast<Stmt **>(varlist_end()));
2618 void setAlignment(Expr *A) { *varlist_end() = A; }
2628 SourceLocation ColonLoc, SourceLocation EndLoc,
2632 ColonLoc(ColonLoc) {}
2639 SourceLocation(), SourceLocation(),
2653 SourceLocation LParenLoc,
2654 SourceLocation ColonLoc,
2655 SourceLocation EndLoc, ArrayRef<Expr *> VL,
2677 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2678 reinterpret_cast<Stmt **>(varlist_end()));
2682 return T->getClauseKind() == OMPC_aligned;
2720 SourceLocation EndLoc,
unsigned N)
2729 SourceLocation(), SourceLocation(),
2735 void setSourceExprs(ArrayRef<Expr *> SrcExprs);
2738 MutableArrayRef<Expr *> getSourceExprs() {
2739 return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
2741 ArrayRef<const Expr *> getSourceExprs()
const {
2742 return llvm::makeArrayRef(varlist_end(), varlist_size());
2748 void setDestinationExprs(ArrayRef<Expr *> DstExprs);
2751 MutableArrayRef<Expr *> getDestinationExprs() {
2752 return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
2754 ArrayRef<const Expr *> getDestinationExprs()
const {
2755 return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
2762 void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
2765 MutableArrayRef<Expr *> getAssignmentOps() {
2766 return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
2768 ArrayRef<const Expr *> getAssignmentOps()
const {
2769 return llvm::makeArrayRef(getDestinationExprs().end(), varlist_size());
2795 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
2796 SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> SrcExprs,
2797 ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps);
2809 llvm::iterator_range<helper_expr_const_iterator>;
2813 getSourceExprs().end());
2822 getDestinationExprs().end());
2827 getDestinationExprs().end());
2832 getAssignmentOps().end());
2837 getAssignmentOps().end());
2841 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2842 reinterpret_cast<Stmt **>(varlist_end()));
2846 return T->getClauseKind() == OMPC_copyin;
2872 SourceLocation EndLoc,
unsigned N)
2874 LParenLoc, EndLoc, N) {}
2881 OMPC_copyprivate, SourceLocation(), SourceLocation(),
2882 SourceLocation(), N) {}
2887 void setSourceExprs(ArrayRef<Expr *> SrcExprs);
2890 MutableArrayRef<Expr *> getSourceExprs() {
2891 return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
2893 ArrayRef<const Expr *> getSourceExprs()
const {
2894 return llvm::makeArrayRef(varlist_end(), varlist_size());
2900 void setDestinationExprs(ArrayRef<Expr *> DstExprs);
2903 MutableArrayRef<Expr *> getDestinationExprs() {
2904 return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
2906 ArrayRef<const Expr *> getDestinationExprs()
const {
2907 return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
2914 void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
2917 MutableArrayRef<Expr *> getAssignmentOps() {
2918 return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
2920 ArrayRef<const Expr *> getAssignmentOps()
const {
2921 return llvm::makeArrayRef(getDestinationExprs().end(), varlist_size());
2946 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
2947 SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> SrcExprs,
2948 ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps);
2960 llvm::iterator_range<helper_expr_const_iterator>;
2964 getSourceExprs().end());
2973 getDestinationExprs().end());
2978 getDestinationExprs().end());
2983 getAssignmentOps().end());
2988 getAssignmentOps().end());
2992 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
2993 reinterpret_cast<Stmt **>(varlist_end()));
2997 return T->getClauseKind() == OMPC_copyprivate;
3025 OMPFlushClause(SourceLocation StartLoc, SourceLocation LParenLoc,
3026 SourceLocation EndLoc,
unsigned N)
3027 : OMPVarListClause<OMPFlushClause>(OMPC_flush, StartLoc, LParenLoc,
3034 : OMPVarListClause<OMPFlushClause>(OMPC_flush, SourceLocation(),
3035 SourceLocation(), SourceLocation(),
3047 SourceLocation LParenLoc, SourceLocation EndLoc,
3048 ArrayRef<Expr *> VL);
3057 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3058 reinterpret_cast<Stmt **>(varlist_end()));
3062 return T->getClauseKind() == OMPC_flush;
3085 SourceLocation DepLoc;
3097 SourceLocation EndLoc,
unsigned N)
3106 SourceLocation(), SourceLocation(),
3113 void setDependencyLoc(SourceLocation Loc) { DepLoc = Loc; }
3116 void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
3130 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
3132 SourceLocation DepLoc, SourceLocation ColonLoc, ArrayRef<Expr *> VL);
3151 void setCounterValue(Expr *V);
3154 Expr *getCounterValue();
3157 const Expr *getCounterValue()
const;
3160 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
3161 reinterpret_cast<Stmt **>(varlist_end()));
3165 return T->getClauseKind() == OMPC_depend;
3181 SourceLocation LParenLoc;
3184 Stmt *Device =
nullptr;
3189 void setDevice(Expr *E) { Device = E; }
3199 SourceLocation LParenLoc, SourceLocation EndLoc)
3200 :
OMPClause(OMPC_device, StartLoc, EndLoc), OMPClauseWithPreInit(this),
3201 LParenLoc(LParenLoc), Device(E) {
3202 setPreInitStmt(HelperE);
3207 :
OMPClause(OMPC_device, SourceLocation(), SourceLocation()),
3208 OMPClauseWithPreInit(this) {}
3225 return T->getClauseKind() == OMPC_device;
3242 :
OMPClause(OMPC_threads, StartLoc, EndLoc) {}
3246 :
OMPClause(OMPC_threads, SourceLocation(), SourceLocation()) {}
3253 return T->getClauseKind() == OMPC_threads;
3270 :
OMPClause(OMPC_simd, StartLoc, EndLoc) {}
3280 return T->getClauseKind() == OMPC_simd;
3296 Expr *AssociatedExpression =
nullptr;
3301 ValueDecl *AssociatedDeclaration =
nullptr;
3306 ValueDecl *AssociatedDeclaration)
3307 : AssociatedExpression(AssociatedExpression),
3308 AssociatedDeclaration(
3309 AssociatedDeclaration
3316 return AssociatedDeclaration;
3339 getUniqueDeclarationsTotalNumber(ArrayRef<ValueDecl *> Declarations);
3352 unsigned NumUniqueDeclarations;
3355 unsigned NumComponentLists;
3358 unsigned NumComponents;
3376 SourceLocation LParenLoc, SourceLocation EndLoc,
3377 unsigned NumVars,
unsigned NumUniqueDeclarations,
3378 unsigned NumComponentLists,
unsigned NumComponents)
3380 NumUniqueDeclarations(NumUniqueDeclarations),
3381 NumComponentLists(NumComponentLists), NumComponents(NumComponents) {}
3386 return MutableArrayRef<ValueDecl *>(
3387 static_cast<T *
>(
this)->
template getTrailingObjects<ValueDecl *>(),
3388 NumUniqueDeclarations);
3394 return ArrayRef<ValueDecl *>(
3395 static_cast<const T *
>(
this)
3396 ->
template getTrailingObjects<ValueDecl *>(),
3397 NumUniqueDeclarations);
3403 assert(UDs.size() == NumUniqueDeclarations &&
3404 "Unexpected amount of unique declarations.");
3405 std::copy(UDs.begin(), UDs.end(), getUniqueDeclsRef().begin());
3411 return MutableArrayRef<unsigned>(
3412 static_cast<T *
>(
this)->
template getTrailingObjects<unsigned>(),
3413 NumUniqueDeclarations);
3419 return ArrayRef<unsigned>(
3420 static_cast<const T *
>(
this)->
template getTrailingObjects<unsigned>(),
3421 NumUniqueDeclarations);
3427 assert(DNLs.size() == NumUniqueDeclarations &&
3428 "Unexpected amount of list numbers.");
3429 std::copy(DNLs.begin(), DNLs.end(), getDeclNumListsRef().begin());
3435 return MutableArrayRef<unsigned>(
3436 static_cast<T *
>(
this)->
template getTrailingObjects<unsigned>() +
3437 NumUniqueDeclarations,
3444 return ArrayRef<unsigned>(
3445 static_cast<const T *
>(
this)->
template getTrailingObjects<unsigned>() +
3446 NumUniqueDeclarations,
3453 assert(CLSs.size() == NumComponentLists &&
3454 "Unexpected amount of component lists.");
3455 std::copy(CLSs.begin(), CLSs.end(), getComponentListSizesRef().begin());
3460 return MutableArrayRef<MappableComponent>(
3461 static_cast<T *
>(
this)
3462 ->
template getTrailingObjects<MappableComponent>(),
3468 return ArrayRef<MappableComponent>(
3469 static_cast<const T *
>(
this)
3470 ->
template getTrailingObjects<MappableComponent>(),
3478 ArrayRef<unsigned> CLSs) {
3479 assert(Components.size() == NumComponents &&
3480 "Unexpected amount of component lists.");
3481 assert(CLSs.size() == NumComponentLists &&
3482 "Unexpected amount of list sizes.");
3483 std::copy(Components.begin(), Components.end(), getComponentsRef().begin());
3492 assert(getUniqueDeclarationsTotalNumber(Declarations) ==
3493 NumUniqueDeclarations &&
3494 "Unexpected number of mappable expression info entries!");
3495 assert(getComponentsTotalNumber(ComponentLists) == NumComponents &&
3496 "Unexpected total number of components!");
3497 assert(Declarations.size() == ComponentLists.size() &&
3498 "Declaration and component lists size is not consistent!");
3499 assert(Declarations.size() == NumComponentLists &&
3500 "Unexpected declaration and component lists size!");
3505 llvm::MapVector<ValueDecl *, SmallVector<MappableExprComponentListRef, 8>>
3508 auto CI = ComponentLists.begin();
3509 for (
auto DI = Declarations.begin(), DE = Declarations.end(); DI != DE;
3511 assert(!CI->empty() &&
"Invalid component list!");
3512 ComponentListMap[*DI].push_back(*CI);
3517 auto UniqueDeclarations = getUniqueDeclsRef();
3518 auto UDI = UniqueDeclarations.begin();
3520 auto DeclNumLists = getDeclNumListsRef();
3521 auto DNLI = DeclNumLists.begin();
3523 auto ComponentListSizes = getComponentListSizesRef();
3524 auto CLSI = ComponentListSizes.begin();
3526 auto Components = getComponentsRef();
3527 auto CI = Components.begin();
3530 unsigned PrevSize = 0u;
3533 for (
auto &M : ComponentListMap) {
3550 PrevSize +=
C.size();
3557 CI = std::copy(
C.begin(),
C.end(), CI);
3576 :
public llvm::iterator_adaptor_base<
3577 const_component_lists_iterator,
3578 MappableExprComponentListRef::const_iterator,
3579 std::forward_iterator_tag, MappableComponent, ptrdiff_t,
3580 MappableComponent, MappableComponent> {
3582 ArrayRef<ValueDecl *>::iterator DeclCur;
3585 ArrayRef<unsigned>::iterator NumListsCur;
3588 unsigned RemainingLists = 0;
3592 unsigned PrevListSize = 0;
3596 ArrayRef<unsigned>::const_iterator ListSizeCur;
3597 ArrayRef<unsigned>::const_iterator ListSizeEnd;
3600 MappableExprComponentListRef::const_iterator
End;
3605 ArrayRef<ValueDecl *> UniqueDecls, ArrayRef<unsigned> DeclsListNum,
3606 ArrayRef<unsigned> CumulativeListSizes,
3609 Components.begin()),
3610 DeclCur(UniqueDecls.begin()), NumListsCur(DeclsListNum.begin()),
3611 ListSizeCur(CumulativeListSizes.begin()),
3612 ListSizeEnd(CumulativeListSizes.end()), End(Components.end()) {
3613 assert(UniqueDecls.size() == DeclsListNum.size() &&
3614 "Inconsistent number of declarations and list sizes!");
3615 if (!DeclsListNum.empty())
3616 RemainingLists = *NumListsCur;
3622 const ValueDecl *Declaration, ArrayRef<ValueDecl *> UniqueDecls,
3623 ArrayRef<unsigned> DeclsListNum, ArrayRef<unsigned> CumulativeListSizes,
3626 CumulativeListSizes, Components) {
3630 for (; DeclCur != UniqueDecls.end(); ++DeclCur, ++NumListsCur) {
3631 if (*DeclCur == Declaration)
3634 assert(*NumListsCur > 0 &&
"No lists associated with declaration??");
3638 std::advance(ListSizeCur, *NumListsCur - 1);
3639 PrevListSize = *ListSizeCur;
3645 if (ListSizeCur == CumulativeListSizes.end()) {
3647 RemainingLists = 0u;
3653 RemainingLists = *NumListsCur;
3656 ListSizeEnd = ListSizeCur;
3657 std::advance(ListSizeEnd, RemainingLists);
3661 std::advance(this->I, PrevListSize);
3666 std::pair<const ValueDecl *, MappableExprComponentListRef>
3668 assert(ListSizeCur != ListSizeEnd &&
"Invalid iterator!");
3669 return std::make_pair(
3673 std::pair<const ValueDecl *, MappableExprComponentListRef>
3680 assert(ListSizeCur != ListSizeEnd && RemainingLists &&
3681 "Invalid iterator!");
3685 if (std::next(ListSizeCur) == ListSizeEnd) {
3689 std::advance(this->I, *ListSizeCur - PrevListSize);
3690 PrevListSize = *ListSizeCur;
3693 if (!(--RemainingLists)) {
3696 RemainingLists = *NumListsCur;
3697 assert(RemainingLists &&
"No lists in the following declaration??");
3707 llvm::iterator_range<const_component_lists_iterator>;
3711 return const_component_lists_iterator(
3712 getUniqueDeclsRef(), getDeclNumListsRef(), getComponentListSizesRef(),
3713 getComponentsRef());
3716 return const_component_lists_iterator(
3717 ArrayRef<ValueDecl *>(), ArrayRef<unsigned>(), ArrayRef<unsigned>(),
3719 getComponentsRef().end()));
3722 return {component_lists_begin(), component_lists_end()};
3727 const_component_lists_iterator
3729 return const_component_lists_iterator(
3730 VD, getUniqueDeclsRef(), getDeclNumListsRef(),
3731 getComponentListSizesRef(), getComponentsRef());
3734 return component_lists_end();
3737 return {decl_component_lists_begin(VD), decl_component_lists_end()};
3746 auto A = getUniqueDeclsRef();
3752 llvm::iterator_range<const_all_num_lists_iterator>;
3755 auto A = getDeclNumListsRef();
3761 llvm::iterator_range<const_all_lists_sizes_iterator>;
3764 auto A = getComponentListSizesRef();
3770 llvm::iterator_range<const_all_components_iterator>;
3773 auto A = getComponentsRef();
3788 OMPMapClause, Expr *, ValueDecl *, unsigned,
3789 OMPClauseMappableExprCommon::MappableComponent> {
3797 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
3798 return varlist_size();
3800 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
3801 return getUniqueDeclarationsNum();
3803 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
3804 return getUniqueDeclarationsNum() + getTotalComponentListNum();
3814 bool MapTypeIsImplicit =
false;
3817 SourceLocation MapLoc;
3839 SourceLocation MapLoc, SourceLocation StartLoc,
3840 SourceLocation LParenLoc, SourceLocation EndLoc,
3841 unsigned NumVars,
unsigned NumUniqueDeclarations,
3842 unsigned NumComponentLists,
unsigned NumComponents)
3844 NumVars, NumUniqueDeclarations,
3845 NumComponentLists, NumComponents),
3846 MapTypeModifier(MapTypeModifier), MapType(MapType),
3847 MapTypeIsImplicit(MapTypeIsImplicit), MapLoc(MapLoc) {}
3856 explicit OMPMapClause(
unsigned NumVars,
unsigned NumUniqueDeclarations,
3857 unsigned NumComponentLists,
unsigned NumComponents)
3859 OMPC_map, SourceLocation(), SourceLocation(), SourceLocation(),
3860 NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
3875 void setMapLoc(SourceLocation TLoc) { MapLoc = TLoc; }
3878 void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
3894 SourceLocation LParenLoc, SourceLocation EndLoc,
3895 ArrayRef<Expr *> Vars,
3896 ArrayRef<ValueDecl *> Declarations,
3900 SourceLocation TypeLoc);
3914 unsigned NumUniqueDeclarations,
3915 unsigned NumComponentLists,
3916 unsigned NumComponents);
3930 return MapTypeModifier;
3934 SourceLocation
getMapLoc() const LLVM_READONLY {
return MapLoc; }
3941 reinterpret_cast<Stmt **>(varlist_begin()),
3942 reinterpret_cast<Stmt **>(varlist_end()));
3946 return T->getClauseKind() == OMPC_map;
3962 SourceLocation LParenLoc;
3965 Stmt *NumTeams =
nullptr;
3970 void setNumTeams(Expr *E) { NumTeams = E; }
3983 SourceLocation StartLoc, SourceLocation LParenLoc,
3984 SourceLocation EndLoc)
3985 :
OMPClause(OMPC_num_teams, StartLoc, EndLoc), OMPClauseWithPreInit(this),
3986 LParenLoc(LParenLoc), NumTeams(E) {
3987 setPreInitStmt(HelperE, CaptureRegion);
3992 :
OMPClause(OMPC_num_teams, SourceLocation(), SourceLocation()),
3993 OMPClauseWithPreInit(this) {}
4010 return T->getClauseKind() == OMPC_num_teams;
4026 SourceLocation LParenLoc;
4029 Stmt *ThreadLimit =
nullptr;
4034 void setThreadLimit(Expr *E) { ThreadLimit = E; }
4048 SourceLocation StartLoc, SourceLocation LParenLoc,
4049 SourceLocation EndLoc)
4050 :
OMPClause(OMPC_thread_limit, StartLoc, EndLoc),
4051 OMPClauseWithPreInit(this), LParenLoc(LParenLoc), ThreadLimit(E) {
4052 setPreInitStmt(HelperE, CaptureRegion);
4057 :
OMPClause(OMPC_thread_limit, SourceLocation(), SourceLocation()),
4058 OMPClauseWithPreInit(this) {}
4075 return T->getClauseKind() == OMPC_thread_limit;
4091 SourceLocation LParenLoc;
4094 Stmt *Priority =
nullptr;
4099 void setPriority(Expr *E) { Priority = E; }
4109 SourceLocation EndLoc)
4110 :
OMPClause(OMPC_priority, StartLoc, EndLoc), LParenLoc(LParenLoc),
4115 :
OMPClause(OMPC_priority, SourceLocation(), SourceLocation()) {}
4132 return T->getClauseKind() == OMPC_priority;
4148 SourceLocation LParenLoc;
4151 Stmt *Grainsize =
nullptr;
4154 void setGrainsize(Expr *Size) { Grainsize = Size; }
4163 SourceLocation LParenLoc, SourceLocation EndLoc)
4164 :
OMPClause(OMPC_grainsize, StartLoc, EndLoc), LParenLoc(LParenLoc),
4169 :
OMPClause(OMPC_grainsize, SourceLocation(), SourceLocation()) {}
4183 return T->getClauseKind() == OMPC_grainsize;
4200 :
OMPClause(OMPC_nogroup, StartLoc, EndLoc) {}
4204 :
OMPClause(OMPC_nogroup, SourceLocation(), SourceLocation()) {}
4211 return T->getClauseKind() == OMPC_nogroup;
4227 SourceLocation LParenLoc;
4230 Stmt *NumTasks =
nullptr;
4233 void setNumTasks(Expr *Size) { NumTasks = Size; }
4242 SourceLocation LParenLoc, SourceLocation EndLoc)
4243 :
OMPClause(OMPC_num_tasks, StartLoc, EndLoc), LParenLoc(LParenLoc),
4248 :
OMPClause(OMPC_num_tasks, SourceLocation(), SourceLocation()) {}
4262 return T->getClauseKind() == OMPC_num_tasks;
4277 SourceLocation LParenLoc;
4280 Stmt *Hint =
nullptr;
4283 void setHint(Expr *H) { Hint = H; }
4293 SourceLocation EndLoc)
4294 :
OMPClause(OMPC_hint, StartLoc, EndLoc), LParenLoc(LParenLoc),
4307 Expr *
getHint()
const {
return cast_or_null<Expr>(Hint); }
4312 return T->getClauseKind() == OMPC_hint;
4328 SourceLocation LParenLoc;
4334 SourceLocation KindLoc;
4337 SourceLocation CommaLoc;
4340 Expr *ChunkSize =
nullptr;
4350 void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
4355 void setDistScheduleKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
4360 void setCommaLoc(SourceLocation Loc) { CommaLoc = Loc; }
4365 void setChunkSize(Expr *E) { ChunkSize = E; }
4380 SourceLocation KLoc, SourceLocation CommaLoc,
4381 SourceLocation EndLoc,
4383 Stmt *HelperChunkSize)
4384 :
OMPClause(OMPC_dist_schedule, StartLoc, EndLoc),
4385 OMPClauseWithPreInit(this), LParenLoc(LParenLoc), Kind(Kind),
4386 KindLoc(KLoc), CommaLoc(CommaLoc), ChunkSize(ChunkSize) {
4387 setPreInitStmt(HelperChunkSize);
4392 :
OMPClause(OMPC_dist_schedule, SourceLocation(), SourceLocation()),
4393 OMPClauseWithPreInit(this) {}
4414 return child_range(reinterpret_cast<Stmt **>(&ChunkSize),
4415 reinterpret_cast<Stmt **>(&ChunkSize) + 1);
4419 return T->getClauseKind() == OMPC_dist_schedule;
4434 SourceLocation LParenLoc;
4446 SourceLocation KindLoc;
4461 void setDefaultmapModifierLoc(SourceLocation Loc) {
4468 void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
4473 void setDefaultmapKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
4486 SourceLocation MLoc, SourceLocation KLoc,
4489 :
OMPClause(OMPC_defaultmap, StartLoc, EndLoc), LParenLoc(LParenLoc),
4490 Modifier(M), ModifierLoc(MLoc), Kind(Kind), KindLoc(KLoc) {}
4494 :
OMPClause(OMPC_defaultmap, SourceLocation(), SourceLocation()) {}
4520 return T->getClauseKind() == OMPC_defaultmap;
4534 OMPToClause, Expr *, ValueDecl *, unsigned,
4535 OMPClauseMappableExprCommon::MappableComponent> {
4550 explicit OMPToClause(SourceLocation StartLoc, SourceLocation LParenLoc,
4551 SourceLocation EndLoc,
unsigned NumVars,
4552 unsigned NumUniqueDeclarations,
4553 unsigned NumComponentLists,
unsigned NumComponents)
4555 NumUniqueDeclarations, NumComponentLists,
4565 explicit OMPToClause(
unsigned NumVars,
unsigned NumUniqueDeclarations,
4566 unsigned NumComponentLists,
unsigned NumComponents)
4568 OMPC_to, SourceLocation(), SourceLocation(), SourceLocation(),
4569 NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
4573 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
4574 return varlist_size();
4576 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
4577 return getUniqueDeclarationsNum();
4579 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
4580 return getUniqueDeclarationsNum() + getTotalComponentListNum();
4593 SourceLocation LParenLoc, SourceLocation EndLoc,
4594 ArrayRef<Expr *> Vars,
4595 ArrayRef<ValueDecl *> Declarations,
4608 unsigned NumUniqueDeclarations,
4609 unsigned NumComponentLists,
4610 unsigned NumComponents);
4613 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
4614 reinterpret_cast<Stmt **>(varlist_end()));
4618 return T->getClauseKind() == OMPC_to;
4633 OMPFromClause, Expr *, ValueDecl *, unsigned,
4634 OMPClauseMappableExprCommon::MappableComponent> {
4649 explicit OMPFromClause(SourceLocation StartLoc, SourceLocation LParenLoc,
4650 SourceLocation EndLoc,
unsigned NumVars,
4651 unsigned NumUniqueDeclarations,
4652 unsigned NumComponentLists,
unsigned NumComponents)
4654 NumVars, NumUniqueDeclarations,
4655 NumComponentLists, NumComponents) {}
4664 explicit OMPFromClause(
unsigned NumVars,
unsigned NumUniqueDeclarations,
4665 unsigned NumComponentLists,
unsigned NumComponents)
4667 OMPC_from, SourceLocation(), SourceLocation(), SourceLocation(),
4668 NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
4672 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
4673 return varlist_size();
4675 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
4676 return getUniqueDeclarationsNum();
4678 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
4679 return getUniqueDeclarationsNum() + getTotalComponentListNum();
4692 SourceLocation LParenLoc, SourceLocation EndLoc,
4693 ArrayRef<Expr *> Vars,
4694 ArrayRef<ValueDecl *> Declarations,
4707 unsigned NumUniqueDeclarations,
4708 unsigned NumComponentLists,
4709 unsigned NumComponents);
4712 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
4713 reinterpret_cast<Stmt **>(varlist_end()));
4717 return T->getClauseKind() == OMPC_from;
4732 OMPUseDevicePtrClause, Expr *, ValueDecl *, unsigned,
4733 OMPClauseMappableExprCommon::MappableComponent> {
4749 SourceLocation LParenLoc,
4750 SourceLocation EndLoc,
unsigned NumVars,
4751 unsigned NumUniqueDeclarations,
4752 unsigned NumComponentLists,
4753 unsigned NumComponents)
4755 EndLoc, NumVars, NumUniqueDeclarations,
4756 NumComponentLists, NumComponents) {}
4766 unsigned NumUniqueDeclarations,
4767 unsigned NumComponentLists,
4768 unsigned NumComponents)
4770 SourceLocation(), SourceLocation(), NumVars,
4771 NumUniqueDeclarations, NumComponentLists,
4776 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
4777 return 3 * varlist_size();
4779 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
4780 return getUniqueDeclarationsNum();
4782 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
4783 return getUniqueDeclarationsNum() + getTotalComponentListNum();
4789 void setPrivateCopies(ArrayRef<Expr *> VL);
4793 MutableArrayRef<Expr *> getPrivateCopies() {
4794 return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
4796 ArrayRef<const Expr *> getPrivateCopies()
const {
4797 return llvm::makeArrayRef(varlist_end(), varlist_size());
4803 void setInits(ArrayRef<Expr *> VL);
4807 MutableArrayRef<Expr *>
getInits() {
4808 return MutableArrayRef<Expr *>(getPrivateCopies().end(), varlist_size());
4810 ArrayRef<const Expr *>
getInits()
const {
4811 return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
4826 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
4827 SourceLocation EndLoc, ArrayRef<Expr *> Vars,
4828 ArrayRef<Expr *> PrivateVars, ArrayRef<Expr *>
Inits,
4829 ArrayRef<ValueDecl *> Declarations,
4843 unsigned NumUniqueDeclarations,
4844 unsigned NumComponentLists,
4845 unsigned NumComponents);
4851 llvm::iterator_range<private_copies_const_iterator>;
4855 getPrivateCopies().end());
4860 getPrivateCopies().end());
4877 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
4878 reinterpret_cast<Stmt **>(varlist_end()));
4882 return T->getClauseKind() == OMPC_use_device_ptr;
4897 OMPIsDevicePtrClause, Expr *, ValueDecl *, unsigned,
4898 OMPClauseMappableExprCommon::MappableComponent> {
4914 SourceLocation LParenLoc, SourceLocation EndLoc,
4916 unsigned NumUniqueDeclarations,
4917 unsigned NumComponentLists,
4918 unsigned NumComponents)
4920 EndLoc, NumVars, NumUniqueDeclarations,
4921 NumComponentLists, NumComponents) {}
4931 unsigned NumUniqueDeclarations,
4932 unsigned NumComponentLists,
4933 unsigned NumComponents)
4935 SourceLocation(), SourceLocation(), NumVars,
4936 NumUniqueDeclarations, NumComponentLists,
4941 size_t numTrailingObjects(OverloadToken<Expr *>)
const {
4942 return varlist_size();
4944 size_t numTrailingObjects(OverloadToken<ValueDecl *>)
const {
4945 return getUniqueDeclarationsNum();
4947 size_t numTrailingObjects(OverloadToken<unsigned>)
const {
4948 return getUniqueDeclarationsNum() + getTotalComponentListNum();
4961 Create(
const ASTContext &
C, SourceLocation StartLoc, SourceLocation LParenLoc,
4962 SourceLocation EndLoc, ArrayRef<Expr *> Vars,
4963 ArrayRef<ValueDecl *> Declarations,
4977 unsigned NumUniqueDeclarations,
4978 unsigned NumComponentLists,
4979 unsigned NumComponents);
4982 return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
4983 reinterpret_cast<Stmt **>(varlist_end()));
4987 return T->getClauseKind() == OMPC_is_device_ptr;
4993 #endif // LLVM_CLANG_AST_OPENMPCLAUSE_H
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.
helper_expr_range source_exprs()
OMPHintClause()
Build an empty clause.
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.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Iterator that browse the components by lists.
OMPSeqCstClause()
Build an empty clause.
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
const Expr * getChunkSize() const
Get chunk size.
MutableArrayRef< Expr * >::iterator updates_iterator
static bool classof(const OMPClause *T)
SourceLocation getCommaLoc()
Get location of ','.
helper_expr_range privates()
OpenMPDefaultmapClauseKind
OpenMP attributes for 'defaultmap' clause.
helper_expr_const_range rhs_exprs() 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
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 '('.
helper_expr_const_range rhs_exprs() const
This represents 'grainsize' clause in the '#pragma omp ...' directive.
static bool classof(const OMPClause *T)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
This represents 'if' clause in the '#pragma omp ...' directive.
OpenMPDirectiveKind getCaptureRegion()
Get capture region for the stmt in the clause.
helper_expr_const_range assignment_ops() const
OMPSIMDClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'simd' clause.
This represents 'priority' clause in the '#pragma omp ...' directive.
helper_expr_const_range lhs_exprs() const
llvm::iterator_range< private_copies_iterator > private_copies_range
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Expr * getCondition() const
Returns condition.
This represents 'update' clause in the '#pragma omp atomic' directive.
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.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Expr * getAlignment()
Returns alignment.
Expr * getNumForLoops() const
Return the number of associated for-loops.
OMPOrderedClause(Expr *Num, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'ordered' clause.
SourceLocation getSecondScheduleModifierLoc() const
Get the second modifier location.
helper_expr_range rhs_exprs()
ArrayRef< MappableComponent > getComponentsRef() const
Get the components that are in the trailing objects of the class.
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.
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)
This represents 'num_threads' clause in the '#pragma omp ...' directive.
llvm::iterator_range< const_all_num_lists_iterator > const_all_num_lists_range
This represents 'defaultmap' clause in the '#pragma omp ...' directive.
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 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.
OMPNogroupClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'nogroup' clause.
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 'safelen' clause in the '#pragma omp ...' directive.
SourceLocation getLParenLoc() const
Returns the location of '('.
MutableArrayRef< Expr * >::iterator inits_iterator
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 '('.
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.
llvm::iterator_range< helper_expr_iterator > helper_expr_range
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()
varlist_iterator varlist_begin()
ArrayRef< const Expr * >::iterator private_copies_const_iterator
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 ':'.
OMPMappableExprListClause(OpenMPClauseKind K, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, unsigned NumVars, unsigned NumUniqueDeclarations, unsigned NumComponentLists, unsigned NumComponents)
Build a clause for NumUniqueDeclarations declarations, NumComponentLists total component lists...
Defines some OpenMP-specific enums and functions.
Expr * getSafelen() const
Return safe iteration space distance.
OMPPriorityClause()
Build an empty clause.
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 '('.
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.
MutableArrayRef< Expr * >::iterator helper_expr_iterator
OMPSafelenClause()
Build an empty clause.
This represents clause 'copyprivate' in the '#pragma omp ...' directives.
OpenMPDistScheduleClauseKind
OpenMP attributes for 'dist_schedule' clause.
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()
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
helper_expr_range privates()
SourceLocation getDefaultmapKindLoc()
Get kind location.
MutableArrayRef< Expr * >::iterator private_copies_iterator
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
SourceLocation getLocStart() const
Returns the starting location of the clause.
const Stmt * getPreInitStmt() const
Get pre-initialization statement for the clause.
ValueDecl * getAssociatedDeclaration() const
static bool classof(const OMPClause *T)
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.
static bool classof(const OMPClause *T)
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.
void setPrivates(ArrayRef< Expr *> PL)
Sets the list of the copies of original linear variables.
OMPNogroupClause()
Build an empty clause.
const_component_lists_range decl_component_lists(const ValueDecl *VD) const
SourceLocation getDefaultmapModifierLoc() const
Get the modifier location.
ArrayRef< const Expr * >::iterator private_copies_const_iterator
helper_expr_const_range source_exprs() const
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.
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.
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)
OMPScheduleClause()
Build an empty clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
OMPGrainsizeClause(Expr *Size, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'grainsize' clause.
helper_expr_const_range reduction_ops() const
OMPCollapseClause(Expr *Num, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'collapse' clause.
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.
helper_expr_const_range destination_exprs() const
Expr * getSimdlen() const
Return safe iteration space distance.
friend class OMPClauseReader
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)
void setLocEnd(SourceLocation Loc)
Sets the ending location of the clause.
OMPWriteClause()
Build an empty clause.
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.
llvm::iterator_range< inits_const_iterator > inits_const_range
std::pair< const ValueDecl *, MappableExprComponentListRef > operator->() 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
llvm::iterator_range< inits_iterator > inits_range
This represents 'proc_bind' clause in the '#pragma omp ...' directive.
This represents 'capture' clause in the '#pragma omp atomic' directive.
Expr - 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.
const FunctionProtoType * T
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.
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 '('.
MutableArrayRef< Expr * >::iterator inits_iterator
OpenMPClauseKind
OpenMP clauses.
static bool classof(const OMPClause *T)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
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.
SourceLocation getColonLoc() const
Get colon location.
const_component_lists_range component_lists() const
static bool classof(const OMPClause *T)
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
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 ','.
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
OpenMPProcBindClauseKind
OpenMP attributes for 'proc_bind' clause.
MutableArrayRef< Expr * >::iterator inits_iterator
OMPThreadLimitClause()
Build an empty clause.
helper_expr_range destination_exprs()
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.
helper_expr_range lhs_exprs()
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)
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 ':'.
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 getLParenLoc()
Get location of '('.
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.
Expr * getNumTeams() const
Return NumTeams number.
This represents 'hint' clause in the '#pragma omp ...' directive.
OpenMPDependClauseKind
OpenMP attributes for 'depend' clause.
MutableArrayRef< Expr * > getInits()
varlist_const_iterator varlist_begin() const
helper_expr_range rhs_exprs()
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 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.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
OpenMPDirectiveKind
OpenMP directives.
SourceLocation getLParenLoc() const
Returns the location of '('.
This represents clause 'shared' in the '#pragma omp ...' directives.
SourceLocation getProcBindKindKwLoc() const
Returns location of clause kind.
OMPNumTeamsClause()
Build an empty clause.
llvm::iterator_range< const_child_iterator > const_child_range
Expr * getPriority()
Return Priority number.
ArrayRef< ValueDecl * > getUniqueDeclsRef() const
Get the unique declarations that are in the trailing objects of the class.
OpenMPLinearClauseKind Modifier
Modifier of 'linear' clause.
OpenMPMapClauseKind getMapType() const LLVM_READONLY
Fetches mapping kind for the clause.
static bool classof(const OMPClause *T)
const_component_lists_iterator & operator++()
This is a basic class for representing single OpenMP clause.
MutableArrayRef< Expr * >::iterator helper_expr_iterator
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
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.
OpenMPMapClauseKind getMapTypeModifier() const LLVM_READONLY
Fetches the map type modifier for the clause.
static bool classof(const OMPClause *T)
ArrayRef< MappableComponent >::iterator const_all_components_iterator
Expr * getNumForLoops() const
Return the number of associated for-loops.
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
ArrayRef< unsigned >::iterator const_all_num_lists_iterator
llvm::iterator_range< inits_const_iterator > inits_const_range
ArrayRef< const Expr * >::iterator inits_const_iterator
OMPDefaultmapClause()
Build an empty clause.
const_component_lists_iterator component_lists_begin() const
Iterators for all component lists.
SourceLocation getLocEnd() const
Returns the ending location of the clause.
void setStep(Expr *Step)
Sets the linear step for clause.
llvm::iterator_range< const_all_decls_iterator > const_all_decls_range
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)
static bool classof(const OMPClause *T)
const_all_components_range all_components() const
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 '('.
U cast(CodeGen::Address addr)
static bool classof(const OMPClause *T)
static bool classof(const OMPClause *T)
This represents clause 'linear' in the '#pragma omp ...' directives.
static bool classof(const OMPClause *T)
ArrayRef< const Expr * >::iterator inits_const_iterator
OMPDeviceClause(Expr *E, Stmt *HelperE, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'device' clause.
static bool classof(const OMPClause *T)
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.
ArrayRef< MappableExprComponentList > MappableExprComponentListsRef
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
MutableArrayRef< Expr * >::iterator private_copies_iterator
ArrayRef< unsigned > getComponentListSizesRef() const
Get the cumulative component lists sizes that are in the trailing objects of the class.
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
ArrayRef< const Expr * >::iterator inits_const_iterator
private_copies_const_range private_copies() const
inits_const_range inits() const
OMPDefaultClause(OpenMPDefaultClauseKind A, SourceLocation ALoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'default' clause with argument A ('none' or 'shared').
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 '('.
OpenMPDirectiveKind getNameModifier() const
Return directive name modifier associated with the clause.
llvm::iterator_range< privates_const_iterator > privates_const_range
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.
OMPFinalClause(Expr *Cond, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
Build 'final' clause with condition Cond.
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.
This represents 'write' clause in the '#pragma omp atomic' directive.
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)
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.
Defines the clang::SourceLocation class and associated facilities.
llvm::iterator_range< privates_iterator > privates_range
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.
OpenMPScheduleClauseKind getScheduleKind() const
Get kind of the clause.
varlist_const_range varlists() const
Privates[]
Gets the list of initial values for linear variables.
OpenMPMapClauseKind
OpenMP mapping kind for 'map' clause.
OpenMPLinearClauseKind getModifier() const
Return modifier.
SourceLocation getFirstScheduleModifierLoc() const
Get the first modifier location.
OMPClause(OpenMPClauseKind K, SourceLocation StartLoc, SourceLocation EndLoc)
helper_expr_const_range reduction_ops() const
OMPSimdlenClause()
Build an empty clause.
Expr * getThreadLimit()
Return ThreadLimit number.
OMPIfClause()
Build an empty clause.
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.
void setPreInitStmt(Stmt *S, OpenMPDirectiveKind ThisRegion=OMPD_unknown)
Set pre-initialization statement for the clause.
ArrayRef< const Expr * >::iterator privates_const_iterator
OMPUpdateClause()
Build an empty clause.
This represents 'dist_schedule' clause in the '#pragma omp ...' directive.
ArrayRef< const Expr *>::iterator varlist_const_iterator
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)
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
Expr * getChunkSize()
Get chunk size.
Expr * getNumThreads() const
Returns number of threads.
OMPReadClause(SourceLocation StartLoc, SourceLocation EndLoc)
Build 'read' clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
OMPClauseWithPostUpdate(const OMPClause *This)
static bool classof(const OMPClause *T)
const Expr * getPostUpdateExpr() const
Get post-update expression for the clause.
SourceLocation getLParenLoc() const
Returns the location of '('.
llvm::iterator_range< helper_expr_const_iterator > helper_expr_const_range
SourceLocation ColonLoc
Location of ':'.
const_child_range children() const
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
llvm::iterator_range< varlist_iterator > varlist_range
OMPOrderedClause()
Build an empty clause.
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.
ArrayRef< const Expr * >::iterator helper_expr_const_iterator
static bool classof(const OMPClause *T)