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;
853class OpenACCPrivateClause final
855 private llvm::TrailingObjects<OpenACCPrivateClause, Expr *,
856 OpenACCPrivateRecipe> {
857 friend TrailingObjects;
865 assert(VarList.size() == InitRecipes.size());
866 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
867 llvm::uninitialized_copy(InitRecipes,
868 getTrailingObjects<OpenACCPrivateRecipe>());
879 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
884 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
915class OpenACCFirstPrivateClause final
917 private llvm::TrailingObjects<OpenACCFirstPrivateClause, Expr *,
918 OpenACCFirstPrivateRecipe> {
919 friend TrailingObjects;
927 assert(VarList.size() == InitRecipes.size());
928 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
929 llvm::uninitialized_copy(InitRecipes,
930 getTrailingObjects<OpenACCFirstPrivateRecipe>());
942 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
947 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
961class OpenACCDevicePtrClause final
963 private llvm::TrailingObjects<OpenACCDevicePtrClause, Expr *> {
964 friend TrailingObjects;
970 setExprs(getTrailingObjects(VarList.size()), VarList);
982class OpenACCAttachClause final
984 private llvm::TrailingObjects<OpenACCAttachClause, Expr *> {
985 friend TrailingObjects;
991 setExprs(getTrailingObjects(VarList.size()), VarList);
1003class OpenACCDetachClause final
1005 private llvm::TrailingObjects<OpenACCDetachClause, Expr *> {
1006 friend TrailingObjects;
1012 setExprs(getTrailingObjects(VarList.size()), VarList);
1024class OpenACCDeleteClause final
1026 private llvm::TrailingObjects<OpenACCDeleteClause, Expr *> {
1027 friend TrailingObjects;
1033 setExprs(getTrailingObjects(VarList.size()), VarList);
1045class OpenACCUseDeviceClause final
1047 private llvm::TrailingObjects<OpenACCUseDeviceClause, Expr *> {
1048 friend TrailingObjects;
1053 LParenLoc, EndLoc) {
1054 setExprs(getTrailingObjects(VarList.size()), VarList);
1066class OpenACCNoCreateClause final
1068 private llvm::TrailingObjects<OpenACCNoCreateClause, Expr *> {
1069 friend TrailingObjects;
1074 LParenLoc, EndLoc) {
1075 setExprs(getTrailingObjects(VarList.size()), VarList);
1087class OpenACCPresentClause final
1089 private llvm::TrailingObjects<OpenACCPresentClause, Expr *> {
1090 friend TrailingObjects;
1095 LParenLoc, EndLoc) {
1096 setExprs(getTrailingObjects(VarList.size()), VarList);
1107class OpenACCHostClause final
1109 private llvm::TrailingObjects<OpenACCHostClause, Expr *> {
1110 friend TrailingObjects;
1116 setExprs(getTrailingObjects(VarList.size()), VarList);
1129class OpenACCDeviceClause final
1131 private llvm::TrailingObjects<OpenACCDeviceClause, Expr *> {
1132 friend TrailingObjects;
1138 setExprs(getTrailingObjects(VarList.size()), VarList);
1150class OpenACCCopyClause final
1152 private llvm::TrailingObjects<OpenACCCopyClause, Expr *> {
1153 friend TrailingObjects;
1164 "Invalid clause kind for copy-clause");
1165 setExprs(getTrailingObjects(VarList.size()), VarList);
1183class OpenACCCopyInClause final
1185 private llvm::TrailingObjects<OpenACCCopyInClause, Expr *> {
1186 friend TrailingObjects;
1197 "Invalid clause kind for copyin-clause");
1198 setExprs(getTrailingObjects(VarList.size()), VarList);
1215class OpenACCCopyOutClause final
1217 private llvm::TrailingObjects<OpenACCCopyOutClause, Expr *> {
1218 friend TrailingObjects;
1229 "Invalid clause kind for copyout-clause");
1230 setExprs(getTrailingObjects(VarList.size()), VarList);
1247class OpenACCCreateClause final
1249 private llvm::TrailingObjects<OpenACCCreateClause, Expr *> {
1250 friend TrailingObjects;
1261 "Invalid clause kind for create-clause");
1262 setExprs(getTrailingObjects(VarList.size()), VarList);
1293class OpenACCReductionClause final
1295 private llvm::TrailingObjects<OpenACCReductionClause, Expr *,
1296 OpenACCReductionRecipe> {
1297 friend TrailingObjects;
1308 assert(VarList.size() == Recipes.size());
1309 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
1310 llvm::uninitialized_copy(Recipes, getTrailingObjects<
1321 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1326 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1341class OpenACCLinkClause final
1343 private llvm::TrailingObjects<OpenACCLinkClause, Expr *> {
1344 friend TrailingObjects;
1350 setExprs(getTrailingObjects(VarList.size()), VarList);
1364class OpenACCDeviceResidentClause final
1366 private llvm::TrailingObjects<OpenACCDeviceResidentClause, Expr *> {
1367 friend TrailingObjects;
1372 LParenLoc, EndLoc) {
1373 setExprs(getTrailingObjects(VarList.size()), VarList);
1387 Impl &getDerived() {
return static_cast<Impl &
>(*this); }
1399 switch (
C->getClauseKind()) {
1400#define VISIT_CLAUSE(CLAUSE_NAME) \
1401 case OpenACCClauseKind::CLAUSE_NAME: \
1402 getDerived().Visit##CLAUSE_NAME##Clause( \
1403 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1405#define CLAUSE_ALIAS(ALIAS_NAME, CLAUSE_NAME, DEPRECATED) \
1406 case OpenACCClauseKind::ALIAS_NAME: \
1407 getDerived().Visit##CLAUSE_NAME##Clause( \
1408 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1410#include "clang/Basic/OpenACCClauses.def"
1413 llvm_unreachable(
"Clause visitor not yet implemented");
1415 llvm_unreachable(
"Invalid Clause kind");
1418#define VISIT_CLAUSE(CLAUSE_NAME) \
1419 void Visit##CLAUSE_NAME##Clause( \
1420 const OpenACC##CLAUSE_NAME##Clause &Clause) { \
1421 return getDerived().VisitClause(Clause); \
1424#include "clang/Basic/OpenACCClauses.def"
1432 void printExpr(
const Expr *E);
1439 if (Clause != List.back())
1444 : OS(OS), Policy(Policy) {}
1446#define VISIT_CLAUSE(CLAUSE_NAME) \
1447 void Visit##CLAUSE_NAME##Clause(const OpenACC##CLAUSE_NAME##Clause &Clause);
1448#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, VarDecl *T)
static OpenACCPrivateRecipe Empty()
OpenACCPrivateRecipe(VarDecl *A)
OpenACCReductionRecipe(VarDecl *A)
static OpenACCReductionRecipe Empty()
Describes how types, statements, expressions, and declarations should be printed.