23 #include "llvm/ADT/FoldingSet.h"
24 using namespace clang;
28 llvm::FoldingSetNodeID &
ID;
35 : ID(ID), Context(Context), Canonical(Canonical) { }
37 void VisitStmt(
const Stmt *
S);
39 #define STMT(Node, Base) void Visit##Node(const Node *S);
40 #include "clang/AST/StmtNodes.inc"
44 void VisitDecl(
const Decl *D);
71 void StmtProfiler::VisitStmt(
const Stmt *
S) {
72 ID.AddInteger(S->getStmtClass());
73 for (
const Stmt *SubStmt : S->children()) {
81 void StmtProfiler::VisitDeclStmt(
const DeclStmt *S) {
83 for (
const auto *D : S->
decls())
87 void StmtProfiler::VisitNullStmt(
const NullStmt *S) {
91 void StmtProfiler::VisitCompoundStmt(
const CompoundStmt *S) {
95 void StmtProfiler::VisitSwitchCase(
const SwitchCase *S) {
99 void StmtProfiler::VisitCaseStmt(
const CaseStmt *S) {
103 void StmtProfiler::VisitDefaultStmt(
const DefaultStmt *S) {
107 void StmtProfiler::VisitLabelStmt(
const LabelStmt *S) {
117 void StmtProfiler::VisitIfStmt(
const IfStmt *S) {
122 void StmtProfiler::VisitSwitchStmt(
const SwitchStmt *S) {
127 void StmtProfiler::VisitWhileStmt(
const WhileStmt *S) {
132 void StmtProfiler::VisitDoStmt(
const DoStmt *S) {
136 void StmtProfiler::VisitForStmt(
const ForStmt *S) {
140 void StmtProfiler::VisitGotoStmt(
const GotoStmt *S) {
149 void StmtProfiler::VisitContinueStmt(
const ContinueStmt *S) {
153 void StmtProfiler::VisitBreakStmt(
const BreakStmt *S) {
157 void StmtProfiler::VisitReturnStmt(
const ReturnStmt *S) {
161 void StmtProfiler::VisitGCCAsmStmt(
const GCCAsmStmt *S) {
181 void StmtProfiler::VisitMSAsmStmt(
const MSAsmStmt *S) {
186 void StmtProfiler::VisitCXXCatchStmt(
const CXXCatchStmt *S) {
191 void StmtProfiler::VisitCXXTryStmt(
const CXXTryStmt *S) {
206 void StmtProfiler::VisitSEHTryStmt(
const SEHTryStmt *S) {
214 void StmtProfiler::VisitSEHExceptStmt(
const SEHExceptStmt *S) {
218 void StmtProfiler::VisitSEHLeaveStmt(
const SEHLeaveStmt *S) {
222 void StmtProfiler::VisitCapturedStmt(
const CapturedStmt *S) {
241 void StmtProfiler::VisitObjCAtTryStmt(
const ObjCAtTryStmt *S) {
261 StmtProfiler *Profiler;
263 template <
typename T>
264 void VisitOMPClauseList(T *
Node);
267 OMPClauseProfiler(StmtProfiler *
P) : Profiler(P) { }
268 #define OPENMP_CLAUSE(Name, Class) \
269 void Visit##Class(const Class *C);
270 #include "clang/Basic/OpenMPKinds.def"
273 void OMPClauseProfiler::VisitOMPIfClause(
const OMPIfClause *
C) {
303 void OMPClauseProfiler::VisitOMPDefaultClause(
const OMPDefaultClause *C) { }
318 Profiler->VisitStmt(Num);
321 void OMPClauseProfiler::VisitOMPNowaitClause(
const OMPNowaitClause *) {}
323 void OMPClauseProfiler::VisitOMPUntiedClause(
const OMPUntiedClause *) {}
327 void OMPClauseProfiler::VisitOMPReadClause(
const OMPReadClause *) {}
329 void OMPClauseProfiler::VisitOMPWriteClause(
const OMPWriteClause *) {}
331 void OMPClauseProfiler::VisitOMPUpdateClause(
const OMPUpdateClause *) {}
335 void OMPClauseProfiler::VisitOMPSeqCstClause(
const OMPSeqCstClause *) {}
339 void OMPClauseProfiler::VisitOMPSIMDClause(
const OMPSIMDClause *) {}
344 void OMPClauseProfiler::VisitOMPClauseList(T *
Node) {
345 for (
auto *
E : Node->varlists()) {
346 Profiler->VisitStmt(
E);
351 VisitOMPClauseList(C);
353 Profiler->VisitStmt(
E);
358 VisitOMPClauseList(C);
360 Profiler->VisitStmt(
E);
362 for (
auto *
E : C->
inits()) {
363 Profiler->VisitStmt(
E);
368 VisitOMPClauseList(C);
370 Profiler->VisitStmt(
E);
373 Profiler->VisitStmt(
E);
376 Profiler->VisitStmt(
E);
379 void OMPClauseProfiler::VisitOMPSharedClause(
const OMPSharedClause *C) {
380 VisitOMPClauseList(C);
382 void OMPClauseProfiler::VisitOMPReductionClause(
384 Profiler->VisitNestedNameSpecifier(
387 VisitOMPClauseList(C);
389 Profiler->VisitStmt(
E);
392 Profiler->VisitStmt(
E);
395 Profiler->VisitStmt(
E);
398 Profiler->VisitStmt(
E);
401 void OMPClauseProfiler::VisitOMPLinearClause(
const OMPLinearClause *C) {
402 VisitOMPClauseList(C);
403 for (
auto *
E : C->privates()) {
404 Profiler->VisitStmt(
E);
406 for (
auto *
E : C->inits()) {
407 Profiler->VisitStmt(
E);
409 for (
auto *
E : C->updates()) {
410 Profiler->VisitStmt(
E);
412 for (
auto *
E : C->finals()) {
413 Profiler->VisitStmt(
E);
415 Profiler->VisitStmt(C->getStep());
416 Profiler->VisitStmt(C->getCalcStep());
419 VisitOMPClauseList(C);
422 void OMPClauseProfiler::VisitOMPCopyinClause(
const OMPCopyinClause *C) {
423 VisitOMPClauseList(C);
425 Profiler->VisitStmt(
E);
428 Profiler->VisitStmt(
E);
431 Profiler->VisitStmt(
E);
436 VisitOMPClauseList(C);
438 Profiler->VisitStmt(
E);
441 Profiler->VisitStmt(
E);
444 Profiler->VisitStmt(
E);
447 void OMPClauseProfiler::VisitOMPFlushClause(
const OMPFlushClause *C) {
448 VisitOMPClauseList(C);
450 void OMPClauseProfiler::VisitOMPDependClause(
const OMPDependClause *C) {
451 VisitOMPClauseList(C);
453 void OMPClauseProfiler::VisitOMPDeviceClause(
const OMPDeviceClause *C) {
456 void OMPClauseProfiler::VisitOMPMapClause(
const OMPMapClause *C) {
457 VisitOMPClauseList(C);
462 void OMPClauseProfiler::VisitOMPThreadLimitClause(
475 void OMPClauseProfiler::VisitOMPHintClause(
const OMPHintClause *C) {
476 Profiler->VisitStmt(C->
getHint());
483 OMPClauseProfiler
P(
this);
492 VisitOMPExecutableDirective(S);
496 VisitOMPExecutableDirective(S);
500 VisitOMPLoopDirective(S);
504 VisitOMPLoopDirective(S);
508 VisitOMPLoopDirective(S);
512 VisitOMPExecutableDirective(S);
516 VisitOMPExecutableDirective(S);
520 VisitOMPExecutableDirective(S);
524 VisitOMPExecutableDirective(S);
528 VisitOMPExecutableDirective(S);
534 VisitOMPLoopDirective(S);
537 void StmtProfiler::VisitOMPParallelForSimdDirective(
539 VisitOMPLoopDirective(S);
542 void StmtProfiler::VisitOMPParallelSectionsDirective(
544 VisitOMPExecutableDirective(S);
548 VisitOMPExecutableDirective(S);
552 VisitOMPExecutableDirective(S);
556 VisitOMPExecutableDirective(S);
560 VisitOMPExecutableDirective(S);
564 VisitOMPExecutableDirective(S);
568 VisitOMPExecutableDirective(S);
572 VisitOMPExecutableDirective(S);
576 VisitOMPExecutableDirective(S);
580 VisitOMPExecutableDirective(S);
584 VisitOMPExecutableDirective(S);
588 VisitOMPExecutableDirective(S);
591 void StmtProfiler::VisitOMPCancellationPointDirective(
593 VisitOMPExecutableDirective(S);
597 VisitOMPExecutableDirective(S);
601 VisitOMPLoopDirective(S);
604 void StmtProfiler::VisitOMPTaskLoopSimdDirective(
606 VisitOMPLoopDirective(S);
609 void StmtProfiler::VisitOMPDistributeDirective(
611 VisitOMPLoopDirective(S);
614 void StmtProfiler::VisitExpr(
const Expr *S) {
618 void StmtProfiler::VisitDeclRefExpr(
const DeclRefExpr *S) {
655 void StmtProfiler::VisitStringLiteral(
const StringLiteral *S) {
661 void StmtProfiler::VisitParenExpr(
const ParenExpr *S) {
665 void StmtProfiler::VisitParenListExpr(
const ParenListExpr *S) {
669 void StmtProfiler::VisitUnaryOperator(
const UnaryOperator *S) {
674 void StmtProfiler::VisitOffsetOfExpr(
const OffsetOfExpr *S) {
677 for (
unsigned i = 0; i < n; ++i) {
718 void StmtProfiler::VisitCallExpr(
const CallExpr *S) {
722 void StmtProfiler::VisitMemberExpr(
const MemberExpr *S) {
735 void StmtProfiler::VisitCastExpr(
const CastExpr *S) {
750 VisitExplicitCastExpr(S);
760 VisitBinaryOperator(S);
767 void StmtProfiler::VisitBinaryConditionalOperator(
772 void StmtProfiler::VisitAddrLabelExpr(
const AddrLabelExpr *S) {
777 void StmtProfiler::VisitStmtExpr(
const StmtExpr *S) {
789 void StmtProfiler::VisitChooseExpr(
const ChooseExpr *S) {
793 void StmtProfiler::VisitGNUNullExpr(
const GNUNullExpr *S) {
797 void StmtProfiler::VisitVAArgExpr(
const VAArgExpr *S) {
801 void StmtProfiler::VisitInitListExpr(
const InitListExpr *S) {
816 if (D->isFieldDesignator()) {
818 VisitName(D->getFieldName());
822 if (D->isArrayDesignator()) {
825 assert(D->isArrayRangeDesignator());
828 ID.AddInteger(D->getFirstExprIndex());
834 void StmtProfiler::VisitDesignatedInitUpdateExpr(
836 llvm_unreachable(
"Unexpected DesignatedInitUpdateExpr in syntactic form of "
840 void StmtProfiler::VisitNoInitExpr(
const NoInitExpr *S) {
841 llvm_unreachable(
"Unexpected NoInitExpr in syntactic form of initializer");
853 void StmtProfiler::VisitBlockExpr(
const BlockExpr *S) {
863 ID.AddPointer(
nullptr);
876 Visit(OVE->getSourceExpr());
879 void StmtProfiler::VisitAtomicExpr(
const AtomicExpr *S) {
892 case OO_Array_Delete:
898 llvm_unreachable(
"Invalid operator call kind");
903 return Stmt::UnaryOperatorClass;
907 return Stmt::BinaryOperatorClass;
912 return Stmt::UnaryOperatorClass;
916 return Stmt::BinaryOperatorClass;
921 return Stmt::UnaryOperatorClass;
925 return Stmt::BinaryOperatorClass;
929 return Stmt::BinaryOperatorClass;
933 return Stmt::BinaryOperatorClass;
937 return Stmt::BinaryOperatorClass;
942 return Stmt::UnaryOperatorClass;
946 return Stmt::BinaryOperatorClass;
950 return Stmt::BinaryOperatorClass;
954 return Stmt::UnaryOperatorClass;
958 return Stmt::UnaryOperatorClass;
962 return Stmt::BinaryOperatorClass;
966 return Stmt::BinaryOperatorClass;
970 return Stmt::BinaryOperatorClass;
974 return Stmt::CompoundAssignOperatorClass;
978 return Stmt::CompoundAssignOperatorClass;
982 return Stmt::CompoundAssignOperatorClass;
986 return Stmt::CompoundAssignOperatorClass;
988 case OO_PercentEqual:
990 return Stmt::CompoundAssignOperatorClass;
994 return Stmt::CompoundAssignOperatorClass;
998 return Stmt::CompoundAssignOperatorClass;
1002 return Stmt::CompoundAssignOperatorClass;
1006 return Stmt::BinaryOperatorClass;
1008 case OO_GreaterGreater:
1010 return Stmt::BinaryOperatorClass;
1012 case OO_LessLessEqual:
1014 return Stmt::CompoundAssignOperatorClass;
1016 case OO_GreaterGreaterEqual:
1018 return Stmt::CompoundAssignOperatorClass;
1022 return Stmt::BinaryOperatorClass;
1024 case OO_ExclaimEqual:
1026 return Stmt::BinaryOperatorClass;
1030 return Stmt::BinaryOperatorClass;
1032 case OO_GreaterEqual:
1034 return Stmt::BinaryOperatorClass;
1038 return Stmt::BinaryOperatorClass;
1042 return Stmt::BinaryOperatorClass;
1047 return Stmt::UnaryOperatorClass;
1052 return Stmt::UnaryOperatorClass;
1056 return Stmt::BinaryOperatorClass;
1060 return Stmt::BinaryOperatorClass;
1063 return Stmt::ArraySubscriptExprClass;
1066 llvm_unreachable(
"Invalid overloaded operator expression");
1080 if (SC == Stmt::UnaryOperatorClass)
1081 ID.AddInteger(UnaryOp);
1082 else if (SC == Stmt::BinaryOperatorClass ||
1083 SC == Stmt::CompoundAssignOperatorClass)
1084 ID.AddInteger(BinaryOp);
1086 assert(SC == Stmt::ArraySubscriptExprClass);
1103 void StmtProfiler::VisitAsTypeExpr(
const AsTypeExpr *S) {
1108 VisitExplicitCastExpr(S);
1112 VisitCXXNamedCastExpr(S);
1116 VisitCXXNamedCastExpr(S);
1121 VisitCXXNamedCastExpr(S);
1125 VisitCXXNamedCastExpr(S);
1141 void StmtProfiler::VisitCXXStdInitializerListExpr(
1146 void StmtProfiler::VisitCXXTypeidExpr(
const CXXTypeidExpr *S) {
1152 void StmtProfiler::VisitCXXUuidofExpr(
const CXXUuidofExpr *S) {
1163 void StmtProfiler::VisitMSPropertySubscriptExpr(
1168 void StmtProfiler::VisitCXXThisExpr(
const CXXThisExpr *S) {
1173 void StmtProfiler::VisitCXXThrowExpr(
const CXXThrowExpr *S) {
1200 VisitExplicitCastExpr(S);
1205 VisitCXXConstructExpr(S);
1209 StmtProfiler::VisitLambdaExpr(
const LambdaExpr *S) {
1214 ID.AddInteger(C->getCaptureKind());
1215 switch (C->getCaptureKind()) {
1220 VisitDecl(C->getCapturedVar());
1221 ID.AddBoolean(C->isPackExpansion());
1224 llvm_unreachable(
"VLA type in explicit captures.");
1238 void StmtProfiler::VisitCXXDeleteExpr(
const CXXDeleteExpr *S) {
1245 void StmtProfiler::VisitCXXNewExpr(
const CXXNewExpr *S) {
1272 void StmtProfiler::VisitOverloadExpr(
const OverloadExpr *S) {
1283 VisitOverloadExpr(S);
1286 void StmtProfiler::VisitTypeTraitExpr(
const TypeTraitExpr *S) {
1306 void StmtProfiler::VisitDependentScopeDeclRefExpr(
1320 void StmtProfiler::VisitCXXUnresolvedConstructExpr(
1326 void StmtProfiler::VisitCXXDependentScopeMemberExpr(
1361 void StmtProfiler::VisitSizeOfPackExpr(
const SizeOfPackExpr *S) {
1366 ID.AddInteger(Args.size());
1367 for (
const auto &TA : Args)
1368 VisitTemplateArgument(TA);
1374 void StmtProfiler::VisitSubstNonTypeTemplateParmPackExpr(
1381 void StmtProfiler::VisitSubstNonTypeTemplateParmExpr(
1395 void StmtProfiler::VisitMaterializeTemporaryExpr(
1400 void StmtProfiler::VisitCXXFoldExpr(
const CXXFoldExpr *S) {
1409 void StmtProfiler::VisitCoreturnStmt(
const CoreturnStmt *S) {
1413 void StmtProfiler::VisitCoawaitExpr(
const CoawaitExpr *S) {
1417 void StmtProfiler::VisitCoyieldExpr(
const CoyieldExpr *S) {
1425 void StmtProfiler::VisitTypoExpr(
const TypoExpr *E) {
1433 void StmtProfiler::VisitObjCBoxedExpr(
const ObjCBoxedExpr *E) {
1445 void StmtProfiler::VisitObjCEncodeExpr(
const ObjCEncodeExpr *S) {
1493 void StmtProfiler::VisitObjCIsaExpr(
const ObjCIsaExpr *S) {
1503 void StmtProfiler::VisitObjCIndirectCopyRestoreExpr(
1510 VisitExplicitCastExpr(S);
1514 void StmtProfiler::VisitDecl(
const Decl *D) {
1517 if (Canonical && D) {
1519 dyn_cast<NonTypeTemplateParmDecl>(D)) {
1520 ID.AddInteger(NTTP->getDepth());
1521 ID.AddInteger(NTTP->getIndex());
1522 ID.AddBoolean(NTTP->isParameterPack());
1523 VisitType(NTTP->getType());
1527 if (
const ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D)) {
1535 VisitType(Parm->getType());
1536 ID.AddInteger(Parm->getFunctionScopeDepth());
1537 ID.AddInteger(Parm->getFunctionScopeIndex());
1542 dyn_cast<TemplateTypeParmDecl>(D)) {
1543 ID.AddInteger(TTP->getDepth());
1544 ID.AddInteger(TTP->getIndex());
1545 ID.AddBoolean(TTP->isParameterPack());
1550 dyn_cast<TemplateTemplateParmDecl>(D)) {
1551 ID.AddInteger(TTP->getDepth());
1552 ID.AddInteger(TTP->getIndex());
1553 ID.AddBoolean(TTP->isParameterPack());
1561 void StmtProfiler::VisitType(
QualType T) {
1578 void StmtProfiler::VisitTemplateName(
TemplateName Name) {
1587 ID.AddInteger(NumArgs);
1589 VisitTemplateArgument(Args[
I].getArgument());
1627 VisitTemplateArgument(
P);
1633 bool Canonical)
const {
1634 StmtProfiler Profiler(ID, Context, Canonical);
1635 Profiler.Visit(
this);
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
A call to an overloaded operator written using operator syntax.
Represents a single C99 designator.
ValueDecl * getMemberDecl() const
Retrieve the member declaration to which this expression refers.
Defines the clang::ASTContext interface.
This represents '#pragma omp master' directive.
DeclarationName getMember() const
Retrieve the name of the member that this expression refers to.
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
ParmVarDecl *const * iterator
Iterators over the parameters which the parameter pack expanded into.
The null pointer literal (C++11 [lex.nullptr])
This represents '#pragma omp task' directive.
This represents a GCC inline-assembly statement extension.
IdentifierInfo * getFieldName() const
For a field or identifier offsetof node, returns the name of the field.
TypeSourceInfo * getDestroyedTypeInfo() const
Retrieve the source location information for the type being destroyed.
unsigned getNumOutputs() const
This represents 'thread_limit' clause in the '#pragma omp ...' directive.
llvm::iterator_range< pack_iterator > pack_elements() const
Iterator range referencing all of the elements of a template argument pack.
This represents clause 'copyin' in the '#pragma omp ...' directives.
A (possibly-)qualified type.
bool hasExplicitTemplateArgs() const
Determines whether this expression had explicit template arguments.
helper_expr_const_range source_exprs() const
ArrayRef< OMPClause * > clauses()
llvm::APSInt getAsIntegral() const
Retrieve the template argument as an integral value.
Expr * getArg(unsigned Arg)
getArg - Return the specified argument.
NestedNameSpecifier * getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const
Retrieves the "canonical" nested name specifier for a given nested name specifier.
bool isElidable() const
Whether this construction is elidable.
ConstStmtVisitor - This class implements a simple visitor for Stmt subclasses.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
Expr * getSimdlen() const
Return safe iteration space distance.
private_copies_range private_copies()
CharacterKind getKind() const
Represents a 'co_return' statement in the C++ Coroutines TS.
TypeSourceInfo * getScopeTypeInfo() const
Retrieve the scope type in a qualified pseudo-destructor expression.
bool isArgumentType() const
IfStmt - This represents an if/then/else.
bool isGlobalDelete() const
This represents '#pragma omp for simd' directive.
The template argument is an expression, and we've not resolved it to one of the other forms yet...
TypeSourceInfo * getTypeSourceInfo() const
NestedNameSpecifier * getQualifier() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name...
Decl - This represents one declaration (or definition), e.g.
This represents 'grainsize' clause in the '#pragma omp ...' directive.
ObjCMethodDecl * getAtIndexMethodDecl() const
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
This represents 'if' clause in the '#pragma omp ...' directive.
Defines the C++ template declaration subclasses.
Represents an attribute applied to a statement.
TypeSourceInfo * getArg(unsigned I) const
Retrieve the Ith argument.
ParenExpr - This represents a parethesized expression, e.g.
This represents 'priority' clause in the '#pragma omp ...' directive.
Represents Objective-C's @throw statement.
InitListExpr * getSyntacticForm() const
The template argument is a declaration that was provided for a pointer, reference, or pointer to member non-type template parameter.
Represents a call to a C++ constructor.
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
bool hasExplicitTemplateArgs() const
Determines whether this lookup had explicit template arguments.
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent...
This represents 'update' clause in the '#pragma omp atomic' directive.
This represents '#pragma omp parallel for' directive.
MS property subscript expression.
Expr * getAsExpr() const
Retrieve the template argument as an expression.
Describes the capture of a variable or of this, or of a C++1y init-capture.
Represents a prvalue temporary that is written into memory so that a reference can bind to it...
unsigned getNumTemplateArgs() const
Expr * getAlignment()
Returns alignment.
IdentType getIdentType() const
void * getAsOpaquePtr() const
This represents 'read' clause in the '#pragma omp atomic' directive.
ArrayRef< TemplateArgument > getPartialArguments() const
Get.
This represents clause 'private' in the '#pragma omp ...' directives.
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
CompoundLiteralExpr - [C99 6.5.2.5].
This represents 'num_threads' clause in the '#pragma omp ...' directive.
Represents an empty template argument, e.g., one that has not been deduced.
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
UnaryExprOrTypeTrait getKind() const
This represents implicit clause 'flush' for the '#pragma omp flush' directive.
const ParmVarDecl * getParam() const
unsigned getValue() const
A C++ throw-expression (C++ [except.throw]).
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
Expr * getNumForLoops() const
Return the number of associated for-loops.
ParmVarDecl - Represents a parameter to a function.
Defines the clang::Expr interface and subclasses for C++ expressions.
ArrayTypeTrait getTrait() const
This represents 'nogroup' clause in the '#pragma omp ...' directive.
This represents 'safelen' clause in the '#pragma omp ...' directive.
A C++ static_cast expression (C++ [expr.static.cast]).
LabelStmt - Represents a label, which has a substatement.
Represents a C99 designated initializer expression.
Expr * getNumThreads() const
Returns number of threads.
DeclarationName getMemberName() const
Retrieve the name of the member that this expression refers to.
DeclarationName getName() const
getName - Returns the embedded declaration name.
ObjCProtocolDecl * getProtocol() const
This represents '#pragma omp parallel' directive.
unsigned getNumInputs() const
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
class LLVM_ALIGNAS(8) DependentTemplateSpecializationType const IdentifierInfo * Name
Represents a template specialization type whose template cannot be resolved, e.g. ...
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
This represents 'simd' clause in the '#pragma omp ...' directive.
The template argument is an integral value stored in an llvm::APSInt that was provided for an integra...
unsigned getNumAssocs() const
This represents clause 'lastprivate' in the '#pragma omp ...' directives.
Represents a place-holder for an object not to be initialized by anything.
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
This represents clause 'map' in the '#pragma omp ...' directives.
DeclarationNameInfo getNameInfo() const
Retrieve the name of the entity we're testing for, along with location information.
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
IdentifierInfo & getAccessor() const
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
QualType getQueriedType() const
This represents '#pragma omp barrier' directive.
const DeclarationNameInfo & getNameInfo() const
Gets the name info for specified reduction identifier.
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp, [NSNumber numberWithInt:42]];.
This is a common base class for loop directives ('omp simd', 'omp for', 'omp for simd' etc...
Expr * getNumTeams()
Return NumTeams number.
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
This represents '#pragma omp critical' directive.
bool shouldCopy() const
shouldCopy - True if we should do the 'copy' part of the copy-restore.
const Expr *const * const_semantics_iterator
const VarDecl * getCatchParamDecl() const
Represents Objective-C's @catch statement.
This represents clause 'copyprivate' in the '#pragma omp ...' directives.
IndirectGotoStmt - This represents an indirect goto.
Describes an C or C++ initializer list.
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
ForStmt - This represents a 'for (init;cond;inc)' stmt.
ObjCBridgeCastKind getBridgeKind() const
Determine which kind of bridge is being performed via this cast.
IdentifierInfo * getDestroyedTypeIdentifier() const
In a dependent pseudo-destructor expression for which we do not have full type information on the des...
Capturing by copy (a.k.a., by value)
bool isSuperReceiver() const
helper_expr_const_range source_exprs() const
semantics_iterator semantics_end()
static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S, UnaryOperatorKind &UnaryOp, BinaryOperatorKind &BinaryOp)
A builtin binary operation expression such as "x + y" or "x <= y".
Selector getSelector() const
InitializationStyle getInitializationStyle() const
The kind of initializer this new-expression has.
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies this declaration.
This represents '#pragma omp cancellation point' directive.
This represents 'default' clause in the '#pragma omp ...' directive.
ObjCStringLiteral, used for Objective-C string literals i.e.
QualType getTypeAsWritten() const
getTypeAsWritten - Returns the type that this expression is casting to, as written in the source code...
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
This represents 'final' clause in the '#pragma omp ...' directive.
This represents 'mergeable' clause in the '#pragma omp ...' directive.
This represents '#pragma omp teams' directive.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
This represents clause 'reduction' in the '#pragma omp ...' directives.
FieldDecl * getField()
Get the field whose initializer will be used.
Helper class for OffsetOfExpr.
Represents binding an expression to a temporary.
StringLiteral * getClobberStringLiteral(unsigned i)
CompoundStmt * getBody() const
Retrieve the body of the lambda.
CXXTemporary * getTemporary()
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
Represents a C++ member access expression where the actual member referenced could not be resolved be...
bool isArrow() const
Determine whether this pseudo-destructor expression was written using an '->' (otherwise, it used a '.
Expr * getHint() const
Returns number of threads.
ObjCMethodDecl * setAtIndexMethodDecl() const
detail::InMemoryDirectory::const_iterator I
A default argument (C++ [dcl.fct.default]).
virtual Decl * getCanonicalDecl()
Retrieves the "canonical" declaration of the given declaration.
ExpressionTrait getTrait() const
NestedNameSpecifier * getQualifier() const
If the name was qualified, retrieves the nested-name-specifier that precedes the name.
Represents the this expression in C++.
MSPropertyDecl * getPropertyDecl() const
QualType getTypeAsWritten() const
Retrieve the type that is being constructed, as specified in the source code.
OpenMP 4.0 [2.4, Array Sections].
FunctionDecl * getOperatorDelete() const
ConditionalOperator - The ?: ternary operator.
llvm::APInt getValue() const
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
CompoundStmt - This represents a group of statements like { stmt stmt }.
NestedNameSpecifier * getQualifier() const
Retrieve the nested-name-specifier that qualifies the member name.
This represents 'threads' clause in the '#pragma omp ...' directive.
const TemplateArgumentLoc * getTemplateArgs() const
Retrieve the template arguments provided as part of this template-id.
This represents '#pragma omp taskgroup' directive.
unsigned getNumArgs() const
Determine the number of arguments to this type trait.
unsigned getNumExpansions() const
Get the number of parameters in this parameter pack.
This represents clause 'aligned' in the '#pragma omp ...' directives.
Expr * getQueriedExpression() const
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand...
Represents a call to the builtin function __builtin_va_arg.
FunctionDecl * getOperatorDelete() const
ID
Defines the set of possible language-specific address spaces.
This represents '#pragma omp distribute' directive.
This represents implicit clause 'depend' for the '#pragma omp task' directive.
const ObjCMethodDecl * getMethodDecl() const
designators_iterator designators_begin()
LabelDecl * getDecl() const
An expression "T()" which creates a value-initialized rvalue of type T, which is a non-class type...
This represents 'proc_bind' clause in the '#pragma omp ...' directive.
This represents 'capture' clause in the '#pragma omp atomic' directive.
Expr - This represents one expression.
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
helper_expr_const_range assignment_ops() const
This represents 'simdlen' clause in the '#pragma omp ...' directive.
Declaration of a template type parameter.
VarDecl * getConditionVariable() const
Retrieve the variable declared in this "while" statement, if any.
Expr * getCondition() const
Returns condition.
Represents a C++ functional cast expression that builds a temporary object.
The template argument is a null pointer or null pointer to member that was provided for a non-type te...
A C++ const_cast expression (C++ [expr.const.cast]).
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
bool hasExplicitTemplateArgs() const
Determines whether this member expression actually had a C++ template argument list explicitly specif...
ObjCMethodDecl * getImplicitPropertyGetter() const
ArgKind getKind() const
Return the kind of stored template argument.
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
Represents Objective-C's @synchronized statement.
ObjCSelectorExpr used for @selector in Objective-C.
bool isImplicitAccess() const
True if this is an implicit access, i.e., one in which the member being accessed was not written in t...
Represents an expression that computes the length of a parameter pack.
CXXTryStmt - A C++ try block, including all handlers.
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
Represents a C++ template name within the type system.
This represents 'ordered' clause in the '#pragma omp ...' directive.
Selector getSelector() const
NonTypeTemplateParmDecl * getParameterPack() const
Retrieve the non-type template parameter pack being substituted.
QualType getAllocatedType() const
StringRef getInputName(unsigned i) const
This represents '#pragma omp for' directive.
Represents a folding of a pack over an operator.
TemplateName getAsTemplateOrTemplatePattern() const
Retrieve the template argument as a template name; if the argument is a pack expansion, return the pattern as a template name.
ReturnStmt - This represents a return, optionally of an expression: return; return 4;...
An expression that sends a message to the given Objective-C object or class.
unsigned getNumComponents() const
This represents a Microsoft inline-assembly statement extension.
UnaryOperator - This represents the unary-expression's (except sizeof and alignof), the postinc/postdec operators from postfix-expression, and various extensions.
A member reference to an MSPropertyDecl.
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
Represents a reference to a non-type template parameter that has been substituted with a template arg...
Expr * getDevice()
Return device number.
class LLVM_ALIGNAS(8) TemplateSpecializationType unsigned NumArgs
Represents a type template specialization; the template must be a class template, a type alias templa...
This represents '#pragma omp cancel' directive.
This represents 'collapse' clause in the '#pragma omp ...' directive.
This represents clause 'firstprivate' in the '#pragma omp ...' directives.
NestedNameSpecifier * getQualifier() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name...
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr.cast]), which uses the syntax (Type)expr.
NestedNameSpecifierLoc getQualifierLoc() const
Gets the nested name specifier.
helper_expr_const_range privates() const
ImaginaryLiteral - We support imaginary integer and floating point literals, like "1...
This represents '#pragma omp flush' directive.
helper_expr_const_range destination_exprs() const
This represents '#pragma omp parallel for simd' directive.
DoStmt - This represents a 'do/while' stmt.
This represents 'seq_cst' clause in the '#pragma omp atomic' directive.
This represents 'untied' clause in the '#pragma omp ...' directive.
LabelDecl * getLabel() const
unsigned getNumTemplateArgs() const
const TemplateArgumentLoc * getTemplateArgs() const
Retrieve the template arguments provided as part of this template-id.
This represents 'num_teams' clause in the '#pragma omp ...' directive.
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class...
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
const StringLiteral * getAsmString() const
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr...
A field in a dependent type, known only by its name.
This captures a statement into a function.
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
Expr * getNumForLoops() const
Return the number of associated for-loops.
This represents '#pragma omp single' directive.
This represents 'hint' clause in the '#pragma omp ...' directive.
TemplateArgumentLoc const * getTemplateArgs() const
helper_expr_const_range reduction_ops() const
This is a basic class for representing single OpenMP executable directive.
private_copies_range private_copies()
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies this name, if any.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)"...
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit...
Expr * getCondition() const
Returns condition.
helper_expr_const_range lhs_exprs() const
This represents 'schedule' clause in the '#pragma omp ...' directive.
Represents a call to a member function that may be written either with member call syntax (e...
DeclStmt - Adaptor class for mixing declarations with statements and expressions. ...
This represents clause 'shared' in the '#pragma omp ...' directives.
TemplateArgument getArgumentPack() const
Retrieve the template argument pack containing the substituted template arguments.
Expr * getPriority()
Return Priority number.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
This represents '#pragma omp taskwait' directive.
bool isImplicitAccess() const
True if this is an implicit access, i.e.
void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Ctx)
NamedDecl * getPack() const
Retrieve the parameter pack.
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load, __atomic_store, and __atomic_compare_exchange_*, for the similarly-named C++11 instructions, and __c11 variants for <stdatomic.h>.
void Profile(llvm::FoldingSetNodeID &ID)
ObjCProtocolExpr used for protocol expression in Objective-C.
VarDecl * getConditionVariable() const
Retrieve the variable declared in this "switch" statement, if any.
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
capture_iterator explicit_capture_end() const
Retrieve an iterator pointing past the end of the sequence of explicit lambda captures.
QualType getAssocType(unsigned i) const
ParmVarDecl * getParameterPack() const
Get the parameter pack which this expression refers to.
This represents '#pragma omp target' directive.
TypeTrait getTrait() const
Determine which type trait this expression uses.
bool isTypeDependent() const
isTypeDependent - Determines whether this expression is type-dependent (C++ [temp.dep.expr]), which means that its type could change from one template instantiation to the next.
const T * castAs() const
Member-template castAs<specific type>.
StringRef getOutputName(unsigned i) const
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '...
An expression trait intrinsic.
TypeSourceInfo * getTypeOperandSourceInfo() const
Retrieve source information for the type operand.
This represents '#pragma omp ordered' directive.
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
ObjCBoxedExpr - used for generalized expression boxing.
Expr * getGrainsize() const
Return safe iteration space distance.
const BlockDecl * getBlockDecl() const
bool isParenTypeId() const
QualType getType() const
Return the type wrapped by this type source info.
ValueDecl * getAsDecl() const
Retrieve the declaration for a declaration non-type template argument.
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name...
const OffsetOfNode & getComponent(unsigned Idx) const
A qualified reference to a name whose declaration cannot yet be resolved.
CompoundAssignOperator - For compound assignments (e.g.
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof...
Represents a C11 generic selection.
DeclarationName getDeclName() const
Retrieve the name that this expression refers to.
AddrLabelExpr - The GNU address of label extension, representing &&label.
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers...
ast_type_traits::DynTypedNode Node
Represents a reference to a function parameter pack that has been substituted but not yet expanded...
Represents a template argument.
Expr * getReplacement() const
QualType getAsType() const
Retrieve the type for a type template argument.
VarDecl * getConditionVariable() const
Retrieve the variable declared in this "if" statement, if any.
NullStmt - This is the null statement ";": C99 6.8.3p3.
bool isImplicitProperty() const
This represents 'device' clause in the '#pragma omp ...' directive.
const Expr * getAssocExpr(unsigned i) const
helper_expr_const_range rhs_exprs() const
[C99 6.4.2.2] - A predefined identifier such as func.
Represents a delete expression for memory deallocation and destructor calls, e.g. ...
TypeSourceInfo * getTypeOperandSourceInfo() const
Retrieve source information for the type operand.
TemplateArgumentLoc const * getTemplateArgs() const
The template argument is a pack expansion of a template name that was provided for a template templat...
TemplateName getCanonicalTemplateName(TemplateName Name) const
Retrieves the "canonical" template name that refers to a given template.
This represents '#pragma omp section' directive.
designators_iterator designators_end()
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
This represents '#pragma omp simd' directive.
Represents a 'co_yield' expression.
DeclarationName - The name of a declaration.
Expr * getNumTasks() const
Return safe iteration space distance.
const StringLiteral * getOutputConstraintLiteral(unsigned i) const
Represents a C++11 pack expansion that produces a sequence of expressions.
QualType getCaughtType() const
unsigned getNumPlacementArgs() const
StringRef getBytes() const
Allow access to clients that need the byte representation, such as ASTWriterStmt::VisitStringLiteral(...
This represents clause 'linear' in the '#pragma omp ...' directives.
DeclarationNameInfo getDirectiveName() const
Return name of the directive.
StringKind getKind() const
bool isTypeOperand() const
detail::InMemoryDirectory::const_iterator E
bool usesGNUSyntax() const
Determines whether this designated initializer used the deprecated GNU syntax for designated initiali...
semantics_iterator semantics_begin()
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
CanQualType getCanonicalType(QualType T) const
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...
ExplicitCastExpr - An explicit cast written in the source code.
This represents '#pragma omp atomic' directive.
llvm::APFloat getValue() const
Represents a __leave statement.
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
SwitchStmt - This represents a 'switch' stmt.
Capturing variable-length array type.
Not an overloaded operator.
void * getAsOpaquePtr() const
getAsOpaquePtr - Get the representation of this declaration name as an opaque pointer.
Expr * getSafelen() const
Return safe iteration space distance.
Represents the body of a coroutine.
Location wrapper for a TemplateArgument.
FunctionDecl * getOperatorNew() const
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
capture_iterator explicit_capture_begin() const
Retrieve an iterator pointing to the first explicit lambda capture.
Represents Objective-C's collection statement.
ObjCEncodeExpr, used for @encode in Objective-C.
An implicit indirection through a C++ base class, when the field found is in a base class...
QualType getIntegralType() const
Retrieve the type of the integral value.
Represents a call to a CUDA kernel function.
Represents a 'co_await' expression.
CXXConstructorDecl * getConstructor() const
Represents Objective-C's @finally statement.
The template argument is a type.
QualType getSuperReceiverType() const
The template argument is actually a parameter pack.
LabelDecl * getLabel() const
Capturing the this pointer.
This represents 'write' clause in the '#pragma omp atomic' directive.
ObjCPropertyDecl * getExplicitProperty() const
ObjCIvarRefExpr - A reference to an ObjC instance variable.
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
GotoStmt - This represents a direct goto.
A use of a default initializer in a constructor or in aggregate initialization.
QualType getNullPtrType() const
Retrieve the type for null non-type template argument.
helper_expr_const_range destination_exprs() const
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
const StringLiteral * getInputConstraintLiteral(unsigned i) const
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
OverloadedOperatorKind getOperator() const
Returns the kind of overloaded operator that this expression refers to.
This represents 'nowait' clause in the '#pragma omp ...' directive.
ContinueStmt - This represents a continue.
This represents 'num_tasks' clause in the '#pragma omp ...' directive.
The template argument is a template name that was provided for a template template parameter...
QualType getEncodedType() const
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
CXXCatchStmt - This represents a C++ catch block.
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr.type.conv]).
NestedNameSpecifier * getNestedNameSpecifier() const
Retrieve the nested-name-specifier to which this instance refers.
WhileStmt - This represents a 'while' stmt.
FieldDecl * getField() const
For a field offsetof node, returns the field.
helper_expr_const_range assignment_ops() const
Expr * getThreadLimit()
Return ThreadLimit number.
This class is used for builtin types like 'int'.
Represents Objective-C's @try ... @catch ... @finally statement.
This represents '#pragma omp taskloop simd' directive.
StringLiteral - This represents a string literal expression, e.g.
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
DeclarationName getName() const
Gets the name looked up.
Expr * getHelperChunkSize()
Get helper chunk size.
bool isIfExists() const
Determine whether this is an __if_exists statement.
static Decl::Kind getKind(const Decl *D)
Abstract class common to all of the C++ "named"/"keyword" casts.
This represents '#pragma omp sections' directive.
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
This represents '#pragma omp target data' directive.
A reference to a declared variable, function, enum, etc.
ExprValueKind getValueKind() const
getValueKind - The value kind that this expression produces.
BreakStmt - This represents a break.
Expr * getChunkSize()
Get chunk size.
BinaryOperatorKind getOperator() const
unsigned getNumClobbers() const
helper_expr_const_range destination_exprs() const
This represents '#pragma omp taskyield' directive.
A boolean literal, per ([C++ lex.bool] Boolean literals).
NestedNameSpecifier * getQualifier() const
Fetches the nested-name qualifier, if one was given.
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type, member-designator).
QualType getDestroyedType() const
Retrieve the type being destroyed.
This represents '#pragma omp parallel sections' directive.
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
bool isNull() const
Return true if this QualType doesn't point to a type yet.
bool isTypeOperand() const
Represents Objective-C's @autoreleasepool Statement.
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '...
const CXXDestructorDecl * getDestructor() const
Represents an implicitly-generated value initialization of an object of a given type.
ObjCMethodDecl * getImplicitPropertySetter() const
Kind getKind() const
Determine what kind of offsetof node this is.
helper_expr_const_range assignment_ops() const
helper_expr_const_range source_exprs() const
QualType getArgumentType() const
This represents '#pragma omp taskloop' directive.