r355858 - [OPENMP]Fix codegen for declare target link in target regions.

Azhar Mohammed via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 11 14:56:23 PDT 2019


Hi Alexey

Looks like this is failing on Darwin, can you please take a look? Refer to http://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-incremental/58951/consoleFull <http://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-incremental/58951/consoleFull>.

******************** TEST 'Clang :: Modules/builtins.m' FAILED ********************
Script:
--
: 'RUN: at line 1';   rm -rf /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp
: 'RUN: at line 2';   /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/bin/clang -cc1 -internal-isystem /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/lib/clang/9.0.0/include -nostdsysteminc -fmodules-cache-path=/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp -fmodules -fimplicit-module-maps -I /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/Inputs /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/builtins.m -verify
: 'RUN: at line 3';   /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/bin/clang -cc1 -internal-isystem /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/lib/clang/9.0.0/include -nostdsysteminc -fmodules-cache-path=/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp -fmodules -fimplicit-module-maps -I /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/Inputs -x c /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/builtins.m -verify
: 'RUN: at line 4';   /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/bin/clang -cc1 -internal-isystem /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/lib/clang/9.0.0/include -nostdsysteminc -fmodules-cache-path=/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp -fmodules -fimplicit-module-maps -I /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/Inputs -x objective-c++ /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/builtins.m -verify
: 'RUN: at line 6';   rm -rf /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp.pch.cache
: 'RUN: at line 7';   /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/bin/clang -cc1 -internal-isystem /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/lib/clang/9.0.0/include -nostdsysteminc -fmodules-cache-path=/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp.pch.cache -fmodules -fimplicit-module-maps -I /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/Inputs -emit-pch -o /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp.pch -x objective-c-header /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/Inputs/use-builtin.h
: 'RUN: at line 8';   /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/bin/clang -cc1 -internal-isystem /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/lib/clang/9.0.0/include -nostdsysteminc -fmodules-cache-path=/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp.pch.cache -fmodules -fimplicit-module-maps -I /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/Inputs /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/builtins.m -include-pch /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/clang-build/tools/clang/test/Modules/Output/builtins.m.tmp.pch /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/test/Modules/builtins.m -verify
--
Exit Code: 134

Command Output (stderr):
--
 <>Assertion failed: ((Imported == nullptr || Imported == SuggestedModule.getModule()) && "the imported module is different than the suggested one"), function HandleIncludeDirective, file /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm/tools/clang/lib/Lex/PPDirectives.cpp, line 1952.

> On Mar 11, 2019, at 12:51 PM, Alexey Bataev via cfe-commits <cfe-commits at lists.llvm.org> wrote:
> 
> Author: abataev
> Date: Mon Mar 11 12:51:42 2019
> New Revision: 355858
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=355858&view=rev
> Log:
> [OPENMP]Fix codegen for declare target link in target regions.
> 
> If the declare target link global is used in the target region
> indirectly (used in the inner parallel, teams, etc. regions), we may
> miss this variable and it leads to incorrect codegen.
> 
> Modified:
>    cfe/trunk/lib/Sema/SemaOpenMP.cpp
>    cfe/trunk/test/OpenMP/declare_target_link_codegen.cpp
> 
> Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=355858&r1=355857&r2=355858&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Mon Mar 11 12:51:42 2019
> @@ -147,6 +147,9 @@ private:
>     /// Reference to the taskgroup task_reduction reference expression.
>     Expr *TaskgroupReductionRef = nullptr;
>     llvm::DenseSet<QualType> MappedClassesQualTypes;
> +    /// List of globals marked as declare target link in this target region
> +    /// (isOpenMPTargetExecutionDirective(Directive) == true).
> +    llvm::SmallVector<DeclRefExpr *, 4> DeclareTargetLinkVarDecls;
>     SharingMapTy(OpenMPDirectiveKind DKind, DeclarationNameInfo Name,
>                  Scope *CurScope, SourceLocation Loc)
>         : Directive(DKind), DirectiveName(Name), CurScope(CurScope),
> @@ -674,6 +677,31 @@ public:
>     return StackElem.MappedClassesQualTypes.count(QT) != 0;
>   }
> 
> +  /// Adds global declare target to the parent target region.
> +  void addToParentTargetRegionLinkGlobals(DeclRefExpr *E) {
> +    assert(*OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(
> +               E->getDecl()) == OMPDeclareTargetDeclAttr::MT_Link &&
> +           "Expected declare target link global.");
> +    if (isStackEmpty())
> +      return;
> +    auto It = Stack.back().first.rbegin();
> +    while (It != Stack.back().first.rend() &&
> +           !isOpenMPTargetExecutionDirective(It->Directive))
> +      ++It;
> +    if (It != Stack.back().first.rend()) {
> +      assert(isOpenMPTargetExecutionDirective(It->Directive) &&
> +             "Expected target executable directive.");
> +      It->DeclareTargetLinkVarDecls.push_back(E);
> +    }
> +  }
> +
> +  /// Returns the list of globals with declare target link if current directive
> +  /// is target.
> +  ArrayRef<DeclRefExpr *> getLinkGlobals() const {
> +    assert(isOpenMPTargetExecutionDirective(getCurrentDirective()) &&
> +           "Expected target executable directive.");
> +    return Stack.back().first.back().DeclareTargetLinkVarDecls;
> +  }
> };
> 
> bool isImplicitTaskingRegion(OpenMPDirectiveKind DKind) {
> @@ -2414,8 +2442,18 @@ public:
>       // Define implicit data-sharing attributes for task.
>       DVar = Stack->getImplicitDSA(VD, /*FromParent=*/false);
>       if (isOpenMPTaskingDirective(DKind) && DVar.CKind != OMPC_shared &&
> -          !Stack->isLoopControlVariable(VD).first)
> +          !Stack->isLoopControlVariable(VD).first) {
>         ImplicitFirstprivate.push_back(E);
> +        return;
> +      }
> +
> +      // Store implicitly used globals with declare target link for parent
> +      // target.
> +      if (!isOpenMPTargetExecutionDirective(DKind) && Res &&
> +          *Res == OMPDeclareTargetDeclAttr::MT_Link) {
> +        Stack->addToParentTargetRegionLinkGlobals(E);
> +        return;
> +      }
>     }
>   }
>   void VisitMemberExpr(MemberExpr *E) {
> @@ -2573,7 +2611,13 @@ public:
>   }
> 
>   DSAAttrChecker(DSAStackTy *S, Sema &SemaRef, CapturedStmt *CS)
> -      : Stack(S), SemaRef(SemaRef), ErrorFound(false), CS(CS) {}
> +      : Stack(S), SemaRef(SemaRef), ErrorFound(false), CS(CS) {
> +    // Process declare target link variables for the target directives.
> +    if (isOpenMPTargetExecutionDirective(S->getCurrentDirective())) {
> +      for (DeclRefExpr *E : Stack->getLinkGlobals())
> +        Visit(E);
> +    }
> +  }
> };
> } // namespace
> 
> 
> Modified: cfe/trunk/test/OpenMP/declare_target_link_codegen.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/declare_target_link_codegen.cpp?rev=355858&r1=355857&r2=355858&view=diff
> ==============================================================================
> --- cfe/trunk/test/OpenMP/declare_target_link_codegen.cpp (original)
> +++ cfe/trunk/test/OpenMP/declare_target_link_codegen.cpp Mon Mar 11 12:51:42 2019
> @@ -37,10 +37,13 @@ int maini1() {
>   {
>     a = c;
>   }
> +#pragma omp target
> +#pragma omp teams
> +  c = a;
>   return 0;
> }
> 
> -// DEVICE: define weak void @__omp_offloading_{{.*}}_{{.*}}maini1{{.*}}_l[[@LINE-7]](i32* dereferenceable{{[^,]*}}
> +// DEVICE: define weak void @__omp_offloading_{{.*}}_{{.*}}maini1{{.*}}_l[[@LINE-10]](i32* dereferenceable{{[^,]*}}
> // DEVICE: [[C_REF:%.+]] = load i32*, i32** @c_decl_tgt_link_ptr,
> // DEVICE: [[C:%.+]] = load i32, i32* [[C_REF]],
> // DEVICE: store i32 [[C]], i32* %
> @@ -59,9 +62,10 @@ int maini1() {
> // HOST: [[BP0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BASEPTRS]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
> // HOST: [[P0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
> // HOST: call i32 @__tgt_target(i64 -1, i8* @{{[^,]+}}, i32 2, i8** [[BP0]], i8** [[P0]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZES]], i{{[0-9]+}} 0, i{{[0-9]+}} 0), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAPTYPES]], i{{[0-9]+}} 0, i{{[0-9]+}} 0))
> -// HOST: call void @__omp_offloading_{{.*}}_{{.*}}maini1{{.*}}_l[[@LINE-26]](i32* %{{[^,]+}})
> +// HOST: call void @__omp_offloading_{{.*}}_{{.*}}maini1{{.*}}_l[[@LINE-29]](i32* %{{[^,]+}})
> +// HOST: call i32 @__tgt_target_teams(i64 -1, i8* @.__omp_offloading_{{.+}}_l40.region_id, i32 2, {{.+}})
> 
> -// HOST: define internal void @__omp_offloading_{{.*}}_{{.*}}maini1{{.*}}_l[[@LINE-28]](i32* dereferenceable{{.*}})
> +// HOST: define internal void @__omp_offloading_{{.*}}_{{.*}}maini1{{.*}}_l[[@LINE-32]](i32* dereferenceable{{.*}})
> // HOST: [[C:%.*]] = load i32, i32* @c,
> // HOST: store i32 [[C]], i32* %
> 
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190311/4a5e1d30/attachment-0001.html>


More information about the cfe-commits mailing list