From 14984f0ad030521d71c9c60d1439728c6ea94f17 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Wed, 25 Jun 2014 04:09:13 +0000 Subject: [OPENMP] Improved code and replaced struct by lambda. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211660 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/StmtOpenMP.h | 7 ++++--- lib/Sema/SemaOpenMP.cpp | 30 ++++++++++++------------------ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/include/clang/AST/StmtOpenMP.h b/include/clang/AST/StmtOpenMP.h index 70a914f999..a2583dce3f 100644 --- a/include/clang/AST/StmtOpenMP.h +++ b/include/clang/AST/StmtOpenMP.h @@ -94,16 +94,17 @@ public: template class filtered_clause_iterator { ArrayRef::const_iterator Current; ArrayRef::const_iterator End; + FilterPredicate Pred; void SkipToNextClause() { - while (Current != End && !FilterPredicate()(*Current)) + while (Current != End && !Pred(*Current)) ++Current; } public: typedef const OMPClause *value_type; filtered_clause_iterator() : Current(), End() {} - explicit filtered_clause_iterator(ArrayRef Arr) - : Current(Arr.begin()), End(Arr.end()) { + filtered_clause_iterator(ArrayRef Arr, FilterPredicate Pred) + : Current(Arr.begin()), End(Arr.end()), Pred(Pred) { SkipToNextClause(); } value_type operator*() const { return *Current; } diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index 16def4ec90..5cf47c0ac1 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -182,7 +182,7 @@ public: DSAStackTy::DSAVarData DSAStackTy::getDSA(StackTy::reverse_iterator Iter, VarDecl *D) { DSAVarData DVar; - if (Iter == Stack.rend() - 1) { + if (Iter == std::prev(Stack.rend())) { // OpenMP [2.9.1.1, Data-sharing Attribute Rules for Variables Referenced // in a region but not in construct] // File-scope or namespace-scope variables referenced in called routines @@ -888,7 +888,7 @@ void Sema::ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, SourceLocation Loc, case OMPD_parallel: { QualType KmpInt32Ty = Context.getIntTypeForBitwidth(32, 1); QualType KmpInt32PtrTy = Context.getPointerType(KmpInt32Ty); - Sema::CapturedParamNameType Params[3] = { + Sema::CapturedParamNameType Params[] = { std::make_pair(".global_tid.", KmpInt32PtrTy), std::make_pair(".bound_tid.", KmpInt32PtrTy), std::make_pair(StringRef(), QualType()) // __context with shared vars @@ -897,14 +897,14 @@ void Sema::ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, SourceLocation Loc, break; } case OMPD_simd: { - Sema::CapturedParamNameType Params[1] = { + Sema::CapturedParamNameType Params[] = { std::make_pair(StringRef(), QualType()) // __context with shared vars }; ActOnCapturedRegionStart(Loc, CurScope, CR_OpenMP, Params); break; } case OMPD_for: { - Sema::CapturedParamNameType Params[1] = { + Sema::CapturedParamNameType Params[] = { std::make_pair(StringRef(), QualType()) // __context with shared vars }; ActOnCapturedRegionStart(Loc, CurScope, CR_OpenMP, Params); @@ -1414,7 +1414,7 @@ static bool CheckOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, OpenMPIterationSpaceChecker ISC(SemaRef, For->getForLoc()); // Check init. - Stmt *Init = For->getInit(); + auto Init = For->getInit(); if (ISC.CheckInit(Init)) { return true; } @@ -1422,14 +1422,14 @@ static bool CheckOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, bool HasErrors = false; // Check loop variable's type. - VarDecl *Var = ISC.GetLoopVar(); + auto Var = ISC.GetLoopVar(); // OpenMP [2.6, Canonical Loop Form] // Var is one of the following: // A variable of signed or unsigned integer type. // For C++, a variable of a random access iterator type. // For C, a variable of a pointer type. - QualType VarType = Var->getType(); + auto VarType = Var->getType(); if (!VarType->isDependentType() && !VarType->isIntegerType() && !VarType->isPointerType() && !(SemaRef.getLangOpts().CPlusPlus && VarType->isOverloadableType())) { @@ -1525,18 +1525,12 @@ static bool CheckOpenMPLoop(OpenMPDirectiveKind DKind, Expr *NestedLoopCountExpr return false; } -namespace { -struct OMPCollapseClauseFilter { - OMPCollapseClauseFilter() {} - bool operator()(const OMPClause *C) { - return C->getClauseKind() == OMPC_collapse; - } -}; -} // namespace - static Expr *GetCollapseNumberExpr(ArrayRef Clauses) { - OMPExecutableDirective::filtered_clause_iterator I( - Clauses); + auto CollapseFilter = [](const OMPClause *C) -> bool { + return C->getClauseKind() == OMPC_collapse; + }; + OMPExecutableDirective::filtered_clause_iterator I( + Clauses, CollapseFilter); if (I) return cast(*I)->getNumForLoops(); return nullptr; -- cgit v1.2.3