r208077 - [OPENMP] Initial codegen for '#pragma omp parallel'
Jay Foad
jay.foad at gmail.com
Wed May 14 03:00:08 PDT 2014
On 6 May 2014 11:08, Alexey Bataev <a.bataev at hotmail.com> wrote:
> Author: abataev
> Date: Tue May 6 05:08:46 2014
> New Revision: 208077
>
> URL: http://llvm.org/viewvc/llvm-project?rev=208077&view=rev
> Log:
> [OPENMP] Initial codegen for '#pragma omp parallel'
>
> Added:
> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (with props)
> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h (with props)
> cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp (with props)
> cfe/trunk/test/OpenMP/parallel_codegen.cpp (with props)
> Modified:
> cfe/trunk/include/clang/AST/Decl.h
> cfe/trunk/include/clang/Sema/Sema.h
> cfe/trunk/lib/CodeGen/CGException.cpp
> cfe/trunk/lib/CodeGen/CGStmt.cpp
> cfe/trunk/lib/CodeGen/CMakeLists.txt
> cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
> cfe/trunk/lib/CodeGen/CodeGenFunction.h
> cfe/trunk/lib/CodeGen/CodeGenModule.cpp
> cfe/trunk/lib/CodeGen/CodeGenModule.h
> cfe/trunk/lib/Parse/ParseOpenMP.cpp
> cfe/trunk/lib/Sema/SemaOpenMP.cpp
> cfe/trunk/lib/Sema/SemaStmt.cpp
> cfe/trunk/lib/Sema/TreeTransform.h
> cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
> cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=208077&r1=208076&r2=208077&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Tue May 6 05:08:46 2014
> @@ -3322,20 +3322,9 @@ Sema::CreateCapturedStmtRecordDecl(Captu
> RD->setImplicit();
> RD->startDefinition();
>
> + assert(NumParams > 0 && "CapturedStmt requires context parameter");
> CD = CapturedDecl::Create(Context, CurContext, NumParams);
> DC->addDecl(CD);
> -
> - // Build the context parameter
> - assert(NumParams > 0 && "CapturedStmt requires context parameter");
> - DC = CapturedDecl::castToDeclContext(CD);
> - IdentifierInfo *VarName = &Context.Idents.get("__context");
> - QualType ParamType = Context.getPointerType(Context.getTagDeclType(RD));
> - ImplicitParamDecl *Param
> - = ImplicitParamDecl::Create(Context, DC, Loc, VarName, ParamType);
> - DC->addDecl(Param);
> -
> - CD->setContextParam(Param);
> -
> return RD;
> }
>
> @@ -3367,9 +3356,62 @@ static void buildCapturedStmtCaptureList
> void Sema::ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
> CapturedRegionKind Kind,
> unsigned NumParams) {
> - CapturedDecl *CD = 0;
> + CapturedDecl *CD = nullptr;
> RecordDecl *RD = CreateCapturedStmtRecordDecl(CD, Loc, NumParams);
>
> + // Build the context parameter
> + DeclContext *DC = CapturedDecl::castToDeclContext(CD);
> + IdentifierInfo *ParamName = &Context.Idents.get("__context");
> + QualType ParamType = Context.getPointerType(Context.getTagDeclType(RD));
> + ImplicitParamDecl *Param
> + = ImplicitParamDecl::Create(Context, DC, Loc, ParamName, ParamType);
> + DC->addDecl(Param);
> +
> + CD->setContextParam(0, Param);
> +
> + // Enter the capturing scope for this captured region.
> + PushCapturedRegionScope(CurScope, CD, RD, Kind);
> +
> + if (CurScope)
> + PushDeclContext(CurScope, CD);
> + else
> + CurContext = CD;
> +
> + PushExpressionEvaluationContext(PotentiallyEvaluated);
> +}
> +
> +void Sema::ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
> + CapturedRegionKind Kind,
> + ArrayRef<CapturedParamNameType> Params) {
> + CapturedDecl *CD = nullptr;
> + RecordDecl *RD = CreateCapturedStmtRecordDecl(CD, Loc, Params.size());
> +
> + // Build the context parameter
> + DeclContext *DC = CapturedDecl::castToDeclContext(CD);
> + bool ContextIsFound = false;
> + unsigned ParamNum = 0;
> + for (ArrayRef<CapturedParamNameType>::iterator I = Params.begin(),
> + E = Params.end();
> + I != E; ++I, ++ParamNum) {
> + if (I->second.isNull()) {
> + assert(!ContextIsFound &&
> + "null type has been found already for '__context' parameter");
> + IdentifierInfo *ParamName = &Context.Idents.get("__context");
> + QualType ParamType = Context.getPointerType(Context.getTagDeclType(RD));
> + ImplicitParamDecl *Param
> + = ImplicitParamDecl::Create(Context, DC, Loc, ParamName, ParamType);
> + DC->addDecl(Param);
> + CD->setContextParam(ParamNum, Param);
> + ContextIsFound = true;
> + } else {
> + IdentifierInfo *ParamName = &Context.Idents.get(I->first);
> + ImplicitParamDecl *Param
> + = ImplicitParamDecl::Create(Context, DC, Loc, ParamName, I->second);
> + DC->addDecl(Param);
> + CD->setParam(ParamNum, Param);
> + }
> + }
> + assert(ContextIsFound && "no null type for '__context' parameter");
In a Release build, built with GCC, I get:
/home/jay/svn/llvm-project/llvm/trunk/tools/clang/lib/Sema/SemaStmt.cpp:3391:8:
warning: variable ‘ContextIsFound’ set but not used
[-Wunused-but-set-variable]
bool ContextIsFound = false;
^
Jay.
More information about the cfe-commits
mailing list