Author: Alexey Bataev Date: 2021-05-10T06:34:11-07:00 New Revision: 230953d5771f6f3ce6bf86b8bb6ae4d5eb75a218
URL: https://github.com/llvm/llvm-project/commit/230953d5771f6f3ce6bf86b8bb6ae4d5eb75a218 DIFF: https://github.com/llvm/llvm-project/commit/230953d5771f6f3ce6bf86b8bb6ae4d5eb75a218.diff LOG: [OPENMP]Fix PR48851: the locals are not globalized in SPMD mode. Follow the more general patch for now, do not try to SPMDize the kernel if the variable is used and local. Differential Revision: https://reviews.llvm.org/D101911 Added: Modified: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/test/OpenMP/nvptx_SPMD_codegen.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 38341cb3288e..fc315b24687c 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -6561,7 +6561,7 @@ const Stmt *CGOpenMPRuntime::getSingleCompoundChild(ASTContext &Ctx, continue; // Analyze declarations. if (const auto *DS = dyn_cast<DeclStmt>(S)) { - if (llvm::all_of(DS->decls(), [&Ctx](const Decl *D) { + if (llvm::all_of(DS->decls(), [](const Decl *D) { if (isa<EmptyDecl>(D) || isa<DeclContext>(D) || isa<TypeDecl>(D) || isa<PragmaCommentDecl>(D) || isa<PragmaDetectMismatchDecl>(D) || isa<UsingDecl>(D) || @@ -6572,10 +6572,7 @@ const Stmt *CGOpenMPRuntime::getSingleCompoundChild(ASTContext &Ctx, const auto *VD = dyn_cast<VarDecl>(D); if (!VD) return false; - return VD->isConstexpr() || - ((VD->getType().isTrivialType(Ctx) || - VD->getType()->isReferenceType()) && - (!VD->hasInit() || isTrivial(Ctx, VD->getInit()))); + return VD->hasGlobalStorage() || !VD->isUsed(); })) continue; } diff --git a/clang/test/OpenMP/nvptx_SPMD_codegen.cpp b/clang/test/OpenMP/nvptx_SPMD_codegen.cpp index 6c54818e23d5..e000c818c9c2 100644 --- a/clang/test/OpenMP/nvptx_SPMD_codegen.cpp +++ b/clang/test/OpenMP/nvptx_SPMD_codegen.cpp @@ -120,10 +120,7 @@ int a; // CHECK-DAG: [[DISTR_LIGHT]] // CHECK-DAG: [[FOR_LIGHT]] // CHECK-DAG: [[LIGHT]] -// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0) -// CHECK-DAG: [[DISTR_LIGHT]] -// CHECK-DAG: [[FOR_LIGHT]] -// CHECK-DAG: [[LIGHT]] +// CHECK: call void @__kmpc_kernel_init( // CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1) // CHECK-DAG: [[DISTR_FULL]] // CHECK-DAG: [[FULL]] _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits