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");
464 assert(!HasConditionExpr.has_value() &&
465 "Condition Expr self clause asked about var list");
471 reinterpret_cast<Stmt **
>(getTrailingObjects()),
472 reinterpret_cast<Stmt **
>(getTrailingObjects() + NumExprs));
476 return const_cast<OpenACCSelfClause *
>(
this)->
children();
500 assert(Exprs.empty() &&
"Cannot change Exprs list");
507 assert(NewStorage.size() == Exprs.size());
508 llvm::uninitialized_copy(Exprs, NewStorage.begin());
520 reinterpret_cast<Stmt **
>(Exprs.end()));
529class OpenACCWaitClause final
531 private llvm::TrailingObjects<OpenACCWaitClause, Expr *> {
532 friend TrailingObjects;
539 QueuesLoc(QueuesLoc) {
542 auto *Exprs = getTrailingObjects();
543 llvm::uninitialized_copy(
ArrayRef(DevNumExpr), Exprs);
544 llvm::uninitialized_copy(QueueIdExprs, Exprs + 1);
545 setExprs(getTrailingObjects(QueueIdExprs.size() + 1));
573class OpenACCNumGangsClause final
575 private llvm::TrailingObjects<OpenACCNumGangsClause, Expr *> {
576 friend TrailingObjects;
582 setExprs(getTrailingObjects(IntExprs.size()), IntExprs);
600class OpenACCTileClause final
602 private llvm::TrailingObjects<OpenACCTileClause, Expr *> {
603 friend TrailingObjects;
608 setExprs(getTrailingObjects(SizeExprs.size()), SizeExprs);
653 private llvm::TrailingObjects<OpenACCGangClause, Expr *, OpenACCGangKind> {
654 friend TrailingObjects;
661 return getTrailingObjects<OpenACCGangKind>()[I];
674 std::pair<OpenACCGangKind, const Expr *>
getExpr(
unsigned I)
const {
797 bool HasForce =
false;
849class OpenACCPrivateClause final
851 private llvm::TrailingObjects<OpenACCPrivateClause, Expr *,
852 OpenACCPrivateRecipe> {
853 friend TrailingObjects;
861 assert(VarList.size() == InitRecipes.size());
862 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
863 llvm::uninitialized_copy(InitRecipes,
864 getTrailingObjects<OpenACCPrivateRecipe>());
875 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
880 getTrailingObjects<OpenACCPrivateRecipe>(),
getExprs().size()};
911class OpenACCFirstPrivateClause final
913 private llvm::TrailingObjects<OpenACCFirstPrivateClause, Expr *,
914 OpenACCFirstPrivateRecipe> {
915 friend TrailingObjects;
923 assert(VarList.size() == InitRecipes.size());
924 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
925 llvm::uninitialized_copy(InitRecipes,
926 getTrailingObjects<OpenACCFirstPrivateRecipe>());
938 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
943 getTrailingObjects<OpenACCFirstPrivateRecipe>(),
getExprs().size()};
957class OpenACCDevicePtrClause final
959 private llvm::TrailingObjects<OpenACCDevicePtrClause, Expr *> {
960 friend TrailingObjects;
966 setExprs(getTrailingObjects(VarList.size()), VarList);
978class OpenACCAttachClause final
980 private llvm::TrailingObjects<OpenACCAttachClause, Expr *> {
981 friend TrailingObjects;
987 setExprs(getTrailingObjects(VarList.size()), VarList);
999class OpenACCDetachClause final
1001 private llvm::TrailingObjects<OpenACCDetachClause, Expr *> {
1002 friend TrailingObjects;
1008 setExprs(getTrailingObjects(VarList.size()), VarList);
1020class OpenACCDeleteClause final
1022 private llvm::TrailingObjects<OpenACCDeleteClause, Expr *> {
1023 friend TrailingObjects;
1029 setExprs(getTrailingObjects(VarList.size()), VarList);
1041class OpenACCUseDeviceClause final
1043 private llvm::TrailingObjects<OpenACCUseDeviceClause, Expr *> {
1044 friend TrailingObjects;
1049 LParenLoc, EndLoc) {
1050 setExprs(getTrailingObjects(VarList.size()), VarList);
1062class OpenACCNoCreateClause final
1064 private llvm::TrailingObjects<OpenACCNoCreateClause, Expr *> {
1065 friend TrailingObjects;
1070 LParenLoc, EndLoc) {
1071 setExprs(getTrailingObjects(VarList.size()), VarList);
1083class OpenACCPresentClause final
1085 private llvm::TrailingObjects<OpenACCPresentClause, Expr *> {
1086 friend TrailingObjects;
1091 LParenLoc, EndLoc) {
1092 setExprs(getTrailingObjects(VarList.size()), VarList);
1103class OpenACCHostClause final
1105 private llvm::TrailingObjects<OpenACCHostClause, Expr *> {
1106 friend TrailingObjects;
1112 setExprs(getTrailingObjects(VarList.size()), VarList);
1125class OpenACCDeviceClause final
1127 private llvm::TrailingObjects<OpenACCDeviceClause, Expr *> {
1128 friend TrailingObjects;
1134 setExprs(getTrailingObjects(VarList.size()), VarList);
1146class OpenACCCopyClause final
1148 private llvm::TrailingObjects<OpenACCCopyClause, Expr *> {
1149 friend TrailingObjects;
1160 "Invalid clause kind for copy-clause");
1161 setExprs(getTrailingObjects(VarList.size()), VarList);
1179class OpenACCCopyInClause final
1181 private llvm::TrailingObjects<OpenACCCopyInClause, Expr *> {
1182 friend TrailingObjects;
1193 "Invalid clause kind for copyin-clause");
1194 setExprs(getTrailingObjects(VarList.size()), VarList);
1211class OpenACCCopyOutClause final
1213 private llvm::TrailingObjects<OpenACCCopyOutClause, Expr *> {
1214 friend TrailingObjects;
1225 "Invalid clause kind for copyout-clause");
1226 setExprs(getTrailingObjects(VarList.size()), VarList);
1243class OpenACCCreateClause final
1245 private llvm::TrailingObjects<OpenACCCreateClause, Expr *> {
1246 friend TrailingObjects;
1257 "Invalid clause kind for create-clause");
1258 setExprs(getTrailingObjects(VarList.size()), VarList);
1277struct OpenACCReductionRecipe {
1325class OpenACCReductionClause final
1327 private llvm::TrailingObjects<OpenACCReductionClause, Expr *,
1328 OpenACCReductionRecipe,
1329 OpenACCReductionRecipe::CombinerRecipe> {
1330 friend TrailingObjects;
1341 assert(VarList.size() == Recipes.size());
1342 setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
1348 getTrailingObjects<OpenACCReductionRecipe::CombinerRecipe>();
1349 for (
const auto &[Idx, R] : llvm::enumerate(Recipes)) {
1353 NewCombiners{CurCombinerLoc, R.CombinerRecipes.size()};
1354 CurCombinerLoc += R.CombinerRecipes.size();
1356 llvm::uninitialized_copy(R.CombinerRecipes, NewCombiners.begin());
1359 new (&getTrailingObjects<OpenACCReductionRecipe>()[Idx])
1371 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1376 getTrailingObjects<OpenACCReductionRecipe>(),
getExprs().size()};
1395class OpenACCLinkClause final
1397 private llvm::TrailingObjects<OpenACCLinkClause, Expr *> {
1398 friend TrailingObjects;
1404 setExprs(getTrailingObjects(VarList.size()), VarList);
1418class OpenACCDeviceResidentClause final
1420 private llvm::TrailingObjects<OpenACCDeviceResidentClause, Expr *> {
1421 friend TrailingObjects;
1426 LParenLoc, EndLoc) {
1427 setExprs(getTrailingObjects(VarList.size()), VarList);
1441 Impl &getDerived() {
return static_cast<Impl &
>(*this); }
1453 switch (
C->getClauseKind()) {
1454#define VISIT_CLAUSE(CLAUSE_NAME) \
1455 case OpenACCClauseKind::CLAUSE_NAME: \
1456 getDerived().Visit##CLAUSE_NAME##Clause( \
1457 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1459#define CLAUSE_ALIAS(ALIAS_NAME, CLAUSE_NAME, DEPRECATED) \
1460 case OpenACCClauseKind::ALIAS_NAME: \
1461 getDerived().Visit##CLAUSE_NAME##Clause( \
1462 *cast<OpenACC##CLAUSE_NAME##Clause>(C)); \
1464#include "clang/Basic/OpenACCClauses.def"
1467 llvm_unreachable(
"Clause visitor not yet implemented");
1469 llvm_unreachable(
"Invalid Clause kind");
1472#define VISIT_CLAUSE(CLAUSE_NAME) \
1473 void Visit##CLAUSE_NAME##Clause( \
1474 const OpenACC##CLAUSE_NAME##Clause &Clause) { \
1475 return getDerived().VisitClause(Clause); \
1478#include "clang/Basic/OpenACCClauses.def"
1486 void printExpr(
const Expr *E);
1493 if (Clause != List.back())
1498 : OS(OS), Policy(Policy) {}
1500#define VISIT_CLAUSE(CLAUSE_NAME) \
1501 void Visit##CLAUSE_NAME##Clause(const OpenACC##CLAUSE_NAME##Clause &Clause);
1502#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< OpenACCReductionRecipe >) 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)
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.