clang
3.7.0
|
This file implements semantic analysis for OpenMP directives and clauses. More...
#include "TreeTransform.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclOpenMP.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtOpenMP.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/OpenMPKinds.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaInternal.h"
Go to the source code of this file.
Macros | |
#define | DSAStack static_cast<DSAStackTy *>(VarDataSharingAttributesStack) |
Enumerations | |
enum | DefaultDataSharingAttributes |
Default data sharing attributes, which can be applied to directive. More... | |
Functions | |
static VarDecl * | buildVarDecl (Sema &SemaRef, SourceLocation Loc, QualType Type, StringRef Name) |
Build a variable declaration for OpenMP loop iteration variable. More... | |
static DeclRefExpr * | buildDeclRefExpr (Sema &S, VarDecl *D, QualType Ty, SourceLocation Loc, bool RefersToCapture=false) |
static bool | FinishOpenMPLinearClause (OMPLinearClause &Clause, DeclRefExpr *IV, Expr *NumIterations, Sema &SemaRef, Scope *S) |
static void | ReportOriginalDSA (Sema &SemaRef, DSAStackTy *Stack, const VarDecl *VD, DSAStackTy::DSAVarData DVar, bool IsLoopIterVar=false) |
static bool | CheckNestingOfRegions (Sema &SemaRef, DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, SourceLocation StartLoc) |
static bool | CheckOpenMPIterationSpace (OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, Expr *NestedLoopCountExpr, llvm::DenseMap< VarDecl *, Expr * > &VarsWithImplicitDSA, LoopIterationSpace &ResultIterSpace) |
Called on a for stmt to check and extract its iteration space for further processing (such as collapsing). More... | |
static ExprResult | BuildCounterInit (Sema &SemaRef, Scope *S, SourceLocation Loc, ExprResult VarRef, ExprResult Start) |
Build 'VarRef = Start. More... | |
static ExprResult | BuildCounterUpdate (Sema &SemaRef, Scope *S, SourceLocation Loc, ExprResult VarRef, ExprResult Start, ExprResult Iter, ExprResult Step, bool Subtract) |
Build 'VarRef = Start + Iter * Step'. More... | |
static ExprResult | WidenIterationCount (unsigned Bits, Expr *E, Sema &SemaRef) |
Convert integer expression E to make it have at least Bits bits. More... | |
static bool | FitsInto (unsigned Bits, bool Signed, Expr *E, Sema &SemaRef) |
Check if the given expression E is a constant integer that fits into Bits bits. More... | |
static unsigned | CheckOpenMPLoop (OpenMPDirectiveKind DKind, Expr *NestedLoopCountExpr, Stmt *AStmt, Sema &SemaRef, DSAStackTy &DSA, llvm::DenseMap< VarDecl *, Expr * > &VarsWithImplicitDSA, OMPLoopDirective::HelperExprs &Built) |
Called on a for stmt to check itself and nested loops (if any). More... | |
static Expr * | GetCollapseNumberExpr (ArrayRef< OMPClause * > Clauses) |
This file implements semantic analysis for OpenMP directives and clauses.
Definition in file SemaOpenMP.cpp.
#define DSAStack static_cast<DSAStackTy *>(VarDataSharingAttributesStack) |
Definition at line 656 of file SemaOpenMP.cpp.
Referenced by clang::Sema::ActOnOpenMPAlignedClause(), clang::Sema::ActOnOpenMPCancelDirective(), clang::Sema::ActOnOpenMPCancellationPointDirective(), clang::Sema::ActOnOpenMPCopyinClause(), clang::Sema::ActOnOpenMPCopyprivateClause(), clang::Sema::ActOnOpenMPDefaultClause(), clang::Sema::ActOnOpenMPExecutableDirective(), clang::Sema::ActOnOpenMPFinalClause(), clang::Sema::ActOnOpenMPFirstprivateClause(), clang::Sema::ActOnOpenMPForDirective(), clang::Sema::ActOnOpenMPForSimdDirective(), clang::Sema::ActOnOpenMPIdExpression(), clang::Sema::ActOnOpenMPIfClause(), clang::Sema::ActOnOpenMPLastprivateClause(), clang::Sema::ActOnOpenMPLinearClause(), clang::Sema::ActOnOpenMPLoopInitialization(), clang::Sema::ActOnOpenMPNowaitClause(), clang::Sema::ActOnOpenMPOrderedClause(), clang::Sema::ActOnOpenMPParallelForDirective(), clang::Sema::ActOnOpenMPParallelForSimdDirective(), clang::Sema::ActOnOpenMPPrivateClause(), clang::Sema::ActOnOpenMPReductionClause(), clang::Sema::ActOnOpenMPRegionEnd(), clang::Sema::ActOnOpenMPRegionStart(), clang::Sema::ActOnOpenMPScheduleClause(), clang::Sema::ActOnOpenMPSharedClause(), clang::Sema::ActOnOpenMPSimdDirective(), clang::Sema::ActOnOpenMPTargetDirective(), clang::Sema::CheckOMPThreadPrivateDecl(), clang::Sema::EndOpenMPClause(), clang::Sema::EndOpenMPDSABlock(), clang::Sema::IsOpenMPCapturedVar(), clang::Sema::isOpenMPPrivateVar(), clang::Sema::StartOpenMPClause(), and clang::Sema::StartOpenMPDSABlock().
Default data sharing attributes, which can be applied to directive.
Definition at line 40 of file SemaOpenMP.cpp.
|
static |
Build 'VarRef = Start.
Definition at line 2988 of file SemaOpenMP.cpp.
References clang::Sema::AA_Converting, clang::BO_Assign, clang::Sema::BuildBinOp(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Expr::getType(), clang::Expr::IgnoreImplicit(), and clang::Sema::PerformImplicitConversion().
Referenced by CheckOpenMPLoop().
|
static |
Build 'VarRef = Start + Iter * Step'.
Definition at line 3013 of file SemaOpenMP.cpp.
References clang::Sema::AA_Converting, clang::Sema::ActOnParenExpr(), clang::BO_Add, clang::BO_Assign, clang::BO_Mul, clang::BO_Sub, clang::Sema::BuildBinOp(), clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Expr::getType(), clang::Expr::IgnoreImplicit(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), and clang::Sema::PerformImplicitConversion().
Referenced by CheckOpenMPLoop(), and FinishOpenMPLinearClause().
|
static |
Definition at line 465 of file SemaOpenMP.cpp.
References clang::Sema::Context, clang::DeclRefExpr::Create(), clang::Sema::getASTContext(), clang::Decl::markUsed(), clang::Decl::setReferenced(), and clang::VK_LValue.
Referenced by clang::Sema::ActOnOpenMPCopyinClause(), clang::Sema::ActOnOpenMPCopyprivateClause(), clang::Sema::ActOnOpenMPFirstprivateClause(), clang::Sema::ActOnOpenMPIdExpression(), clang::Sema::ActOnOpenMPLastprivateClause(), clang::Sema::ActOnOpenMPLinearClause(), clang::Sema::ActOnOpenMPPrivateClause(), clang::Sema::ActOnOpenMPReductionClause(), clang::Sema::ActOnOpenMPScheduleClause(), CheckOpenMPLoop(), clang::Sema::EndOpenMPDSABlock(), and FinishOpenMPLinearClause().
|
static |
Build a variable declaration for OpenMP loop iteration variable.
Definition at line 454 of file SemaOpenMP.cpp.
References clang::Sema::Context, clang::VarDecl::Create(), clang::Sema::CurContext, clang::IdentifierTable::get(), clang::Preprocessor::getIdentifierTable(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::Sema::PP, clang::SC_None, and clang::Decl::setImplicit().
Referenced by clang::Sema::ActOnOpenMPCopyinClause(), clang::Sema::ActOnOpenMPCopyprivateClause(), clang::Sema::ActOnOpenMPFirstprivateClause(), clang::Sema::ActOnOpenMPLastprivateClause(), clang::Sema::ActOnOpenMPLinearClause(), clang::Sema::ActOnOpenMPPrivateClause(), clang::Sema::ActOnOpenMPReductionClause(), clang::Sema::ActOnOpenMPScheduleClause(), CheckOpenMPLoop(), and clang::Sema::EndOpenMPDSABlock().
|
static |
Definition at line 1388 of file SemaOpenMP.cpp.
References clang::Sema::Diag(), clang::DeclarationNameInfo::getName(), clang::getOpenMPDirectiveName(), clang::isOpenMPParallelDirective(), clang::isOpenMPSimdDirective(), clang::isOpenMPTeamsDirective(), clang::isOpenMPWorksharingDirective(), clang::SourceLocation::isValid(), and clang::OMPD_unknown.
Referenced by clang::Sema::ActOnOpenMPExecutableDirective().
|
static |
Called on a for stmt to check and extract its iteration space for further processing (such as collapsing).
Definition at line 2856 of file SemaOpenMP.cpp.
References clang::Sema::CurContext, clang::Sema::Diag(), clang::Expr::getExprLoc(), clang::Sema::getLangOpts(), clang::getOpenMPClauseName(), clang::getOpenMPDirectiveName(), clang::Expr::getType(), clang::DeclContext::isDependentContext(), clang::isOpenMPLoopDirective(), clang::isOpenMPPrivate(), clang::isOpenMPSimdDirective(), clang::isOpenMPWorksharingDirective(), clang::OMPC_threadprivate, clang::OMPC_unknown, ReportOriginalDSA(), and S.
Referenced by CheckOpenMPLoop().
|
static |
Called on a for stmt to check itself and nested loops (if any).
Definition at line 3094 of file SemaOpenMP.cpp.
References clang::Sema::AA_Converting, clang::Sema::ActOnConditionalOp(), clang::Sema::ActOnFinishFullExpr(), clang::Sema::ActOnIntegerConstant(), clang::Sema::ActOnParenExpr(), clang::Sema::AddInitializerToDecl(), clang::BO_Add, clang::BO_Assign, clang::BO_Div, clang::BO_GT, clang::BO_LAnd, clang::BO_LT, clang::BO_Mul, clang::BO_Rem, clang::BO_Sub, clang::Sema::BuildBinOp(), BuildCounterInit(), BuildCounterUpdate(), buildDeclRefExpr(), buildVarDecl(), AttributeLangSupport::C, clang::OMPLoopDirective::HelperExprs::CalcLastIteration, CheckOpenMPIterationSpace(), clang::OMPLoopDirective::HelperExprs::clear(), clang::OMPLoopDirective::HelperExprs::Cond, clang::Sema::Context, clang::OMPLoopDirective::HelperExprs::Counters, clang::Sema::CurContext, clang::OMPLoopDirective::HelperExprs::EUB, clang::Expr::EvaluateAsInt(), clang::OMPLoopDirective::HelperExprs::Finals, FitsInto(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Sema::getASTContext(), clang::ASTContext::getIntTypeForBitwidth(), clang::Expr::getType(), clang::Type::hasSignedIntegerRepresentation(), clang::OMPLoopDirective::HelperExprs::IL, clang::OMPLoopDirective::HelperExprs::Inc, clang::OMPLoopDirective::HelperExprs::Init, clang::OMPLoopDirective::HelperExprs::Inits, clang::DeclContext::isDependentContext(), clang::Expr::isIntegerConstantExpr(), clang::isOpenMPWorksharingDirective(), clang::ActionResult< PtrTy, CompressInvalid >::isUnset(), clang::ActionResult< PtrTy, CompressInvalid >::isUsable(), clang::OMPLoopDirective::HelperExprs::IterationVarRef, clang::OMPLoopDirective::HelperExprs::LastIteration, clang::OMPLoopDirective::HelperExprs::LB, clang::OMPLoopDirective::HelperExprs::NLB, clang::OMPLoopDirective::HelperExprs::NUB, clang::OMPLoopDirective::HelperExprs::NumIterations, clang::Sema::PerformImplicitConversion(), clang::OMPLoopDirective::HelperExprs::PreCond, clang::Result, clang::OMPLoopDirective::HelperExprs::ST, clang::OMPLoopDirective::HelperExprs::UB, clang::OMPLoopDirective::HelperExprs::Updates, and WidenIterationCount().
Referenced by clang::Sema::ActOnOpenMPForDirective(), clang::Sema::ActOnOpenMPForSimdDirective(), clang::Sema::ActOnOpenMPParallelForDirective(), clang::Sema::ActOnOpenMPParallelForSimdDirective(), and clang::Sema::ActOnOpenMPSimdDirective().
|
static |
Definition at line 6378 of file SemaOpenMP.cpp.
References clang::Sema::ActOnFinishFullExpr(), clang::Sema::ActOnIntegerConstant(), BuildCounterUpdate(), buildDeclRefExpr(), CalcStep, Finals, clang::ActionResult< PtrTy, CompressInvalid >::get(), Step, Updates, and clang::OMPVarListClause< T >::varlists().
Referenced by clang::Sema::ActOnOpenMPForSimdDirective(), clang::Sema::ActOnOpenMPParallelForSimdDirective(), and clang::Sema::ActOnOpenMPSimdDirective().
Check if the given expression E is a constant integer that fits into Bits bits.
Definition at line 3081 of file SemaOpenMP.cpp.
References clang::Sema::Context, clang::Expr::isIntegerConstantExpr(), and clang::Result.
Referenced by CheckOpenMPLoop().
Definition at line 3470 of file SemaOpenMP.cpp.
References AttributeLangSupport::C.
Referenced by clang::Sema::ActOnOpenMPForDirective(), clang::Sema::ActOnOpenMPForSimdDirective(), clang::Sema::ActOnOpenMPParallelForDirective(), clang::Sema::ActOnOpenMPParallelForSimdDirective(), and clang::Sema::ActOnOpenMPSimdDirective().
|
static |
Definition at line 1017 of file SemaOpenMP.cpp.
References clang::Sema::Diag(), clang::Sema::getASTContext(), clang::Decl::getLocation(), clang::getOpenMPClauseName(), clang::getOpenMPDirectiveName(), clang::ValueDecl::getType(), clang::QualType::isConstant(), clang::VarDecl::isFileVarDecl(), clang::VarDecl::isLocalVarDecl(), clang::VarDecl::isStaticDataMember(), and clang::VarDecl::isStaticLocal().
Referenced by clang::Sema::ActOnOpenMPCopyprivateClause(), clang::Sema::ActOnOpenMPFirstprivateClause(), clang::Sema::ActOnOpenMPLastprivateClause(), clang::Sema::ActOnOpenMPLinearClause(), clang::Sema::ActOnOpenMPPrivateClause(), clang::Sema::ActOnOpenMPReductionClause(), clang::Sema::ActOnOpenMPSharedClause(), and CheckOpenMPIterationSpace().
|
static |
Convert integer expression E to make it have at least Bits bits.
Definition at line 3064 of file SemaOpenMP.cpp.
References AttributeLangSupport::C, clang::Sema::Context, clang::ExprError(), clang::Expr::getType(), and clang::Sema::PerformImplicitConversion().
Referenced by CheckOpenMPLoop().