14#ifndef LLVM_CLANG_AST_OPENACCCLAUSE_H
15#define LLVM_CLANG_AST_OPENACCCLAUSE_H
20#include "llvm/ADT/STLExtras.h"
34 : Kind(K), Location(BeginLoc, EndLoc) {
36 "Begin and end location must be valid for OpenACCClause");
198 :
OpenACCClause(K, BeginLoc, EndLoc), LParenLoc(LParenLoc) {}
214 std::variant<const StringLiteral *, const IdentifierInfo *> Argument;
241 return std::holds_alternative<const StringLiteral *>(Argument);
245 return std::get<const StringLiteral *>(Argument);
249 return std::holds_alternative<const IdentifierInfo *>(Argument);
253 return std::get<const IdentifierInfo *>(Argument);
257bool operator==(
const OpenACCBindClause &LHS,
const OpenACCBindClause &RHS);
260 return !(LHS == RHS);
266class OpenACCDeviceTypeClause final
268 private llvm::TrailingObjects<OpenACCDeviceTypeClause,
269 DeviceTypeArgument> {
270 friend TrailingObjects;
279 NumArchs(Archs.size()) {
282 "Invalid clause kind for device-type");
286 }) &&
"Invalid SourceLocation for an argument");
288 assert((Archs.size() == 1 ||
291 return Arg.getIdentifierInfo() == nullptr;
293 "Only a single asterisk version is permitted, and must be the "
296 llvm::uninitialized_copy(Archs, getTrailingObjects());
310 return getTrailingObjects(NumArchs);
331 DefaultClauseKind(K) {
334 "Invalid Clause Kind");
342 return DefaultClauseKind;
355 Expr *ConditionExpr =
nullptr;
362 ConditionExpr(ConditionExpr) {}
374 reinterpret_cast<Stmt **
>(&ConditionExpr + 1));
381 reinterpret_cast<Stmt *
const *
>(&ConditionExpr),
382 reinterpret_cast<Stmt *
const *
>(&ConditionExpr + 1));
404class OpenACCSelfClause final
406 private llvm::TrailingObjects<OpenACCSelfClause, Expr *> {
407 friend TrailingObjects;
410 std::optional<bool> HasConditionExpr;
438 assert(HasConditionExpr.has_value() &&
439 "VarList Self Clause asked about condition expression");
440 return *HasConditionExpr;
444 assert(HasConditionExpr.has_value() &&
445 "VarList Self Clause asked about condition expression");
446 assert(getExprs().size() == 1 &&
447 "ConditionExpr Self Clause with too many Exprs");
448 return getExprs()[0];
452 assert(HasConditionExpr.has_value() &&
453 "VarList Self Clause asked about condition expression");
454 assert(getExprs().size() == 1 &&
455 "ConditionExpr Self Clause with too many Exprs");
456 return getExprs()[0];
460 assert(!HasConditionExpr.has_value() &&
461 "Condition Expr self clause asked about var list");
465 assert(!HasConditionExpr.has_value() &&
466 "Condition Expr self clause asked about var list");
472 reinterpret_cast<Stmt **
>(getTrailingObjects()),
473 reinterpret_cast<Stmt **
>(getTrailingObjects() + NumExprs));
502 assert(Exprs.empty() &&
"Cannot change Exprs list");
509 assert(NewStorage.size() == Exprs.size());
510 llvm::uninitialized_copy(Exprs, NewStorage.begin());
522 reinterpret_cast<Stmt **
>(Exprs.end()));
533class OpenACCWaitClause final
535 private llvm::TrailingObjects<OpenACCWaitClause, Expr *> {
536 friend TrailingObjects;
543 QueuesLoc(QueuesLoc) {
546 auto *Exprs = getTrailingObjects();
547 llvm::uninitialized_copy(
ArrayRef(DevNumExpr), Exprs);
548 llvm::uninitialized_copy(QueueIdExprs, Exprs + 1);
549 setExprs(getTrailingObjects(QueueIdExprs.size() + 1));
577class OpenACCNumGangsClause final
579 private llvm::TrailingObjects<OpenACCNumGangsClause, Expr *> {
580 friend TrailingObjects;
586 setExprs(getTrailingObjects(IntExprs.size()), IntExprs);
604class OpenACCTileClause final
606 private llvm::TrailingObjects<OpenACCTileClause, Expr *> {
607 friend TrailingObjects;
612 setExprs(getTrailingObjects(SizeExprs.size()), SizeExprs);
657 private llvm::TrailingObjects<OpenACCGangClause, Expr *, OpenACCGangKind> {
658 friend TrailingObjects;
665 return getTrailingObjects<OpenACCGangKind>()[I];
678 std::pair<OpenACCGangKind, const Expr *>
getExpr(
unsigned I)
const {
801 bool HasForce =
false;
856class OpenACCPrivateClause final
858 private llvm::TrailingObjects<OpenACCPrivateClause, Expr *,
859 OpenACCPrivateRecipe> {
860 friend TrailingObjects;
868 assert(VarList.size() == InitRecipes.size());
869 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
870 llvm::uninitialized_copy(InitRecipes,
871 getTrailingObjects<OpenACCPrivateRecipe>());
882 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
887 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
919class OpenACCFirstPrivateClause final
921 private llvm::TrailingObjects<OpenACCFirstPrivateClause, Expr *,
922 OpenACCFirstPrivateRecipe> {
923 friend TrailingObjects;
931 assert(VarList.size() == InitRecipes.size());
932 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
933 llvm::uninitialized_copy(InitRecipes,
934 getTrailingObjects<OpenACCFirstPrivateRecipe>());
946 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
951 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
965class OpenACCDevicePtrClause final
967 private llvm::TrailingObjects<OpenACCDevicePtrClause, Expr *> {
968 friend TrailingObjects;
974 setExprs(getTrailingObjects(VarList.size()), VarList);
986class OpenACCAttachClause final
988 private llvm::TrailingObjects<OpenACCAttachClause, Expr *> {
989 friend TrailingObjects;
995 setExprs(getTrailingObjects(VarList.size()), VarList);
1007class OpenACCDetachClause final
1009 private llvm::TrailingObjects<OpenACCDetachClause, Expr *> {
1010 friend TrailingObjects;
1016 setExprs(getTrailingObjects(VarList.size()), VarList);
1028class OpenACCDeleteClause final
1030 private llvm::TrailingObjects<OpenACCDeleteClause, Expr *> {
1031 friend TrailingObjects;
1037 setExprs(getTrailingObjects(VarList.size()), VarList);
1049class OpenACCUseDeviceClause final
1051 private llvm::TrailingObjects<OpenACCUseDeviceClause, Expr *> {
1052 friend TrailingObjects;
1057 LParenLoc, EndLoc) {
1058 setExprs(getTrailingObjects(VarList.size()), VarList);
1070class OpenACCNoCreateClause final
1072 private llvm::TrailingObjects<OpenACCNoCreateClause, Expr *> {
1073 friend TrailingObjects;
1078 LParenLoc, EndLoc) {
1079 setExprs(getTrailingObjects(VarList.size()), VarList);
1091class OpenACCPresentClause final
1093 private llvm::TrailingObjects<OpenACCPresentClause, Expr *> {
1094 friend TrailingObjects;
1099 LParenLoc, EndLoc) {
1100 setExprs(getTrailingObjects(VarList.size()), VarList);
1111class OpenACCHostClause final
1113 private llvm::TrailingObjects<OpenACCHostClause, Expr *> {
1114 friend TrailingObjects;
1120 setExprs(getTrailingObjects(VarList.size()), VarList);
1133class OpenACCDeviceClause final
1135 private llvm::TrailingObjects<OpenACCDeviceClause, Expr *> {
1136 friend TrailingObjects;
1142 setExprs(getTrailingObjects(VarList.size()), VarList);
1154class OpenACCCopyClause final
1156 private llvm::TrailingObjects<OpenACCCopyClause, Expr *> {
1157 friend TrailingObjects;
1168 "Invalid clause kind for copy-clause");
1169 setExprs(getTrailingObjects(VarList.size()), VarList);
1187class OpenACCCopyInClause final
1189 private llvm::TrailingObjects<OpenACCCopyInClause, Expr *> {
1190 friend TrailingObjects;
1201 "Invalid clause kind for copyin-clause");
1202 setExprs(getTrailingObjects(VarList.size()), VarList);
1219class OpenACCCopyOutClause final
1221 private llvm::TrailingObjects<OpenACCCopyOutClause, Expr *> {
1222 friend TrailingObjects;
1233 "Invalid clause kind for copyout-clause");
1234 setExprs(getTrailingObjects(VarList.size()), VarList);
1251class OpenACCCreateClause final
1253 private llvm::TrailingObjects<OpenACCCreateClause, Expr *> {
1254 friend TrailingObjects;
1265 "Invalid clause kind for create-clause");
1266 setExprs(getTrailingObjects(VarList.size()), VarList);
1300class OpenACCReductionClause final
1302 private llvm::TrailingObjects<OpenACCReductionClause, Expr *,
1303 OpenACCReductionRecipe> {
1304 friend TrailingObjects;
1315 assert(VarList.size() == Recipes.size());
1316 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
1317 llvm::uninitialized_copy(Recipes, getTrailingObjects<
1328 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1333 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1348class OpenACCLinkClause final
1350 private llvm::TrailingObjects<OpenACCLinkClause, Expr *> {
1351 friend TrailingObjects;
1357 setExprs(getTrailingObjects(VarList.size()), VarList);
1371class OpenACCDeviceResidentClause final
1373 private llvm::TrailingObjects<OpenACCDeviceResidentClause, Expr *> {
1374 friend TrailingObjects;
1379 LParenLoc, EndLoc) {
1380 setExprs(getTrailingObjects(VarList.size()), VarList);
1394 Impl &getDerived() {
return static_cast<Impl &
>(*this); }
1406 switch (
C->getClauseKind()) {
1407#define VISIT_CLAUSE(CLAUSE_NAME) \
1408 case OpenACCClauseKind::CLAUSE_NAME: \
1409 getDerived().Visit##CLAUSE_NAME##Clause( \
1410 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1412#define CLAUSE_ALIAS(ALIAS_NAME, CLAUSE_NAME, DEPRECATED) \
1413 case OpenACCClauseKind::ALIAS_NAME: \
1414 getDerived().Visit##CLAUSE_NAME##Clause( \
1415 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1417#include "clang/Basic/OpenACCClauses.def"
1420 llvm_unreachable(
"Clause visitor not yet implemented");
1422 llvm_unreachable(
"Invalid Clause kind");
1425#define VISIT_CLAUSE(CLAUSE_NAME) \
1426 void Visit##CLAUSE_NAME##Clause( \
1427 const OpenACC##CLAUSE_NAME##Clause &Clause) { \
1428 return getDerived().VisitClause(Clause); \
1431#include "clang/Basic/OpenACCClauses.def"
1439 void printExpr(
const Expr *E);
1446 if (Clause != List.back())
1451 : OS(OS), Policy(Policy) {}
1453#define VISIT_CLAUSE(CLAUSE_NAME) \
1454 void Visit##CLAUSE_NAME##Clause(const OpenACC##CLAUSE_NAME##Clause &Clause);
1455#include "clang/Basic/OpenACCClauses.def"
Defines the clang::ASTContext interface.
Defines some OpenACC-specific enums and functions.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
This represents one expression.
One of these records is kept for each identifier that is lexed.
A simple pair of identifier info and location.
SourceLocation getLoc() const
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
const_child_range children() const
OpenACCAutoClause(SourceLocation BeginLoc, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
const IdentifierInfo * getIdentifierArgument() const
const StringLiteral * getStringArgument() const
static bool classof(const OpenACCClause *C)
bool isIdentifierArgument() const
bool isStringArgument() const
OpenACCClausePrinter(raw_ostream &OS, const PrintingPolicy &Policy)
void VisitClauseList(ArrayRef< const OpenACCClause * > List)
void Visit(const OpenACCClause *C)
void VisitClauseList(ArrayRef< const OpenACCClause * > List)
static bool classof(const OpenACCClause *C)
bool hasConditionExpr() const
const Expr * getConditionExpr() const
Expr * getConditionExpr()
OpenACCClauseWithCondition(OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *ConditionExpr, SourceLocation EndLoc)
const_child_range children() const
void setExprs(MutableArrayRef< Expr * > NewStorage, ArrayRef< Expr * > Exprs)
Used only for initialization, the leaf class can initialize this to trailing storage,...
static bool classof(const OpenACCClause *C)
OpenACCClauseWithExprs(OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
ArrayRef< Expr * > getExprs() const
Gets the entire list of expressions, but leave it to the individual clauses to expose this how they'd...
const_child_range children() const
void setExprs(MutableArrayRef< Expr * > NewExprs)
Used only for initialization, the leaf class can initialize this to trailing storage.
SourceLocation getLParenLoc() const
static bool classof(const OpenACCClause *C)
OpenACCClauseWithParams(OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
const_child_range children() const
OpenACCClauseWithSingleIntExpr(OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
const Expr * getIntExpr() const
static bool classof(const OpenACCClause *C)
OpenACCClauseWithVarList(OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
ArrayRef< Expr * > getVarList()
ArrayRef< Expr * > getVarList() const
This is the base type for all OpenACC Clauses.
StmtIterator child_iterator
OpenACCClauseKind getClauseKind() const
SourceLocation getBeginLoc() const
SourceRange getSourceRange() const
const_child_range children() const
static bool classof(const OpenACCClause *)
llvm::iterator_range< child_iterator > child_range
ConstStmtIterator const_child_iterator
OpenACCClause(OpenACCClauseKind K, SourceLocation BeginLoc, SourceLocation EndLoc)
virtual ~OpenACCClause()=default
llvm::iterator_range< const_child_iterator > const_child_range
SourceLocation getEndLoc() const
Represents a 'collapse' clause on a 'loop' construct.
const Expr * getLoopCount() const
static bool classof(const OpenACCClause *C)
OpenACCModifierKind getModifierList() const
static bool classof(const OpenACCClause *C)
OpenACCModifierKind getModifierList() const
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
OpenACCModifierKind getModifierList() const
static bool classof(const OpenACCClause *C)
OpenACCModifierKind getModifierList() const
static bool classof(const OpenACCClause *C)
A 'default' clause, has the optional 'none' or 'present' argument.
OpenACCDefaultClause(OpenACCDefaultClauseKind K, SourceLocation BeginLoc, SourceLocation LParenLoc, SourceLocation EndLoc)
friend class ASTWriterStmt
OpenACCDefaultClauseKind getDefaultClauseKind() const
static bool classof(const OpenACCClause *C)
friend class ASTReaderStmt
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
A 'device_type' or 'dtype' clause, takes a list of either an 'asterisk' or an identifier.
ArrayRef< DeviceTypeArgument > getArchitectures() const
static bool classof(const OpenACCClause *C)
OpenACCFinalizeClause(SourceLocation BeginLoc, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
const_child_range children() const
size_t numTrailingObjects(OverloadToken< Expr * >) const
ArrayRef< OpenACCFirstPrivateRecipe > getInitRecipes() const
ArrayRef< OpenACCFirstPrivateRecipe > getInitRecipes()
static bool classof(const OpenACCClause *C)
OpenACCGangKind getGangKind(unsigned I) const
bool hasExprOfKind(OpenACCGangKind GK) const
OpenACCGangClause(SourceLocation BeginLoc, SourceLocation LParenLoc, ArrayRef< OpenACCGangKind > GangKinds, ArrayRef< Expr * > IntExprs, SourceLocation EndLoc)
size_t numTrailingObjects(OverloadToken< Expr * >) const
static bool classof(const OpenACCClause *C)
unsigned getNumExprs() const
std::pair< OpenACCGangKind, const Expr * > getExpr(unsigned I) const
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 bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
const_child_range children() const
OpenACCIfPresentClause(SourceLocation BeginLoc, SourceLocation EndLoc)
OpenACCIndependentClause(SourceLocation BeginLoc, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
const_child_range children() const
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
OpenACCNoHostClause(SourceLocation BeginLoc, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
const_child_range children() const
ArrayRef< Expr * > getIntExprs() const
static bool classof(const OpenACCClause *C)
ArrayRef< Expr * > getIntExprs()
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
size_t numTrailingObjects(OverloadToken< Expr * >) const
ArrayRef< OpenACCPrivateRecipe > getInitRecipes() const
ArrayRef< OpenACCPrivateRecipe > getInitRecipes()
ArrayRef< OpenACCReductionRecipe > getRecipes() const
size_t numTrailingObjects(OverloadToken< Expr * >) const
ArrayRef< OpenACCReductionRecipe > getRecipes()
static bool classof(const OpenACCClause *C)
OpenACCReductionOperator getReductionOp() const
A 'self' clause, which has an optional condition expression, or, in the event of an 'update' directiv...
Expr * getConditionExpr()
const Expr * getConditionExpr() const
bool isConditionExprClause() const
const_child_range children() const
static bool classof(const OpenACCClause *C)
ArrayRef< Expr * > getVarList()
bool hasConditionExpr() const
bool isEmptySelfClause() const
bool isVarListClause() const
ArrayRef< Expr * > getVarList() const
static bool classof(const OpenACCClause *C)
const_child_range children() const
OpenACCSeqClause(SourceLocation BeginLoc, SourceLocation EndLoc)
ArrayRef< Expr * > getSizeExprs()
ArrayRef< Expr * > getSizeExprs() const
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
OpenACCVectorClause(SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
ArrayRef< Expr * > getQueueIdExprs()
Expr * getDevNumExpr() const
bool hasDevNumExpr() const
ArrayRef< Expr * > getQueueIdExprs() const
bool hasQueuesTag() const
SourceLocation getQueuesLoc() const
static bool classof(const OpenACCClause *C)
static bool classof(const OpenACCClause *C)
OpenACCWorkerClause(SourceLocation BeginLoc, SourceLocation LParenLoc, Expr *IntExpr, SourceLocation EndLoc)
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
A trivial tuple used to represent a source range.
Stmt - This represents one statement.
StringLiteral - This represents a string literal expression, e.g.
Represents a variable declaration or definition.
The JSON file list parser is used to communicate input to InstallAPI.
OpenACCClauseKind
Represents the kind of an OpenACC clause.
@ Auto
'auto' clause, allowed on 'loop' directives.
@ Bind
'bind' clause, allowed on routine constructs.
@ Gang
'gang' clause, allowed on 'loop' and Combined constructs.
@ Wait
'wait' clause, allowed on Compute, Data, 'update', and Combined constructs.
@ DevicePtr
'deviceptr' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ PCopyOut
'copyout' clause alias 'pcopyout'. Preserved for diagnostic purposes.
@ 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.
@ PresentOrCreate
'create' clause alias 'present_or_create'.
@ Collapse
'collapse' clause, allowed on 'loop' and Combined constructs.
@ NoHost
'nohost' clause, allowed on 'routine' directives.
@ PresentOrCopy
'copy' clause alias 'present_or_copy'. Preserved for diagnostic purposes.
@ DeviceNum
'device_num' clause, allowed on 'init', 'shutdown', and 'set' constructs.
@ Private
'private' clause, allowed on 'parallel', 'serial', 'loop', 'parallel loop', and 'serial loop' constru...
@ Vector
'vector' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Copy
'copy' clause, allowed on Compute and Combined Constructs, plus 'data' and 'declare'.
@ Worker
'worker' clause, allowed on 'loop', Combined, and 'routine' directives.
@ Create
'create' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
@ DeviceType
'device_type' clause, allowed on Compute, 'data', 'init', 'shutdown', 'set', update',...
@ DefaultAsync
'default_async' clause, allowed on 'set' construct.
@ Attach
'attach' clause, allowed on Compute and Combined constructs, plus 'data' and 'enter data'.
@ NumGangs
'num_gangs' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs.
@ If
'if' clause, allowed on all the Compute Constructs, Data Constructs, Executable Constructs,...
@ Default
'default' clause, allowed on parallel, serial, kernel (and compound) constructs.
@ UseDevice
'use_device' clause, allowed on 'host_data' construct.
@ NoCreate
'no_create' clause, allowed on allowed on Compute and Combined constructs, plus 'data'.
@ PresentOrCopyOut
'copyout' clause alias 'present_or_copyout'.
@ Link
'link' clause, allowed on 'declare' construct.
@ Reduction
'reduction' clause, allowed on Parallel, Serial, Loop, and the combined constructs.
@ Self
'self' clause, allowed on Compute and Combined Constructs, plus 'update'.
@ CopyOut
'copyout' clause, allowed on Compute and Combined constructs, plus 'data', 'exit data',...
@ Seq
'seq' clause, allowed on 'loop' and 'routine' directives.
@ FirstPrivate
'firstprivate' clause, allowed on 'parallel', 'serial', 'parallel loop', and 'serial loop' constructs...
@ Host
'host' clause, allowed on 'update' construct.
@ PCopy
'copy' clause alias 'pcopy'. Preserved for diagnostic purposes.
@ Tile
'tile' clause, allowed on 'loop' and Combined constructs.
@ PCopyIn
'copyin' clause alias 'pcopyin'. Preserved for diagnostic purposes.
@ DeviceResident
'device_resident' clause, allowed on the 'declare' construct.
@ PCreate
'create' clause alias 'pcreate'. Preserved for diagnostic purposes.
@ Present
'present' clause, allowed on Compute and Combined constructs, plus 'data' and 'declare'.
@ DType
'dtype' clause, an alias for 'device_type', stored separately for diagnostic purposes.
@ CopyIn
'copyin' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
@ Device
'device' clause, allowed on the 'update' construct.
@ Independent
'independent' clause, allowed on 'loop' directives.
@ NumWorkers
'num_workers' clause, allowed on 'parallel', 'kernels', parallel loop', and 'kernels loop' constructs...
@ IfPresent
'if_present' clause, allowed on 'host_data' and 'update' directives.
@ Detach
'detach' clause, allowed on the 'exit data' construct.
@ Delete
'delete' clause, allowed on the 'exit data' construct.
@ PresentOrCopyIn
'copyin' clause alias 'present_or_copyin'.
@ Finalize
'finalize' clause, allowed on 'exit data' directive.
bool operator==(const CallGraphNode::CallRecord &LHS, const CallGraphNode::CallRecord &RHS)
@ Present
'present' option.
IdentifierLoc DeviceTypeArgument
const FunctionProtoType * T
bool operator!=(CanQual< T > x, CanQual< U > y)
static OpenACCFirstPrivateRecipe Empty()
VarDecl * InitFromTemporary
OpenACCFirstPrivateRecipe(VarDecl *A, Expr *I, VarDecl *T)
static OpenACCPrivateRecipe Empty()
OpenACCPrivateRecipe(VarDecl *A, Expr *I)
static OpenACCReductionRecipe Empty()
OpenACCReductionRecipe(VarDecl *A, Expr *I)
Describes how types, statements, expressions, and declarations should be printed.