diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2019-03-12 18:52:33 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2019-03-12 18:52:33 +0000 |
commit | 9cc10fc926526139559a88d1ac2b13f563cba7f3 (patch) | |
tree | b75e2a82a4ab49ebd2f0eec49ff43ed33bafa748 /clang/lib/Serialization | |
parent | 85c2955f455ef12fc2c466b98794f9606684d070 (diff) | |
download | bcm5719-llvm-9cc10fc926526139559a88d1ac2b13f563cba7f3.tar.gz bcm5719-llvm-9cc10fc926526139559a88d1ac2b13f563cba7f3.zip |
[OPENMP 5.0]Initial support for 'allocator' clause.
Added parsing/sema analysis/serialization/deserialization for the
'allocator' clause of the 'allocate' directive.
llvm-svn: 355952
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 18 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriterDecl.cpp | 4 |
4 files changed, 32 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 1ab6a75f8cd..5ca5e8de556 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -11704,6 +11704,9 @@ OMPClause *OMPClauseReader::readClause() { case OMPC_simdlen: C = new (Context) OMPSimdlenClause(); break; + case OMPC_allocator: + C = new (Context) OMPAllocatorClause(); + break; case OMPC_collapse: C = new (Context) OMPCollapseClause(); break; @@ -11929,6 +11932,11 @@ void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) { C->setLParenLoc(Record.readSourceLocation()); } +void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) { + C->setAllocator(Record.readExpr()); + C->setLParenLoc(Record.readSourceLocation()); +} + void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) { C->setNumForLoops(Record.readSubExpr()); C->setLParenLoc(Record.readSourceLocation()); diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 760489d172d..f37372fcb08 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -2637,12 +2637,19 @@ void ASTDeclReader::VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D) { void ASTDeclReader::VisitOMPAllocateDecl(OMPAllocateDecl *D) { VisitDecl(D); unsigned NumVars = D->varlist_size(); + unsigned NumClauses = D->clauselist_size(); SmallVector<Expr *, 16> Vars; Vars.reserve(NumVars); for (unsigned i = 0; i != NumVars; ++i) { Vars.push_back(Record.readExpr()); } D->setVars(Vars); + SmallVector<OMPClause *, 8> Clauses; + Clauses.reserve(NumClauses); + OMPClauseReader ClauseReader(Record); + for (unsigned I = 0; I != NumClauses; ++I) + Clauses.push_back(ClauseReader.readClause()); + D->setClauses(Clauses); } void ASTDeclReader::VisitOMPRequiresDecl(OMPRequiresDecl * D) { @@ -3878,9 +3885,12 @@ Decl *ASTReader::ReadDeclRecord(DeclID ID) { case DECL_OMP_THREADPRIVATE: D = OMPThreadPrivateDecl::CreateDeserialized(Context, ID, Record.readInt()); break; - case DECL_OMP_ALLOCATE: - D = OMPAllocateDecl::CreateDeserialized(Context, ID, Record.readInt()); + case DECL_OMP_ALLOCATE: { + unsigned NumVars = Record.readInt(); + unsigned NumClauses = Record.readInt(); + D = OMPAllocateDecl::CreateDeserialized(Context, ID, NumVars, NumClauses); break; + } case DECL_OMP_REQUIRES: D = OMPRequiresDecl::CreateDeserialized(Context, ID, Record.readInt()); break; @@ -4481,8 +4491,8 @@ void ASTDeclReader::UpdateDecl(Decl *D, break; case UPD_DECL_MARKED_OPENMP_ALLOCATE: - D->addAttr(OMPAllocateDeclAttr::CreateImplicit(Reader.getContext(), - ReadSourceRange())); + D->addAttr(OMPAllocateDeclAttr::CreateImplicit( + Reader.getContext(), Record.readExpr(), ReadSourceRange())); break; case UPD_DECL_EXPORTED: { diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 933cc6b12c6..03956050a3f 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -5291,6 +5291,7 @@ void ASTWriter::WriteDeclUpdatesBlocks(RecordDataImpl &OffsetsRecord) { break; case UPD_DECL_MARKED_OPENMP_ALLOCATE: + Record.AddStmt(D->getAttr<OMPAllocateDeclAttr>()->getAllocator()); Record.AddSourceRange(D->getAttr<OMPAllocateDeclAttr>()->getRange()); break; @@ -6534,6 +6535,11 @@ void OMPClauseWriter::VisitOMPSimdlenClause(OMPSimdlenClause *C) { Record.AddSourceLocation(C->getLParenLoc()); } +void OMPClauseWriter::VisitOMPAllocatorClause(OMPAllocatorClause *C) { + Record.AddStmt(C->getAllocator()); + Record.AddSourceLocation(C->getLParenLoc()); +} + void OMPClauseWriter::VisitOMPCollapseClause(OMPCollapseClause *C) { Record.AddStmt(C->getNumForLoops()); Record.AddSourceLocation(C->getLParenLoc()); diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index cfcd81b3e1e..37173e862cd 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -1747,9 +1747,13 @@ void ASTDeclWriter::VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D) { void ASTDeclWriter::VisitOMPAllocateDecl(OMPAllocateDecl *D) { Record.push_back(D->varlist_size()); + Record.push_back(D->clauselist_size()); VisitDecl(D); for (auto *I : D->varlists()) Record.AddStmt(I); + OMPClauseWriter ClauseWriter(Record); + for (OMPClause *C : D->clauselists()) + ClauseWriter.writeClause(C); Code = serialization::DECL_OMP_ALLOCATE; } |