r211672 - [OPENMP] OMPSimdDirective and OMPForDirective: added initialization for CollapsedNum member.
Alexey Bataev
a.bataev at hotmail.com
Tue Jun 24 23:52:00 PDT 2014
Author: abataev
Date: Wed Jun 25 01:52:00 2014
New Revision: 211672
URL: http://llvm.org/viewvc/llvm-project?rev=211672&view=rev
Log:
[OPENMP] OMPSimdDirective and OMPForDirective: added initialization for CollapsedNum member.
Modified:
cfe/trunk/include/clang/AST/StmtOpenMP.h
cfe/trunk/lib/AST/Stmt.cpp
cfe/trunk/lib/Sema/SemaOpenMP.cpp
Modified: cfe/trunk/include/clang/AST/StmtOpenMP.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/StmtOpenMP.h?rev=211672&r1=211671&r2=211672&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/StmtOpenMP.h (original)
+++ cfe/trunk/include/clang/AST/StmtOpenMP.h Wed Jun 25 01:52:00 2014
@@ -270,11 +270,12 @@ public:
/// \param C AST context.
/// \param StartLoc Starting location of the directive kind.
/// \param EndLoc Ending Location of the directive.
+ /// \param CollapsedNum Number of collapsed loops.
/// \param Clauses List of clauses.
/// \param AssociatedStmt Statement, associated with the directive.
///
static OMPSimdDirective *Create(const ASTContext &C, SourceLocation StartLoc,
- SourceLocation EndLoc,
+ SourceLocation EndLoc, unsigned CollapsedNum,
ArrayRef<OMPClause *> Clauses,
Stmt *AssociatedStmt);
@@ -338,11 +339,12 @@ public:
/// \param C AST context.
/// \param StartLoc Starting location of the directive kind.
/// \param EndLoc Ending Location of the directive.
+ /// \param CollapsedNum Number of collapsed loops.
/// \param Clauses List of clauses.
/// \param AssociatedStmt Statement, associated with the directive.
///
static OMPForDirective *Create(const ASTContext &C, SourceLocation StartLoc,
- SourceLocation EndLoc,
+ SourceLocation EndLoc, unsigned CollapsedNum,
ArrayRef<OMPClause *> Clauses,
Stmt *AssociatedStmt);
Modified: cfe/trunk/lib/AST/Stmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Stmt.cpp?rev=211672&r1=211671&r2=211672&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Stmt.cpp (original)
+++ cfe/trunk/lib/AST/Stmt.cpp Wed Jun 25 01:52:00 2014
@@ -1334,17 +1334,16 @@ OMPParallelDirective *OMPParallelDirecti
return new (Mem) OMPParallelDirective(NumClauses);
}
-OMPSimdDirective *OMPSimdDirective::Create(const ASTContext &C,
- SourceLocation StartLoc,
- SourceLocation EndLoc,
- ArrayRef<OMPClause *> Clauses,
- Stmt *AssociatedStmt) {
+OMPSimdDirective *
+OMPSimdDirective::Create(const ASTContext &C, SourceLocation StartLoc,
+ SourceLocation EndLoc, unsigned CollapsedNum,
+ ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPSimdDirective),
llvm::alignOf<OMPClause *>());
- void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
- sizeof(Stmt *));
- OMPSimdDirective *Dir = new (Mem) OMPSimdDirective(StartLoc, EndLoc,
- 1, Clauses.size());
+ void *Mem =
+ C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
+ OMPSimdDirective *Dir = new (Mem)
+ OMPSimdDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
Dir->setClauses(Clauses);
Dir->setAssociatedStmt(AssociatedStmt);
return Dir;
@@ -1356,22 +1355,21 @@ OMPSimdDirective *OMPSimdDirective::Crea
EmptyShell) {
unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPSimdDirective),
llvm::alignOf<OMPClause *>());
- void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
- sizeof(Stmt *));
+ void *Mem =
+ C.Allocate(Size + sizeof(OMPClause *) * NumClauses + sizeof(Stmt *));
return new (Mem) OMPSimdDirective(CollapsedNum, NumClauses);
}
-OMPForDirective *OMPForDirective::Create(const ASTContext &C,
- SourceLocation StartLoc,
- SourceLocation EndLoc,
- ArrayRef<OMPClause *> Clauses,
- Stmt *AssociatedStmt) {
+OMPForDirective *
+OMPForDirective::Create(const ASTContext &C, SourceLocation StartLoc,
+ SourceLocation EndLoc, unsigned CollapsedNum,
+ ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt) {
unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPForDirective),
llvm::alignOf<OMPClause *>());
void *Mem =
C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() + sizeof(Stmt *));
OMPForDirective *Dir =
- new (Mem) OMPForDirective(StartLoc, EndLoc, 1, Clauses.size());
+ new (Mem) OMPForDirective(StartLoc, EndLoc, CollapsedNum, Clauses.size());
Dir->setClauses(Clauses);
Dir->setAssociatedStmt(AssociatedStmt);
return Dir;
Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=211672&r1=211671&r2=211672&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original)
+++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Wed Jun 25 01:52:00 2014
@@ -1500,8 +1500,11 @@ static Stmt *IgnoreContainerStmts(Stmt *
}
/// \brief Called on a for stmt to check itself and nested loops (if any).
-static bool CheckOpenMPLoop(OpenMPDirectiveKind DKind, Expr *NestedLoopCountExpr,
- Stmt *AStmt, Sema &SemaRef, DSAStackTy &DSA) {
+/// \return Returns 0 if one of the collapsed stmts is not canonical for loop,
+/// number of collapsed loops otherwise.
+static unsigned CheckOpenMPLoop(OpenMPDirectiveKind DKind,
+ Expr *NestedLoopCountExpr, Stmt *AStmt,
+ Sema &SemaRef, DSAStackTy &DSA) {
unsigned NestedLoopCount = 1;
if (NestedLoopCountExpr) {
// Found 'collapse' clause - calculate collapse number.
@@ -1515,14 +1518,14 @@ static bool CheckOpenMPLoop(OpenMPDirect
for (unsigned Cnt = 0; Cnt < NestedLoopCount; ++Cnt) {
if (CheckOpenMPIterationSpace(DKind, CurStmt, SemaRef, DSA, Cnt,
NestedLoopCount, NestedLoopCountExpr))
- return true;
+ return 0;
// Move on to the next nested for loop, or to the loop body.
CurStmt = IgnoreContainerStmts(cast<ForStmt>(CurStmt)->getBody(), false);
}
// FIXME: Build resulting iteration space for IR generation (collapsing
// iteration spaces when loop count > 1 ('collapse' clause)).
- return false;
+ return NestedLoopCount;
}
static Expr *GetCollapseNumberExpr(ArrayRef<OMPClause *> Clauses) {
@@ -1540,24 +1543,28 @@ StmtResult Sema::ActOnOpenMPSimdDirectiv
Stmt *AStmt, SourceLocation StartLoc,
SourceLocation EndLoc) {
// In presence of clause 'collapse', it will define the nested loops number.
- if (CheckOpenMPLoop(OMPD_simd, GetCollapseNumberExpr(Clauses),
- AStmt, *this, *DSAStack))
+ unsigned NestedLoopCount = CheckOpenMPLoop(
+ OMPD_simd, GetCollapseNumberExpr(Clauses), AStmt, *this, *DSAStack);
+ if (NestedLoopCount == 0)
return StmtError();
getCurFunction()->setHasBranchProtectedScope();
- return OMPSimdDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt);
+ return OMPSimdDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount,
+ Clauses, AStmt);
}
StmtResult Sema::ActOnOpenMPForDirective(ArrayRef<OMPClause *> Clauses,
Stmt *AStmt, SourceLocation StartLoc,
SourceLocation EndLoc) {
// In presence of clause 'collapse', it will define the nested loops number.
- if (CheckOpenMPLoop(OMPD_for, GetCollapseNumberExpr(Clauses),
- AStmt, *this, *DSAStack))
+ unsigned NestedLoopCount = CheckOpenMPLoop(
+ OMPD_for, GetCollapseNumberExpr(Clauses), AStmt, *this, *DSAStack);
+ if (NestedLoopCount == 0)
return StmtError();
getCurFunction()->setHasBranchProtectedScope();
- return OMPForDirective::Create(Context, StartLoc, EndLoc, Clauses, AStmt);
+ return OMPForDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount,
+ Clauses, AStmt);
}
OMPClause *Sema::ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind, Expr *Expr,
More information about the cfe-commits
mailing list