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);
330 DefaultClauseKind(K) {
333 "Invalid Clause Kind");
341 return DefaultClauseKind;
354 Expr *ConditionExpr =
nullptr;
361 ConditionExpr(ConditionExpr) {}
373 reinterpret_cast<Stmt **
>(&ConditionExpr + 1));
380 reinterpret_cast<Stmt *
const *
>(&ConditionExpr),
381 reinterpret_cast<Stmt *
const *
>(&ConditionExpr + 1));
403class OpenACCSelfClause final
405 private llvm::TrailingObjects<OpenACCSelfClause, Expr *> {
406 friend TrailingObjects;
409 std::optional<bool> HasConditionExpr;
437 assert(HasConditionExpr.has_value() &&
438 "VarList Self Clause asked about condition expression");
439 return *HasConditionExpr;
443 assert(HasConditionExpr.has_value() &&
444 "VarList Self Clause asked about condition expression");
445 assert(getExprs().size() == 1 &&
446 "ConditionExpr Self Clause with too many Exprs");
447 return getExprs()[0];
451 assert(HasConditionExpr.has_value() &&
452 "VarList Self Clause asked about condition expression");
453 assert(getExprs().size() == 1 &&
454 "ConditionExpr Self Clause with too many Exprs");
455 return getExprs()[0];
459 assert(!HasConditionExpr.has_value() &&
460 "Condition Expr self clause asked about var list");
466 reinterpret_cast<Stmt **
>(getTrailingObjects()),
467 reinterpret_cast<Stmt **
>(getTrailingObjects() + NumExprs));
471 return const_cast<OpenACCSelfClause *
>(
this)->
children();
495 assert(Exprs.empty() &&
"Cannot change Exprs list");
502 assert(NewStorage.size() == Exprs.size());
503 llvm::uninitialized_copy(Exprs, NewStorage.begin());
515 reinterpret_cast<Stmt **
>(Exprs.end()));
524class OpenACCWaitClause final
526 private llvm::TrailingObjects<OpenACCWaitClause, Expr *> {
527 friend TrailingObjects;
534 QueuesLoc(QueuesLoc) {
537 auto *Exprs = getTrailingObjects();
538 llvm::uninitialized_copy(
ArrayRef(DevNumExpr), Exprs);
539 llvm::uninitialized_copy(QueueIdExprs, Exprs + 1);
540 setExprs(getTrailingObjects(QueueIdExprs.size() + 1));
565class OpenACCNumGangsClause final
567 private llvm::TrailingObjects<OpenACCNumGangsClause, Expr *> {
568 friend TrailingObjects;
574 setExprs(getTrailingObjects(IntExprs.size()), IntExprs);
590class OpenACCTileClause final
592 private llvm::TrailingObjects<OpenACCTileClause, Expr *> {
593 friend TrailingObjects;
598 setExprs(getTrailingObjects(SizeExprs.size()), SizeExprs);
642 private llvm::TrailingObjects<OpenACCGangClause, Expr *, OpenACCGangKind> {
643 friend TrailingObjects;
650 return getTrailingObjects<OpenACCGangKind>()[I];
663 std::pair<OpenACCGangKind, const Expr *>
getExpr(
unsigned I)
const {
786 bool HasForce =
false;
837class OpenACCPrivateClause final
839 private llvm::TrailingObjects<OpenACCPrivateClause, Expr *,
840 OpenACCPrivateRecipe> {
841 friend TrailingObjects;
849 assert(VarList.size() == InitRecipes.size());
850 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
851 llvm::uninitialized_copy(InitRecipes,
852 getTrailingObjects<OpenACCPrivateRecipe>());
863 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
894class OpenACCFirstPrivateClause final
896 private llvm::TrailingObjects<OpenACCFirstPrivateClause, Expr *,
897 OpenACCFirstPrivateRecipe> {
898 friend TrailingObjects;
906 assert(VarList.size() == InitRecipes.size());
907 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
908 llvm::uninitialized_copy(InitRecipes,
909 getTrailingObjects<OpenACCFirstPrivateRecipe>());
921 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
935class OpenACCDevicePtrClause final
937 private llvm::TrailingObjects<OpenACCDevicePtrClause, Expr *> {
938 friend TrailingObjects;
944 setExprs(getTrailingObjects(VarList.size()), VarList);
956class OpenACCAttachClause final
958 private llvm::TrailingObjects<OpenACCAttachClause, Expr *> {
959 friend TrailingObjects;
965 setExprs(getTrailingObjects(VarList.size()), VarList);
977class OpenACCDetachClause final
979 private llvm::TrailingObjects<OpenACCDetachClause, Expr *> {
980 friend TrailingObjects;
986 setExprs(getTrailingObjects(VarList.size()), VarList);
998class OpenACCDeleteClause final
1000 private llvm::TrailingObjects<OpenACCDeleteClause, Expr *> {
1001 friend TrailingObjects;
1007 setExprs(getTrailingObjects(VarList.size()), VarList);
1019class OpenACCUseDeviceClause final
1021 private llvm::TrailingObjects<OpenACCUseDeviceClause, Expr *> {
1022 friend TrailingObjects;
1027 LParenLoc, EndLoc) {
1028 setExprs(getTrailingObjects(VarList.size()), VarList);
1040class OpenACCNoCreateClause final
1042 private llvm::TrailingObjects<OpenACCNoCreateClause, Expr *> {
1043 friend TrailingObjects;
1048 LParenLoc, EndLoc) {
1049 setExprs(getTrailingObjects(VarList.size()), VarList);
1061class OpenACCPresentClause final
1063 private llvm::TrailingObjects<OpenACCPresentClause, Expr *> {
1064 friend TrailingObjects;
1069 LParenLoc, EndLoc) {
1070 setExprs(getTrailingObjects(VarList.size()), VarList);
1081class OpenACCHostClause final
1083 private llvm::TrailingObjects<OpenACCHostClause, Expr *> {
1084 friend TrailingObjects;
1090 setExprs(getTrailingObjects(VarList.size()), VarList);
1103class OpenACCDeviceClause final
1105 private llvm::TrailingObjects<OpenACCDeviceClause, Expr *> {
1106 friend TrailingObjects;
1112 setExprs(getTrailingObjects(VarList.size()), VarList);
1124class OpenACCCopyClause final
1126 private llvm::TrailingObjects<OpenACCCopyClause, Expr *> {
1127 friend TrailingObjects;
1138 "Invalid clause kind for copy-clause");
1139 setExprs(getTrailingObjects(VarList.size()), VarList);
1157class OpenACCCopyInClause final
1159 private llvm::TrailingObjects<OpenACCCopyInClause, Expr *> {
1160 friend TrailingObjects;
1171 "Invalid clause kind for copyin-clause");
1172 setExprs(getTrailingObjects(VarList.size()), VarList);
1189class OpenACCCopyOutClause final
1191 private llvm::TrailingObjects<OpenACCCopyOutClause, Expr *> {
1192 friend TrailingObjects;
1203 "Invalid clause kind for copyout-clause");
1204 setExprs(getTrailingObjects(VarList.size()), VarList);
1221class OpenACCCreateClause final
1223 private llvm::TrailingObjects<OpenACCCreateClause, Expr *> {
1224 friend TrailingObjects;
1235 "Invalid clause kind for create-clause");
1236 setExprs(getTrailingObjects(VarList.size()), VarList);
1255struct OpenACCReductionRecipe {
1303class OpenACCReductionClause final
1305 private llvm::TrailingObjects<OpenACCReductionClause, Expr *,
1306 OpenACCReductionRecipe,
1307 OpenACCReductionRecipe::CombinerRecipe> {
1308 friend TrailingObjects;
1319 assert(VarList.size() == Recipes.size());
1320 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
1326 getTrailingObjects<OpenACCReductionRecipe::CombinerRecipe>();
1327 for (
const auto &[Idx, R] : llvm::enumerate(Recipes)) {
1331 NewCombiners{CurCombinerLoc, R.CombinerRecipes.size()};
1332 CurCombinerLoc += R.CombinerRecipes.size();
1334 llvm::uninitialized_copy(R.CombinerRecipes, NewCombiners.begin());
1337 new (&getTrailingObjects<OpenACCReductionRecipe>()[Idx])
1349 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1368class OpenACCLinkClause final
1370 private llvm::TrailingObjects<OpenACCLinkClause, Expr *> {
1371 friend TrailingObjects;
1377 setExprs(getTrailingObjects(VarList.size()), VarList);
1391class OpenACCDeviceResidentClause final
1393 private llvm::TrailingObjects<OpenACCDeviceResidentClause, Expr *> {
1394 friend TrailingObjects;
1399 LParenLoc, EndLoc) {
1400 setExprs(getTrailingObjects(VarList.size()), VarList);
1414 Impl &getDerived() {
return static_cast<Impl &
>(*this); }
1426 switch (
C->getClauseKind()) {
1427#define VISIT_CLAUSE(CLAUSE_NAME) \
1428 case OpenACCClauseKind::CLAUSE_NAME: \
1429 getDerived().Visit##CLAUSE_NAME##Clause( \
1430 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1432#define CLAUSE_ALIAS(ALIAS_NAME, CLAUSE_NAME, DEPRECATED) \
1433 case OpenACCClauseKind::ALIAS_NAME: \
1434 getDerived().Visit##CLAUSE_NAME##Clause( \
1435 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1437#include "clang/Basic/OpenACCClauses.def"
1440 llvm_unreachable(
"Clause visitor not yet implemented");
1442 llvm_unreachable(
"Invalid Clause kind");
1445#define VISIT_CLAUSE(CLAUSE_NAME) \
1446 void Visit##CLAUSE_NAME##Clause( \
1447 const OpenACC##CLAUSE_NAME##Clause &Clause) { \
1448 return getDerived().VisitClause(Clause); \
1451#include "clang/Basic/OpenACCClauses.def"
1459 void printExpr(
const Expr *E);
1466 if (Clause != List.back())
1471 : OS(OS), Policy(Policy) {}
1473#define VISIT_CLAUSE(CLAUSE_NAME) \
1474 void Visit##CLAUSE_NAME##Clause(const OpenACC##CLAUSE_NAME##Clause &Clause);
1475#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)
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
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.
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
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.