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");
197 :
OpenACCClause(K, BeginLoc, EndLoc), LParenLoc(LParenLoc) {}
213 std::variant<const StringLiteral *, const IdentifierInfo *> Argument;
240 return std::holds_alternative<const StringLiteral *>(Argument);
244 return std::get<const StringLiteral *>(Argument);
248 return std::holds_alternative<const IdentifierInfo *>(Argument);
252 return std::get<const IdentifierInfo *>(Argument);
256bool operator==(
const OpenACCBindClause &LHS,
const OpenACCBindClause &RHS);
259 return !(LHS == RHS);
265class OpenACCDeviceTypeClause final
267 private llvm::TrailingObjects<OpenACCDeviceTypeClause,
268 DeviceTypeArgument> {
269 friend TrailingObjects;
278 NumArchs(Archs.size()) {
281 "Invalid clause kind for device-type");
285 }) &&
"Invalid SourceLocation for an argument");
287 assert((Archs.size() == 1 ||
290 return Arg.getIdentifierInfo() == nullptr;
292 "Only a single asterisk version is permitted, and must be the "
295 llvm::uninitialized_copy(Archs, getTrailingObjects());
309 return getTrailingObjects(NumArchs);
327 DefaultClauseKind(K) {
330 "Invalid Clause Kind");
338 return DefaultClauseKind;
351 Expr *ConditionExpr =
nullptr;
358 ConditionExpr(ConditionExpr) {}
370 reinterpret_cast<Stmt **
>(&ConditionExpr + 1));
377 reinterpret_cast<Stmt *
const *
>(&ConditionExpr),
378 reinterpret_cast<Stmt *
const *
>(&ConditionExpr + 1));
400class OpenACCSelfClause final
402 private llvm::TrailingObjects<OpenACCSelfClause, Expr *> {
403 friend TrailingObjects;
406 std::optional<bool> HasConditionExpr;
434 assert(HasConditionExpr.has_value() &&
435 "VarList Self Clause asked about condition expression");
436 return *HasConditionExpr;
440 assert(HasConditionExpr.has_value() &&
441 "VarList Self Clause asked about condition expression");
442 assert(getExprs().size() == 1 &&
443 "ConditionExpr Self Clause with too many Exprs");
444 return getExprs()[0];
448 assert(HasConditionExpr.has_value() &&
449 "VarList Self Clause asked about condition expression");
450 assert(getExprs().size() == 1 &&
451 "ConditionExpr Self Clause with too many Exprs");
452 return getExprs()[0];
456 assert(!HasConditionExpr.has_value() &&
457 "Condition Expr self clause asked about var list");
463 reinterpret_cast<Stmt **
>(getTrailingObjects()),
464 reinterpret_cast<Stmt **
>(getTrailingObjects() + NumExprs));
468 return const_cast<OpenACCSelfClause *
>(
this)->
children();
492 assert(Exprs.empty() &&
"Cannot change Exprs list");
499 assert(NewStorage.size() == Exprs.size());
500 llvm::uninitialized_copy(Exprs, NewStorage.begin());
512 reinterpret_cast<Stmt **
>(Exprs.end()));
521class OpenACCWaitClause final
523 private llvm::TrailingObjects<OpenACCWaitClause, Expr *> {
524 friend TrailingObjects;
531 QueuesLoc(QueuesLoc) {
534 auto *Exprs = getTrailingObjects();
535 llvm::uninitialized_copy(
ArrayRef(DevNumExpr), Exprs);
536 llvm::uninitialized_copy(QueueIdExprs, Exprs + 1);
537 setExprs(getTrailingObjects(QueueIdExprs.size() + 1));
562class OpenACCNumGangsClause final
564 private llvm::TrailingObjects<OpenACCNumGangsClause, Expr *> {
565 friend TrailingObjects;
571 setExprs(getTrailingObjects(IntExprs.size()), IntExprs);
587class OpenACCTileClause final
589 private llvm::TrailingObjects<OpenACCTileClause, Expr *> {
590 friend TrailingObjects;
595 setExprs(getTrailingObjects(SizeExprs.size()), SizeExprs);
639 private llvm::TrailingObjects<OpenACCGangClause, Expr *, OpenACCGangKind> {
640 friend TrailingObjects;
647 return getTrailingObjects<OpenACCGangKind>()[I];
660 std::pair<OpenACCGangKind, const Expr *>
getExpr(
unsigned I)
const {
783 bool HasForce =
false;
834class OpenACCPrivateClause final
836 private llvm::TrailingObjects<OpenACCPrivateClause, Expr *,
837 OpenACCPrivateRecipe> {
838 friend TrailingObjects;
846 assert(VarList.size() == InitRecipes.size());
847 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
848 llvm::uninitialized_copy(InitRecipes,
849 getTrailingObjects<OpenACCPrivateRecipe>());
860 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
891class OpenACCFirstPrivateClause final
893 private llvm::TrailingObjects<OpenACCFirstPrivateClause, Expr *,
894 OpenACCFirstPrivateRecipe> {
895 friend TrailingObjects;
903 assert(VarList.size() == InitRecipes.size());
904 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
905 llvm::uninitialized_copy(InitRecipes,
906 getTrailingObjects<OpenACCFirstPrivateRecipe>());
918 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
932class OpenACCDevicePtrClause final
934 private llvm::TrailingObjects<OpenACCDevicePtrClause, Expr *> {
935 friend TrailingObjects;
941 setExprs(getTrailingObjects(VarList.size()), VarList);
953class OpenACCAttachClause final
955 private llvm::TrailingObjects<OpenACCAttachClause, Expr *> {
956 friend TrailingObjects;
962 setExprs(getTrailingObjects(VarList.size()), VarList);
974class OpenACCDetachClause final
976 private llvm::TrailingObjects<OpenACCDetachClause, Expr *> {
977 friend TrailingObjects;
983 setExprs(getTrailingObjects(VarList.size()), VarList);
995class OpenACCDeleteClause final
997 private llvm::TrailingObjects<OpenACCDeleteClause, Expr *> {
998 friend TrailingObjects;
1004 setExprs(getTrailingObjects(VarList.size()), VarList);
1016class OpenACCUseDeviceClause final
1018 private llvm::TrailingObjects<OpenACCUseDeviceClause, Expr *> {
1019 friend TrailingObjects;
1024 LParenLoc, EndLoc) {
1025 setExprs(getTrailingObjects(VarList.size()), VarList);
1037class OpenACCNoCreateClause final
1039 private llvm::TrailingObjects<OpenACCNoCreateClause, Expr *> {
1040 friend TrailingObjects;
1045 LParenLoc, EndLoc) {
1046 setExprs(getTrailingObjects(VarList.size()), VarList);
1058class OpenACCPresentClause final
1060 private llvm::TrailingObjects<OpenACCPresentClause, Expr *> {
1061 friend TrailingObjects;
1066 LParenLoc, EndLoc) {
1067 setExprs(getTrailingObjects(VarList.size()), VarList);
1078class OpenACCHostClause final
1080 private llvm::TrailingObjects<OpenACCHostClause, Expr *> {
1081 friend TrailingObjects;
1087 setExprs(getTrailingObjects(VarList.size()), VarList);
1100class OpenACCDeviceClause final
1102 private llvm::TrailingObjects<OpenACCDeviceClause, Expr *> {
1103 friend TrailingObjects;
1109 setExprs(getTrailingObjects(VarList.size()), VarList);
1121class OpenACCCopyClause final
1123 private llvm::TrailingObjects<OpenACCCopyClause, Expr *> {
1124 friend TrailingObjects;
1135 "Invalid clause kind for copy-clause");
1136 setExprs(getTrailingObjects(VarList.size()), VarList);
1154class OpenACCCopyInClause final
1156 private llvm::TrailingObjects<OpenACCCopyInClause, Expr *> {
1157 friend TrailingObjects;
1168 "Invalid clause kind for copyin-clause");
1169 setExprs(getTrailingObjects(VarList.size()), VarList);
1186class OpenACCCopyOutClause final
1188 private llvm::TrailingObjects<OpenACCCopyOutClause, Expr *> {
1189 friend TrailingObjects;
1200 "Invalid clause kind for copyout-clause");
1201 setExprs(getTrailingObjects(VarList.size()), VarList);
1218class OpenACCCreateClause final
1220 private llvm::TrailingObjects<OpenACCCreateClause, Expr *> {
1221 friend TrailingObjects;
1232 "Invalid clause kind for create-clause");
1233 setExprs(getTrailingObjects(VarList.size()), VarList);
1252struct OpenACCReductionRecipe {
1300class OpenACCReductionClause final
1302 private llvm::TrailingObjects<OpenACCReductionClause, Expr *,
1303 OpenACCReductionRecipe,
1304 OpenACCReductionRecipe::CombinerRecipe> {
1305 friend TrailingObjects;
1316 assert(VarList.size() == Recipes.size());
1317 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
1323 getTrailingObjects<OpenACCReductionRecipe::CombinerRecipe>();
1324 for (
const auto &[Idx, R] : llvm::enumerate(Recipes)) {
1328 NewCombiners{CurCombinerLoc, R.CombinerRecipes.size()};
1329 CurCombinerLoc += R.CombinerRecipes.size();
1331 llvm::uninitialized_copy(R.CombinerRecipes, NewCombiners.begin());
1334 new (&getTrailingObjects<OpenACCReductionRecipe>()[Idx])
1346 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1365class OpenACCLinkClause final
1367 private llvm::TrailingObjects<OpenACCLinkClause, Expr *> {
1368 friend TrailingObjects;
1374 setExprs(getTrailingObjects(VarList.size()), VarList);
1388class OpenACCDeviceResidentClause final
1390 private llvm::TrailingObjects<OpenACCDeviceResidentClause, Expr *> {
1391 friend TrailingObjects;
1396 LParenLoc, EndLoc) {
1397 setExprs(getTrailingObjects(VarList.size()), VarList);
1411 Impl &getDerived() {
return static_cast<Impl &
>(*this); }
1423 switch (
C->getClauseKind()) {
1424#define VISIT_CLAUSE(CLAUSE_NAME) \
1425 case OpenACCClauseKind::CLAUSE_NAME: \
1426 getDerived().Visit##CLAUSE_NAME##Clause( \
1427 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1429#define CLAUSE_ALIAS(ALIAS_NAME, CLAUSE_NAME, DEPRECATED) \
1430 case OpenACCClauseKind::ALIAS_NAME: \
1431 getDerived().Visit##CLAUSE_NAME##Clause( \
1432 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1434#include "clang/Basic/OpenACCClauses.def"
1437 llvm_unreachable(
"Clause visitor not yet implemented");
1439 llvm_unreachable(
"Invalid Clause kind");
1442#define VISIT_CLAUSE(CLAUSE_NAME) \
1443 void Visit##CLAUSE_NAME##Clause( \
1444 const OpenACC##CLAUSE_NAME##Clause &Clause) { \
1445 return getDerived().VisitClause(Clause); \
1448#include "clang/Basic/OpenACCClauses.def"
1456 void printExpr(
const Expr *E);
1463 if (Clause != List.back())
1468 : OS(OS), Policy(Policy) {}
1470#define VISIT_CLAUSE(CLAUSE_NAME) \
1471 void Visit##CLAUSE_NAME##Clause(const OpenACC##CLAUSE_NAME##Clause &Clause);
1472#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() 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)
OpenACCDefaultClauseKind getDefaultClauseKind() const
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)
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
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)
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< OpenACCReductionRecipe > getRecipes() const
size_t numTrailingObjects(OverloadToken< OpenACCReductionRecipe >) const
size_t numTrailingObjects(OverloadToken< Expr * >) const
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)
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() 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)
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.
Top level wrappers for InstallAPI frontend operations.
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
@ Default
Set to the current date and time.
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)
OpenACCReductionRecipeWithStorage(VarDecl *A, llvm::ArrayRef< OpenACCReductionRecipe::CombinerRecipe > Combiners)
llvm::SmallVector< OpenACCReductionRecipe::CombinerRecipe, 1 > CombinerRecipes
static OpenACCReductionRecipeWithStorage Empty()
llvm::ArrayRef< CombinerRecipe > CombinerRecipes
friend class OpenACCReductionClause
Describes how types, statements, expressions, and declarations should be printed.