forked from OSchip/llvm-project
[OPENMP] Code cleanup and code improvements.
llvm-svn: 330270
This commit is contained in:
parent
ccd3ecb95a
commit
e372710d30
|
@ -124,7 +124,7 @@ public:
|
|||
Stmt *getPreInitStmt() { return PreInit; }
|
||||
|
||||
/// Get capture region for the stmt in the clause.
|
||||
OpenMPDirectiveKind getCaptureRegion() { return CaptureRegion; }
|
||||
OpenMPDirectiveKind getCaptureRegion() const { return CaptureRegion; }
|
||||
|
||||
static OMPClauseWithPreInit *get(OMPClause *C);
|
||||
static const OMPClauseWithPreInit *get(const OMPClause *C);
|
||||
|
@ -3288,19 +3288,19 @@ public:
|
|||
/// expressions used in OpenMP clauses.
|
||||
class OMPClauseMappableExprCommon {
|
||||
public:
|
||||
// \brief Class that represents a component of a mappable expression. E.g.
|
||||
// for an expression S.a, the first component is a declaration reference
|
||||
// expression associated with 'S' and the second is a member expression
|
||||
// associated with the field declaration 'a'. If the expression is an array
|
||||
// subscript it may not have any associated declaration. In that case the
|
||||
// associated declaration is set to nullptr.
|
||||
/// Class that represents a component of a mappable expression. E.g.
|
||||
/// for an expression S.a, the first component is a declaration reference
|
||||
/// expression associated with 'S' and the second is a member expression
|
||||
/// associated with the field declaration 'a'. If the expression is an array
|
||||
/// subscript it may not have any associated declaration. In that case the
|
||||
/// associated declaration is set to nullptr.
|
||||
class MappableComponent {
|
||||
// \brief Expression associated with the component.
|
||||
/// Expression associated with the component.
|
||||
Expr *AssociatedExpression = nullptr;
|
||||
|
||||
// \brief Declaration associated with the declaration. If the component does
|
||||
// not have a declaration (e.g. array subscripts or section), this is set to
|
||||
// nullptr.
|
||||
/// Declaration associated with the declaration. If the component does
|
||||
/// not have a declaration (e.g. array subscripts or section), this is set
|
||||
/// to nullptr.
|
||||
ValueDecl *AssociatedDeclaration = nullptr;
|
||||
|
||||
public:
|
||||
|
@ -3339,7 +3339,7 @@ protected:
|
|||
// \brief Return the total number of elements in a list of declarations. All
|
||||
// declarations are expected to be canonical.
|
||||
static unsigned
|
||||
getUniqueDeclarationsTotalNumber(ArrayRef<ValueDecl *> Declarations);
|
||||
getUniqueDeclarationsTotalNumber(ArrayRef<const ValueDecl *> Declarations);
|
||||
};
|
||||
|
||||
/// \brief This represents clauses with a list of expressions that are mappable.
|
||||
|
|
|
@ -8633,29 +8633,29 @@ public:
|
|||
/// reference.
|
||||
/// \param Level Relative level of nested OpenMP construct for that the check
|
||||
/// is performed.
|
||||
bool IsOpenMPCapturedByRef(ValueDecl *D, unsigned Level);
|
||||
bool isOpenMPCapturedByRef(const ValueDecl *D, unsigned Level) const;
|
||||
|
||||
/// \brief Check if the specified variable is used in one of the private
|
||||
/// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP
|
||||
/// constructs.
|
||||
VarDecl *IsOpenMPCapturedDecl(ValueDecl *D);
|
||||
VarDecl *isOpenMPCapturedDecl(ValueDecl *D) const;
|
||||
ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK,
|
||||
ExprObjectKind OK, SourceLocation Loc);
|
||||
|
||||
/// \brief Check if the specified variable is used in 'private' clause.
|
||||
/// \param Level Relative level of nested OpenMP construct for that the check
|
||||
/// is performed.
|
||||
bool isOpenMPPrivateDecl(ValueDecl *D, unsigned Level);
|
||||
bool isOpenMPPrivateDecl(const ValueDecl *D, unsigned Level) const;
|
||||
|
||||
/// Sets OpenMP capture kind (OMPC_private, OMPC_firstprivate, OMPC_map etc.)
|
||||
/// for \p FD based on DSA for the provided corresponding captured declaration
|
||||
/// \p D.
|
||||
void setOpenMPCaptureKind(FieldDecl *FD, ValueDecl *D, unsigned Level);
|
||||
void setOpenMPCaptureKind(FieldDecl *FD, const ValueDecl *D, unsigned Level);
|
||||
|
||||
/// \brief Check if the specified variable is captured by 'target' directive.
|
||||
/// \param Level Relative level of nested OpenMP construct for that the check
|
||||
/// is performed.
|
||||
bool isOpenMPTargetCapturedDecl(ValueDecl *D, unsigned Level);
|
||||
bool isOpenMPTargetCapturedDecl(const ValueDecl *D, unsigned Level) const;
|
||||
|
||||
ExprResult PerformOpenMPImplicitIntegerConversion(SourceLocation OpLoc,
|
||||
Expr *Op);
|
||||
|
@ -8687,9 +8687,8 @@ public:
|
|||
SourceLocation Loc,
|
||||
ArrayRef<Expr *> VarList);
|
||||
/// \brief Builds a new OpenMPThreadPrivateDecl and checks its correctness.
|
||||
OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(
|
||||
SourceLocation Loc,
|
||||
ArrayRef<Expr *> VarList);
|
||||
OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(SourceLocation Loc,
|
||||
ArrayRef<Expr *> VarList);
|
||||
/// \brief Check if the specified type is allowed to be used in 'omp declare
|
||||
/// reduction' construct.
|
||||
QualType ActOnOpenMPDeclareReductionType(SourceLocation TyLoc,
|
||||
|
@ -8760,24 +8759,26 @@ public:
|
|||
Stmt *AStmt,
|
||||
SourceLocation StartLoc,
|
||||
SourceLocation EndLoc);
|
||||
using VarsWithInheritedDSAType =
|
||||
llvm::SmallDenseMap<const ValueDecl *, const Expr *, 4>;
|
||||
/// \brief Called on well-formed '\#pragma omp simd' after parsing
|
||||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
StmtResult
|
||||
ActOnOpenMPSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
|
||||
SourceLocation StartLoc, SourceLocation EndLoc,
|
||||
VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp for' after parsing
|
||||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPForDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
StmtResult
|
||||
ActOnOpenMPForDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
|
||||
SourceLocation StartLoc, SourceLocation EndLoc,
|
||||
VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp for simd' after parsing
|
||||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPForSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
StmtResult
|
||||
ActOnOpenMPForSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
|
||||
SourceLocation StartLoc, SourceLocation EndLoc,
|
||||
VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp sections' after parsing
|
||||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses,
|
||||
|
@ -8806,14 +8807,12 @@ public:
|
|||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPParallelForDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp parallel for simd' after
|
||||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPParallelForSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp parallel sections' after
|
||||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses,
|
||||
|
@ -8884,8 +8883,7 @@ public:
|
|||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTargetParallelForDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp teams' after parsing of the
|
||||
/// associated statement.
|
||||
StmtResult ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses,
|
||||
|
@ -8903,22 +8901,21 @@ public:
|
|||
OpenMPDirectiveKind CancelRegion);
|
||||
/// \brief Called on well-formed '\#pragma omp taskloop' after parsing of the
|
||||
/// associated statement.
|
||||
StmtResult ActOnOpenMPTaskLoopDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
StmtResult
|
||||
ActOnOpenMPTaskLoopDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
|
||||
SourceLocation StartLoc, SourceLocation EndLoc,
|
||||
VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp taskloop simd' after parsing of
|
||||
/// the associated statement.
|
||||
StmtResult ActOnOpenMPTaskLoopSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp distribute' after parsing
|
||||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPDistributeDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
StmtResult
|
||||
ActOnOpenMPDistributeDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
|
||||
SourceLocation StartLoc, SourceLocation EndLoc,
|
||||
VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp target update'.
|
||||
StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses,
|
||||
SourceLocation StartLoc,
|
||||
|
@ -8928,56 +8925,48 @@ public:
|
|||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPDistributeParallelForDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp distribute parallel for simd'
|
||||
/// after parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPDistributeParallelForSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp distribute simd' after
|
||||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPDistributeSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp target parallel for simd' after
|
||||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTargetParallelForSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// \brief Called on well-formed '\#pragma omp target simd' after parsing of
|
||||
/// the associated statement.
|
||||
StmtResult ActOnOpenMPTargetSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
StmtResult
|
||||
ActOnOpenMPTargetSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
|
||||
SourceLocation StartLoc, SourceLocation EndLoc,
|
||||
VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp teams distribute' after parsing of
|
||||
/// the associated statement.
|
||||
StmtResult ActOnOpenMPTeamsDistributeDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp teams distribute simd' after parsing
|
||||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPTeamsDistributeSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp teams distribute parallel for simd'
|
||||
/// after parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTeamsDistributeParallelForSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp teams distribute parallel for'
|
||||
/// after parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTeamsDistributeParallelForDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp target teams' after parsing of the
|
||||
/// associated statement.
|
||||
StmtResult ActOnOpenMPTargetTeamsDirective(ArrayRef<OMPClause *> Clauses,
|
||||
|
@ -8988,33 +8977,29 @@ public:
|
|||
/// of the associated statement.
|
||||
StmtResult ActOnOpenMPTargetTeamsDistributeDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp target teams distribute parallel for'
|
||||
/// after parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTargetTeamsDistributeParallelForDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp target teams distribute parallel for
|
||||
/// simd' after parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTargetTeamsDistributeParallelForSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
/// Called on well-formed '\#pragma omp target teams distribute simd' after
|
||||
/// parsing of the associated statement.
|
||||
StmtResult ActOnOpenMPTargetTeamsDistributeSimdDirective(
|
||||
ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
|
||||
SourceLocation EndLoc,
|
||||
llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
|
||||
SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
|
||||
|
||||
/// Checks correctness of linear modifiers.
|
||||
bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind,
|
||||
SourceLocation LinLoc);
|
||||
/// Checks that the specified declaration matches requirements for the linear
|
||||
/// decls.
|
||||
bool CheckOpenMPLinearDecl(ValueDecl *D, SourceLocation ELoc,
|
||||
bool CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc,
|
||||
OpenMPLinearClauseKind LinKind, QualType Type);
|
||||
|
||||
/// \brief Called on well-formed '\#pragma omp declare simd' after parsing of
|
||||
|
|
|
@ -702,10 +702,10 @@ unsigned OMPClauseMappableExprCommon::getComponentsTotalNumber(
|
|||
}
|
||||
|
||||
unsigned OMPClauseMappableExprCommon::getUniqueDeclarationsTotalNumber(
|
||||
ArrayRef<ValueDecl *> Declarations) {
|
||||
ArrayRef<const ValueDecl *> Declarations) {
|
||||
unsigned TotalNum = 0u;
|
||||
llvm::SmallPtrSet<const ValueDecl *, 8> Cache;
|
||||
for (auto *D : Declarations) {
|
||||
for (const ValueDecl *D : Declarations) {
|
||||
const ValueDecl *VD = D ? cast<ValueDecl>(D->getCanonicalDecl()) : nullptr;
|
||||
if (Cache.count(VD))
|
||||
continue;
|
||||
|
|
|
@ -14381,7 +14381,7 @@ static bool captureInBlock(BlockScopeInfo *BSI, VarDecl *Var,
|
|||
|
||||
const bool HasBlocksAttr = Var->hasAttr<BlocksAttr>();
|
||||
if (HasBlocksAttr || CaptureType->isReferenceType() ||
|
||||
(S.getLangOpts().OpenMP && S.IsOpenMPCapturedDecl(Var))) {
|
||||
(S.getLangOpts().OpenMP && S.isOpenMPCapturedDecl(Var))) {
|
||||
// Block capture by reference does not change the capture or
|
||||
// declaration reference types.
|
||||
ByRef = true;
|
||||
|
@ -14454,14 +14454,14 @@ static bool captureInCapturedRegion(CapturedRegionScopeInfo *RSI,
|
|||
bool ByRef = true;
|
||||
// Using an LValue reference type is consistent with Lambdas (see below).
|
||||
if (S.getLangOpts().OpenMP && RSI->CapRegionKind == CR_OpenMP) {
|
||||
if (S.IsOpenMPCapturedDecl(Var)) {
|
||||
if (S.isOpenMPCapturedDecl(Var)) {
|
||||
bool HasConst = DeclRefType.isConstQualified();
|
||||
DeclRefType = DeclRefType.getUnqualifiedType();
|
||||
// Don't lose diagnostics about assignments to const.
|
||||
if (HasConst)
|
||||
DeclRefType.addConst();
|
||||
}
|
||||
ByRef = S.IsOpenMPCapturedByRef(Var, RSI->OpenMPLevel);
|
||||
ByRef = S.isOpenMPCapturedByRef(Var, RSI->OpenMPLevel);
|
||||
}
|
||||
|
||||
if (ByRef)
|
||||
|
@ -14653,7 +14653,7 @@ bool Sema::tryCaptureVariable(
|
|||
// Capture global variables if it is required to use private copy of this
|
||||
// variable.
|
||||
bool IsGlobal = !Var->hasLocalStorage();
|
||||
if (IsGlobal && !(LangOpts.OpenMP && IsOpenMPCapturedDecl(Var)))
|
||||
if (IsGlobal && !(LangOpts.OpenMP && isOpenMPCapturedDecl(Var)))
|
||||
return true;
|
||||
Var = Var->getCanonicalDecl();
|
||||
|
||||
|
@ -15018,7 +15018,7 @@ static void DoMarkVarDeclReferenced(Sema &SemaRef, SourceLocation Loc,
|
|||
// A reference initialized by a constant expression can never be
|
||||
// odr-used, so simply ignore it.
|
||||
if (!Var->getType()->isReferenceType() ||
|
||||
(SemaRef.LangOpts.OpenMP && SemaRef.IsOpenMPCapturedDecl(Var)))
|
||||
(SemaRef.LangOpts.OpenMP && SemaRef.isOpenMPCapturedDecl(Var)))
|
||||
SemaRef.MaybeODRUseExprs.insert(E);
|
||||
} else if (OdrUseContext) {
|
||||
MarkVarDeclODRUsed(Var, Loc, SemaRef,
|
||||
|
|
|
@ -1779,7 +1779,7 @@ Sema::BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
|
|||
if (getLangOpts().OpenMP && IsArrow &&
|
||||
!CurContext->isDependentContext() &&
|
||||
isa<CXXThisExpr>(Base.get()->IgnoreParenImpCasts())) {
|
||||
if (auto *PrivateCopy = IsOpenMPCapturedDecl(Field)) {
|
||||
if (auto *PrivateCopy = isOpenMPCapturedDecl(Field)) {
|
||||
return getOpenMPCapturedExpr(PrivateCopy, VK, OK,
|
||||
MemberNameInfo.getLoc());
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -24,18 +24,18 @@ tx ftemplate(int n) {
|
|||
float d;
|
||||
double e;
|
||||
|
||||
#pragma omp target parallel reduction(+: e) map(tofrom: e)
|
||||
#pragma omp target parallel reduction(+: e)
|
||||
{
|
||||
e += 5;
|
||||
}
|
||||
|
||||
#pragma omp target parallel reduction(^: c) reduction(*: d) map(tofrom: c,d)
|
||||
#pragma omp target parallel reduction(^: c) reduction(*: d)
|
||||
{
|
||||
c ^= 2;
|
||||
d *= 33;
|
||||
}
|
||||
|
||||
#pragma omp target parallel reduction(|: a) reduction(max: b) map(tofrom: a,b)
|
||||
#pragma omp target parallel reduction(|: a) reduction(max: b)
|
||||
{
|
||||
a |= 1;
|
||||
b = 99 > b ? 99 : b;
|
||||
|
|
Loading…
Reference in New Issue