76 return new (Mem)
OpenACCIfClause(BeginLoc, LParenLoc, ConditionExpr, EndLoc);
83 ConditionExpr, EndLoc) {
84 assert(ConditionExpr &&
"if clause requires condition expr");
87 "Condition expression type not scalar/dependent");
95 void *Mem =
C.Allocate(OpenACCSelfClause::totalSizeToAlloc<Expr *>(1));
106 C.Allocate(OpenACCSelfClause::totalSizeToAlloc<Expr *>(VarList.size()));
116 HasConditionExpr(
std::nullopt), NumExprs(VarList.size()) {
117 llvm::uninitialized_copy(VarList, getTrailingObjects());
125 HasConditionExpr(ConditionExpr != nullptr), NumExprs(1) {
128 "Condition expression type not scalar/dependent");
129 llvm::uninitialized_copy(
ArrayRef(ConditionExpr), getTrailingObjects());
135 assert(
false &&
"Clause children function not implemented");
137#define VISIT_CLAUSE(CLAUSE_NAME) \
138 case OpenACCClauseKind::CLAUSE_NAME: \
139 return cast<OpenACC##CLAUSE_NAME##Clause>(this)->children();
140#define CLAUSE_ALIAS(ALIAS_NAME, CLAUSE_NAME, DEPRECATED) \
141 case OpenACCClauseKind::ALIAS_NAME: \
142 return cast<OpenACC##CLAUSE_NAME##Clause>(this)->children();
144#include "clang/Basic/OpenACCClauses.def"
149OpenACCNumWorkersClause::OpenACCNumWorkersClause(
SourceLocation BeginLoc,
154 LParenLoc, IntExpr, EndLoc) {
157 "Condition expression type not scalar/dependent");
167 assert(GangKinds.size() == IntExprs.size() &&
"Mismatch exprs/kind?");
168 setExprs(getTrailingObjects<Expr *>(IntExprs.size()), IntExprs);
169 llvm::uninitialized_copy(GangKinds, getTrailingObjects<OpenACCGangKind>());
182OpenACCCollapseClause::OpenACCCollapseClause(
SourceLocation BeginLoc,
184 bool HasForce,
Expr *LoopCount,
187 LParenLoc, LoopCount, EndLoc),
188 HasForce(HasForce) {}
195 isa<ConstantExpr>(LoopCount))) &&
196 "Loop count not constant expression");
203OpenACCVectorLengthClause::OpenACCVectorLengthClause(
SourceLocation BeginLoc,
208 LParenLoc, IntExpr, EndLoc) {
211 "Condition expression type not scalar/dependent");
228 LParenLoc, IntExpr, EndLoc) {
231 "Condition expression type not scalar/dependent");
244OpenACCDeviceNumClause::OpenACCDeviceNumClause(
SourceLocation BeginLoc,
248 LParenLoc, IntExpr, EndLoc) {
251 "device_num expression type not scalar/dependent");
264OpenACCDefaultAsyncClause::OpenACCDefaultAsyncClause(
SourceLocation BeginLoc,
269 LParenLoc, IntExpr, EndLoc) {
272 "default_async expression type not scalar/dependent");
291 void *Mem =
C.Allocate(
292 OpenACCWaitClause::totalSizeToAlloc<Expr *>(QueueIdExprs.size() + 1));
294 QueueIdExprs, EndLoc);
302 void *Mem =
C.Allocate(
303 OpenACCNumGangsClause::totalSizeToAlloc<Expr *>(IntExprs.size()));
313 C.Allocate(OpenACCTileClause::totalSizeToAlloc<Expr *>(SizeExprs.size()));
322 assert(VarList.size() == InitRecipes.size());
324 C.Allocate(OpenACCPrivateClause::totalSizeToAlloc<Expr *, VarDecl *>(
325 VarList.size(), InitRecipes.size()));
334 void *Mem =
C.Allocate(
335 OpenACCFirstPrivateClause::totalSizeToAlloc<
Expr *,
337 VarList.size(), InitRecipes.size()));
339 InitRecipes, EndLoc);
348 C.Allocate(OpenACCAttachClause::totalSizeToAlloc<Expr *>(VarList.size()));
358 C.Allocate(OpenACCDetachClause::totalSizeToAlloc<Expr *>(VarList.size()));
368 C.Allocate(OpenACCDeleteClause::totalSizeToAlloc<Expr *>(VarList.size()));
377 void *Mem =
C.Allocate(
378 OpenACCUseDeviceClause::totalSizeToAlloc<Expr *>(VarList.size()));
387 void *Mem =
C.Allocate(
388 OpenACCDevicePtrClause::totalSizeToAlloc<Expr *>(VarList.size()));
397 void *Mem =
C.Allocate(
398 OpenACCNoCreateClause::totalSizeToAlloc<Expr *>(VarList.size()));
407 void *Mem =
C.Allocate(
408 OpenACCPresentClause::totalSizeToAlloc<Expr *>(VarList.size()));
418 C.Allocate(OpenACCHostClause::totalSizeToAlloc<Expr *>(VarList.size()));
428 C.Allocate(OpenACCDeviceClause::totalSizeToAlloc<Expr *>(VarList.size()));
438 C.Allocate(OpenACCCopyClause::totalSizeToAlloc<Expr *>(VarList.size()));
449 C.Allocate(OpenACCLinkClause::totalSizeToAlloc<Expr *>(VarList.size()));
456 void *Mem =
C.Allocate(
457 OpenACCDeviceResidentClause::totalSizeToAlloc<Expr *>(VarList.size()));
468 C.Allocate(OpenACCCopyInClause::totalSizeToAlloc<Expr *>(VarList.size()));
478 void *Mem =
C.Allocate(
479 OpenACCCopyOutClause::totalSizeToAlloc<Expr *>(VarList.size()));
490 C.Allocate(OpenACCCreateClause::totalSizeToAlloc<Expr *>(VarList.size()));
500 C.Allocate(OpenACCDeviceTypeClause::totalSizeToAlloc<DeviceTypeArgument>(
511 void *Mem =
C.Allocate(
512 OpenACCReductionClause::totalSizeToAlloc<Expr *, OpenACCReductionRecipe>(
513 VarList.size(), Recipes.size()));
515 VarList, Recipes, EndLoc);
552 C.Allocate(OpenACCGangClause::totalSizeToAlloc<Expr *, OpenACCGangKind>(
553 IntExprs.size(), GangKinds.size()));
562 LParenLoc, IntExpr, EndLoc) {
565 "Int expression type not scalar/dependent");
582 LParenLoc, IntExpr, EndLoc) {
585 "Int expression type not scalar/dependent");
648void OpenACCClausePrinter::printExpr(
const Expr *
E) {
653 OS <<
"default(" <<
C.getDefaultClauseKind() <<
")";
658 printExpr(
C.getConditionExpr());
665 if (
C.isConditionExprClause()) {
666 if (
const Expr *CondExpr =
C.getConditionExpr()) {
673 llvm::interleaveComma(
C.getVarList(), OS,
674 [&](
const Expr *
E) { printExpr(E); });
681 llvm::interleaveComma(
C.getIntExprs(), OS,
682 [&](
const Expr *
E) { printExpr(E); });
688 llvm::interleaveComma(
C.getSizeExprs(), OS,
689 [&](
const Expr *
E) { printExpr(E); });
693void OpenACCClausePrinter::VisitNumWorkersClause(
695 OS <<
"num_workers(";
696 printExpr(
C.getIntExpr());
700void OpenACCClausePrinter::VisitVectorLengthClause(
702 OS <<
"vector_length(";
703 printExpr(
C.getIntExpr());
707void OpenACCClausePrinter::VisitDeviceNumClause(
710 printExpr(
C.getIntExpr());
714void OpenACCClausePrinter::VisitDefaultAsyncClause(
716 OS <<
"default_async(";
717 printExpr(
C.getIntExpr());
723 if (
C.hasIntExpr()) {
725 printExpr(
C.getIntExpr());
732 llvm::interleaveComma(
C.getVarList(), OS,
733 [&](
const Expr *
E) { printExpr(E); });
737void OpenACCClausePrinter::VisitFirstPrivateClause(
739 OS <<
"firstprivate(";
740 llvm::interleaveComma(
C.getVarList(), OS,
741 [&](
const Expr *
E) { printExpr(E); });
747 llvm::interleaveComma(
C.getVarList(), OS,
748 [&](
const Expr *
E) { printExpr(E); });
754 llvm::interleaveComma(
C.getVarList(), OS,
755 [&](
const Expr *
E) { printExpr(E); });
761 llvm::interleaveComma(
C.getVarList(), OS,
762 [&](
const Expr *
E) { printExpr(E); });
766void OpenACCClausePrinter::VisitUseDeviceClause(
769 llvm::interleaveComma(
C.getVarList(), OS,
770 [&](
const Expr *
E) { printExpr(E); });
774void OpenACCClausePrinter::VisitDevicePtrClause(
777 llvm::interleaveComma(
C.getVarList(), OS,
778 [&](
const Expr *
E) { printExpr(E); });
784 llvm::interleaveComma(
C.getVarList(), OS,
785 [&](
const Expr *
E) { printExpr(E); });
791 llvm::interleaveComma(
C.getVarList(), OS,
792 [&](
const Expr *
E) { printExpr(E); });
798 llvm::interleaveComma(
C.getVarList(), OS,
799 [&](
const Expr *
E) { printExpr(E); });
805 llvm::interleaveComma(
C.getVarList(), OS,
806 [&](
const Expr *
E) { printExpr(E); });
811 OS <<
C.getClauseKind() <<
'(';
813 OS <<
C.getModifierList() <<
": ";
814 llvm::interleaveComma(
C.getVarList(), OS,
815 [&](
const Expr *
E) { printExpr(E); });
821 llvm::interleaveComma(
C.getVarList(), OS,
822 [&](
const Expr *
E) { printExpr(E); });
826void OpenACCClausePrinter::VisitDeviceResidentClause(
828 OS <<
"device_resident(";
829 llvm::interleaveComma(
C.getVarList(), OS,
830 [&](
const Expr *
E) { printExpr(E); });
835 OS <<
C.getClauseKind() <<
'(';
837 OS <<
C.getModifierList() <<
": ";
838 llvm::interleaveComma(
C.getVarList(), OS,
839 [&](
const Expr *
E) { printExpr(E); });
844 OS <<
C.getClauseKind() <<
'(';
846 OS <<
C.getModifierList() <<
": ";
847 llvm::interleaveComma(
C.getVarList(), OS,
848 [&](
const Expr *
E) { printExpr(E); });
853 OS <<
C.getClauseKind() <<
'(';
855 OS <<
C.getModifierList() <<
": ";
856 llvm::interleaveComma(
C.getVarList(), OS,
857 [&](
const Expr *
E) { printExpr(E); });
861void OpenACCClausePrinter::VisitReductionClause(
863 OS <<
"reduction(" <<
C.getReductionOp() <<
": ";
864 llvm::interleaveComma(
C.getVarList(), OS,
865 [&](
const Expr *
E) { printExpr(E); });
873 if (
C.hasDevNumExpr()) {
875 printExpr(
C.getDevNumExpr());
879 if (
C.hasQueuesTag())
882 llvm::interleaveComma(
C.getQueueIdExprs(), OS,
883 [&](
const Expr *
E) { printExpr(E); });
888void OpenACCClausePrinter::VisitDeviceTypeClause(
890 OS <<
C.getClauseKind();
892 llvm::interleaveComma(
C.getArchitectures(), OS,
894 if (Arch.getIdentifierInfo() == nullptr)
897 OS << Arch.getIdentifierInfo()->getName();
906void OpenACCClausePrinter::VisitIndependentClause(
923 printExpr(
C.getLoopCount());
930 if (
C.getNumExprs() > 0) {
933 for (
unsigned I = 0; I <
C.getNumExprs(); ++I) {
938 OS <<
C.getExpr(I).first <<
": ";
939 printExpr(
C.getExpr(I).second);
948 if (
C.hasIntExpr()) {
950 printExpr(
C.getIntExpr());
958 if (
C.hasIntExpr()) {
960 printExpr(
C.getIntExpr());
969void OpenACCClausePrinter::VisitIfPresentClause(
976 if (
C.isStringArgument())
977 OS <<
'"' <<
C.getStringArgument()->getString() <<
'"';
979 OS <<
C.getIdentifierArgument()->getName();
Defines the clang::ASTContext interface.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
This represents one expression.
bool isInstantiationDependent() const
Whether this expression is instantiation-dependent, meaning that it depends in some way on.
One of these records is kept for each identifier that is lexed.
StringRef getName() const
Return the actual identifier string.
A simple pair of identifier info and location.
static bool classof(const OpenACCClause *C)
static OpenACCAsyncClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
static OpenACCAttachClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCAutoClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc)
const IdentifierInfo * getIdentifierArgument() const
const StringLiteral * getStringArgument() const
static bool classof(const OpenACCClause *C)
static OpenACCBindClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, const IdentifierInfo *ID, SourceLocation EndLoc)
bool isStringArgument() const
Represents one of the handful of classes that has an optional/required 'condition' expression as an a...
static bool classof(const OpenACCClause *C)
Represents a clause that has one or more expressions associated with it.
static bool classof(const OpenACCClause *C)
void setExprs(MutableArrayRef< Expr * > NewExprs)
Used only for initialization, the leaf class can initialize this to trailing storage.
Represents a clause that has a list of parameters.
static bool classof(const OpenACCClause *C)
Represents one of a handful of clauses that have a single integer expression.
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
This is the base type for all OpenACC Clauses.
StmtIterator child_iterator
OpenACCClauseKind getClauseKind() const
llvm::iterator_range< child_iterator > child_range
Represents a 'collapse' clause on a 'loop' construct.
static OpenACCCollapseClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, bool HasForce, Expr *LoopCount, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCCopyClause * Create(const ASTContext &C, OpenACCClauseKind Spelling, SourceLocation BeginLoc, SourceLocation LParenLoc, OpenACCModifierKind Mods, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static OpenACCCopyInClause * Create(const ASTContext &C, OpenACCClauseKind Spelling, SourceLocation BeginLoc, SourceLocation LParenLoc, OpenACCModifierKind Mods, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCCopyOutClause * Create(const ASTContext &C, OpenACCClauseKind Spelling, SourceLocation BeginLoc, SourceLocation LParenLoc, OpenACCModifierKind Mods, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCCreateClause * Create(const ASTContext &C, OpenACCClauseKind Spelling, SourceLocation BeginLoc, SourceLocation LParenLoc, OpenACCModifierKind Mods, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCDefaultAsyncClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
A 'default' clause, has the optional 'none' or 'present' argument.
static OpenACCDefaultClause * Create(const ASTContext &C, OpenACCDefaultClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
static OpenACCDeleteClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCDetachClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static OpenACCDeviceClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static OpenACCDeviceNumClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCDevicePtrClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCDeviceResidentClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
A 'device_type' or 'dtype' clause, takes a list of either an 'asterisk' or an identifier.
static OpenACCDeviceTypeClause * Create(const ASTContext &C, OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< DeviceTypeArgument > Archs, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCFinalizeClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc)
static OpenACCFirstPrivateClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, ArrayRef< OpenACCFirstPrivateRecipe > InitRecipes, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCGangClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< OpenACCGangKind > GangKinds, ArrayRef< Expr * > IntExprs, SourceLocation EndLoc)
OpenACCGangClause(SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< OpenACCGangKind > GangKinds, ArrayRef< Expr * > IntExprs, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCHostClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
An 'if' clause, which has a required condition expression.
OpenACCIfClause(SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *ConditionExpr, SourceLocation EndLoc)
static OpenACCIfClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *ConditionExpr, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCIfPresentClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc)
static OpenACCIndependentClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc)
static OpenACCLinkClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static OpenACCNoCreateClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static OpenACCNoHostClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc)
static OpenACCNumGangsClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > IntExprs, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCNumWorkersClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static OpenACCPresentClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCPrivateClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, ArrayRef< VarDecl * > InitRecipes, SourceLocation EndLoc)
static OpenACCReductionClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, OpenACCReductionOperator Operator, ArrayRef< Expr * > VarList, ArrayRef< OpenACCReductionRecipe > Recipes, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
A 'self' clause, which has an optional condition expression, or, in the event of an 'update' directiv...
static bool classof(const OpenACCClause *C)
static OpenACCSelfClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *ConditionExpr, SourceLocation EndLoc)
static OpenACCSeqClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation EndLoc)
static OpenACCTileClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > SizeExprs, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCUseDeviceClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< Expr * > VarList, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCVectorClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
OpenACCVectorClause(SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCVectorLengthClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static OpenACCWaitClause * Create(const ASTContext &C, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *DevNumExpr, SourceLocation QueuesLoc, ArrayRef< Expr * > QueueIdExprs, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static OpenACCWorkerClause * Create(const ASTContext &Ctx, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
OpenACCWorkerClause(SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
Encodes a location in the source.
void printPretty(raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const
StringLiteral - This represents a string literal expression, e.g.
StringRef getString() const
bool isIntegerType() const
isIntegerType() does not include complex integers (a GCC extension).
bool isScalarType() const
The JSON file list parser is used to communicate input to InstallAPI.
OpenACCClauseKind
Represents the kind of an OpenACC clause.
@ Gang
'gang' clause, allowed on 'loop' and Combined constructs.
@ VectorLength
'vector_length' clause, allowed on 'parallel', 'kernels', 'parallel loop', and 'kernels loop' constru...
@ Async
'async' clause, allowed on Compute, Data, 'update', 'wait', and Combined constructs.
@ Collapse
'collapse' clause, allowed on 'loop' and Combined constructs.
@ DeviceNum
'device_num' clause, allowed on 'init', 'shutdown', and 'set' constructs.
@ Vector
'vector' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Worker
'worker' clause, allowed on 'loop', Combined, and 'routine' directives.
@ DefaultAsync
'default_async' clause, allowed on 'set' construct.
@ If
'if' clause, allowed on all the Compute Constructs, Data Constructs, Executable Constructs,...
@ Self
'self' clause, allowed on Compute and Combined Constructs, plus 'update'.
@ NumWorkers
'num_workers' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs...
bool operator==(const CallGraphNode::CallRecord &LHS, const CallGraphNode::CallRecord &RHS)