clang 22.0.0git
|
Counts the total number of OpenMP canonical nested loops, including the outermost loop (the original loop). More...
Public Member Functions | |
NestedLoopCounterVisitor ()=default | |
unsigned | getNestedLoopCount () const |
bool | VisitForStmt (ForStmt *FS) override |
bool | VisitCXXForRangeStmt (CXXForRangeStmt *FRS) override |
bool | TraverseStmt (Stmt *S) override |
bool | TraverseDecl (Decl *D) override |
Public Member Functions inherited from clang::DynamicRecursiveASTVisitorBase< false > | |
virtual void | anchor () |
virtual | ~DynamicRecursiveASTVisitorBase ()=default |
virtual bool | TraverseAST (MaybeConst< ASTContext > &AST) |
Recursively visits an entire AST, starting from the TranslationUnitDecl. | |
virtual bool | TraverseAttr (MaybeConst< Attr > *At) |
Recursively visit an attribute, by dispatching to Traverse*Attr() based on the argument's dynamic type. | |
virtual bool | TraverseConstructorInitializer (MaybeConst< CXXCtorInitializer > *Init) |
Recursively visit a constructor initializer. | |
virtual bool | TraverseCXXBaseSpecifier (const CXXBaseSpecifier &Base) |
Recursively visit a base specifier. | |
virtual bool | TraverseDecl (MaybeConst< Decl > *D) |
Recursively visit a declaration, by dispatching to Traverse*Decl() based on the argument's dynamic type. | |
virtual bool | TraverseDeclarationNameInfo (DeclarationNameInfo NameInfo) |
Recursively visit a name with its location information. | |
virtual bool | TraverseLambdaCapture (MaybeConst< LambdaExpr > *LE, const LambdaCapture *C, MaybeConst< Expr > *Init) |
Recursively visit a lambda capture. | |
virtual bool | TraverseNestedNameSpecifier (NestedNameSpecifier NNS) |
Recursively visit a C++ nested-name-specifier. | |
virtual bool | TraverseNestedNameSpecifierLoc (NestedNameSpecifierLoc NNS) |
Recursively visit a C++ nested-name-specifier with location information. | |
virtual bool | TraverseStmt (MaybeConst< Stmt > *S) |
Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dynamic type. | |
virtual bool | TraverseTemplateArgument (const TemplateArgument &Arg) |
Recursively visit a template argument and dispatch to the appropriate method for the argument type. | |
virtual bool | TraverseTemplateArgumentLoc (const TemplateArgumentLoc &ArgLoc) |
Recursively visit a template argument location and dispatch to the appropriate method for the argument type. | |
bool | TraverseTemplateArguments (ArrayRef< TemplateArgument > Args) |
Recursively visit a set of template arguments. | |
virtual bool | TraverseTemplateName (TemplateName Template) |
Recursively visit a template name and dispatch to the appropriate method. | |
virtual bool | TraverseType (QualType T, bool TraverseQualifier=true) |
Recursively visit a type, by dispatching to Traverse*Type() based on the argument's getTypeClass() property. | |
virtual bool | TraverseTypeLoc (TypeLoc TL, bool TraverseQualifier=true) |
Recursively visit a type with location, by dispatching to Traverse*TypeLoc() based on the argument type's getTypeClass() property. | |
virtual bool | TraverseObjCProtocolLoc (ObjCProtocolLoc ProtocolLoc) |
Recursively visit an Objective-C protocol reference with location information. | |
virtual bool | TraverseTypeConstraint (const TypeConstraint *C) |
Traverse a concept (requirement). | |
virtual bool | TraverseConceptRequirement (MaybeConst< concepts::Requirement > *R) |
virtual bool | TraverseConceptTypeRequirement (MaybeConst< concepts::TypeRequirement > *R) |
virtual bool | TraverseConceptExprRequirement (MaybeConst< concepts::ExprRequirement > *R) |
virtual bool | TraverseConceptNestedRequirement (MaybeConst< concepts::NestedRequirement > *R) |
virtual bool | TraverseConceptReference (MaybeConst< ConceptReference > *CR) |
virtual bool | VisitConceptReference (MaybeConst< ConceptReference > *CR) |
virtual bool | VisitAttr (MaybeConst< Attr > *A) |
Visit a node. | |
virtual bool | VisitDecl (MaybeConst< Decl > *D) |
virtual bool | VisitStmt (MaybeConst< Stmt > *S) |
virtual bool | VisitType (MaybeConst< Type > *T) |
virtual bool | VisitTypeLoc (TypeLoc TL) |
bool | WalkUpFromDecl (MaybeConst< Decl > *D) |
Walk up from a node. | |
bool | WalkUpFromStmt (MaybeConst< Stmt > *S) |
bool | WalkUpFromType (MaybeConst< Type > *T) |
bool | WalkUpFromTypeLoc (TypeLoc TL) |
virtual bool | dataTraverseStmtPre (MaybeConst< Stmt > *S) |
Invoked before visiting a statement or expression via data recursion. | |
virtual bool | dataTraverseStmtPost (MaybeConst< Stmt > *S) |
Invoked after visiting a statement or expression via data recursion. | |
virtual bool | dataTraverseNode (MaybeConst< Stmt > *S) |
Counts the total number of OpenMP canonical nested loops, including the outermost loop (the original loop).
PRECONDITION of this visitor is that it must be invoked from the original loop to be analyzed. The traversal stops for Decl's and Expr's given that they may contain inner loops that must not be counted.
Example AST structure for the code:
int main() { #pragma omp fuse { for (int i = 0; i < 100; i++) { <– Outer loop []() { for(int j = 0; j < 100; j++) {} <– NOT A LOOP (1) }; for(int j = 0; j < 5; ++j) {} <– Inner loop } for (int r = 0; i < 100; i++) { <– Outer loop struct LocalClass { void bar() { for(int j = 0; j < 100; j++) {} <– NOT A LOOP (2) } }; for(int k = 0; k < 10; ++k) {} <– Inner loop {x = 5; for(k = 0; k < 10; ++k) x += k; x}; <– NOT A LOOP (3) } } } (1) because in a different function (here: a lambda) (2) because in a different function (here: class method) (3) because considered to be intervening-code of non-perfectly nested loop Result: Loop 'i' contains 2 loops, Loop 'r' also contains 2 loops.
Definition at line 14509 of file SemaOpenMP.cpp.
|
explicitdefault |
|
inline |
Definition at line 14516 of file SemaOpenMP.cpp.
Definition at line 14550 of file SemaOpenMP.cpp.
Definition at line 14528 of file SemaOpenMP.cpp.
References clang::isa(), and clang::DynamicRecursiveASTVisitorBase< false >::TraverseStmt().
|
inlineoverride |
Definition at line 14523 of file SemaOpenMP.cpp.
Definition at line 14518 of file SemaOpenMP.cpp.