From 9772000a2250e81654b97f8e54904a96a20c4a86 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Tue, 11 Nov 2014 04:05:39 +0000 Subject: [OPENMP] Codegen for threadprivate variables For all threadprivate variables which have constructor/destructor emit call to void __kmpc_threadprivate_register(ident_t * , void *, kmpc_ctor , kmpc_cctor NULL, kmpc_dtor ); In expressions all references to such variables are replaced by calls to void *__kmpc_threadprivate_cached(ident_t *, kmp_int32 , void *, size_t , void ***); Test test/OpenMP/threadprivate_codegen.cpp checks that codegen is correct. Also it checks that codegen is correct after serialization/deserialization and one of passes verifies debug info. Differential Revision: http://reviews.llvm.org/D4002 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit llvm-svn: 221663 --- clang/lib/Serialization/ASTWriter.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'clang/lib/Serialization/ASTWriter.cpp') diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 3f6d4fc6cce..3fe6008a94d 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -4788,6 +4788,10 @@ void ASTWriter::WriteDeclUpdatesBlocks(RecordDataImpl &OffsetsRecord) { case UPD_STATIC_LOCAL_NUMBER: Record.push_back(Update.getNumber()); break; + case UPD_DECL_MARKED_OPENMP_THREADPRIVATE: + AddSourceRange(D->getAttr()->getRange(), + Record); + break; } } @@ -5881,3 +5885,11 @@ void ASTWriter::DeclarationMarkedUsed(const Decl *D) { DeclUpdates[D].push_back(DeclUpdate(UPD_DECL_MARKED_USED)); } + +void ASTWriter::DeclarationMarkedOpenMPThreadPrivate(const Decl *D) { + assert(!WritingAST && "Already writing the AST!"); + if (!D->isFromASTFile()) + return; + + DeclUpdates[D].push_back(DeclUpdate(UPD_DECL_MARKED_OPENMP_THREADPRIVATE)); +} -- cgit v1.2.3