forked from OSchip/llvm-project
[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
This commit is contained in:
parent
fefd03a891
commit
230953d577
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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]]
|
||||
|
|
Loading…
Reference in New Issue