r208162 - [OPENMP] Fixed problem with temp removal on some platforms in codegen for '#pragma omp parallel'
Aaron Ballman
aaron at aaronballman.com
Wed May 7 11:32:25 PDT 2014
This did not fix all of the bots (I am seeing this failing locally as well).
http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6/builds/2451
Reverting this patch causes my tests to pass locally, FWIW.
~Aaron
On Wed, May 7, 2014 at 2:18 AM, Alexey Bataev <a.bataev at hotmail.com> wrote:
> Author: abataev
> Date: Wed May 7 01:18:01 2014
> New Revision: 208162
>
> URL: http://llvm.org/viewvc/llvm-project?rev=208162&view=rev
> Log:
> [OPENMP] Fixed problem with temp removal on some platforms in codegen for '#pragma omp parallel'
>
> Modified:
> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h
> cfe/trunk/test/OpenMP/parallel_codegen.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp?rev=208162&r1=208161&r2=208162&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Wed May 7 01:18:01 2014
> @@ -38,10 +38,7 @@ CGOpenMPRuntime::CGOpenMPRuntime(CodeGen
>
> llvm::Value *
> CGOpenMPRuntime::GetOrCreateDefaultOpenMPLocation(OpenMPLocationFlags Flags) {
> - llvm::Twine OpenMPDefaultLocName =
> - ".kmpc_default_loc_" + llvm::Twine::utohexstr(Flags) + ".addr";
> - llvm::Value *Entry =
> - CGM.getModule().getNamedValue(OpenMPDefaultLocName.str());
> + llvm::Value *Entry = OpenMPDefaultLocMap.lookup(Flags);
> if (!Entry) {
> if (!DefaultOpenMPPSource) {
> // Initialize default location for psource field of ident_t structure of
> @@ -54,7 +51,7 @@ CGOpenMPRuntime::GetOrCreateDefaultOpenM
> llvm::ConstantExpr::getBitCast(DefaultOpenMPPSource, CGM.Int8PtrTy);
> }
> llvm::GlobalVariable *DefaultOpenMPLocation = cast<llvm::GlobalVariable>(
> - CGM.CreateRuntimeVariable(IdentTy, OpenMPDefaultLocName.str()));
> + CGM.CreateRuntimeVariable(IdentTy, ".kmpc_default_loc.addr"));
> DefaultOpenMPLocation->setUnnamedAddr(true);
> DefaultOpenMPLocation->setConstant(true);
> DefaultOpenMPLocation->setLinkage(llvm::GlobalValue::PrivateLinkage);
> @@ -79,16 +76,13 @@ llvm::Value *CGOpenMPRuntime::EmitOpenMP
>
> assert(CGF.CurFn && "No function in current CodeGenFunction.");
>
> - llvm::Twine OpenMPLocName =
> - ".kmpc_loc_" + llvm::Twine::utohexstr(Flags) + ".addr";
> -
> llvm::Value *LocValue = nullptr;
> OpenMPLocMapTy::iterator I = OpenMPLocMap.find(CGF.CurFn);
> if (I != OpenMPLocMap.end()) {
> LocValue = I->second;
> } else {
> - // Generate "ident_t .kmpc_loc_<flags>.addr;"
> - llvm::AllocaInst *AI = CGF.CreateTempAlloca(IdentTy, OpenMPLocName);
> + // Generate "ident_t .kmpc_loc.addr;"
> + llvm::AllocaInst *AI = CGF.CreateTempAlloca(IdentTy, ".kmpc_loc.addr");
> AI->setAlignment(CGM.getDataLayout().getPrefTypeAlignment(IdentTy));
> OpenMPLocMap[CGF.CurFn] = AI;
> LocValue = AI;
>
> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h?rev=208162&r1=208161&r2=208162&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h (original)
> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h Wed May 7 01:18:01 2014
> @@ -76,6 +76,9 @@ private:
> /// \brief Default const ident_t object used for initialization of all other
> /// ident_t objects.
> llvm::Constant *DefaultOpenMPPSource;
> + /// \brief Map of flags and corrsponding default locations.
> + typedef llvm::DenseMap<unsigned, llvm::Value *> OpenMPDefaultLocMapTy;
> + OpenMPDefaultLocMapTy OpenMPDefaultLocMap;
> llvm::Value *GetOrCreateDefaultOpenMPLocation(OpenMPLocationFlags Flags);
> /// \brief Describes ident structure that describes a source location.
> /// All descriptions are taken from
>
> Modified: cfe/trunk/test/OpenMP/parallel_codegen.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/parallel_codegen.cpp?rev=208162&r1=208161&r2=208162&view=diff
> ==============================================================================
> --- cfe/trunk/test/OpenMP/parallel_codegen.cpp (original)
> +++ cfe/trunk/test/OpenMP/parallel_codegen.cpp Wed May 7 01:18:01 2014
> @@ -2,8 +2,6 @@
> // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
> // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -g -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix=CHECK-DEBUG %s
> // expected-no-diagnostics
> -// FIXME: This test stiil crashing because of mem leak.
> -// REQUIRES: disabled
> #ifndef HEADER
> #define HEADER
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list