forked from OSchip/llvm-project
Remove some unused static functions in CGOpenMPRuntimeGPU.cpp, NFC
This commit is contained in:
parent
3acaf04033
commit
f6e759bd26
|
@ -730,181 +730,6 @@ static bool supportsSPMDExecutionMode(ASTContext &Ctx,
|
|||
"Unknown programming model for OpenMP directive on NVPTX target.");
|
||||
}
|
||||
|
||||
/// Check if the directive is loops based and has schedule clause at all or has
|
||||
/// static scheduling.
|
||||
static bool hasStaticScheduling(const OMPExecutableDirective &D) {
|
||||
assert(isOpenMPWorksharingDirective(D.getDirectiveKind()) &&
|
||||
isOpenMPLoopDirective(D.getDirectiveKind()) &&
|
||||
"Expected loop-based directive.");
|
||||
return !D.hasClausesOfKind<OMPOrderedClause>() &&
|
||||
(!D.hasClausesOfKind<OMPScheduleClause>() ||
|
||||
llvm::any_of(D.getClausesOfKind<OMPScheduleClause>(),
|
||||
[](const OMPScheduleClause *C) {
|
||||
return C->getScheduleKind() == OMPC_SCHEDULE_static;
|
||||
}));
|
||||
}
|
||||
|
||||
/// Check for inner (nested) lightweight runtime construct, if any
|
||||
static bool hasNestedLightweightDirective(ASTContext &Ctx,
|
||||
const OMPExecutableDirective &D) {
|
||||
assert(supportsSPMDExecutionMode(Ctx, D) && "Expected SPMD mode directive.");
|
||||
const auto *CS = D.getInnermostCapturedStmt();
|
||||
const auto *Body =
|
||||
CS->getCapturedStmt()->IgnoreContainers(/*IgnoreCaptured=*/true);
|
||||
const Stmt *ChildStmt = CGOpenMPRuntime::getSingleCompoundChild(Ctx, Body);
|
||||
|
||||
if (const auto *NestedDir =
|
||||
dyn_cast_or_null<OMPExecutableDirective>(ChildStmt)) {
|
||||
OpenMPDirectiveKind DKind = NestedDir->getDirectiveKind();
|
||||
switch (D.getDirectiveKind()) {
|
||||
case OMPD_target:
|
||||
if (isOpenMPParallelDirective(DKind) &&
|
||||
isOpenMPWorksharingDirective(DKind) && isOpenMPLoopDirective(DKind) &&
|
||||
hasStaticScheduling(*NestedDir))
|
||||
return true;
|
||||
if (DKind == OMPD_teams_distribute_simd || DKind == OMPD_simd)
|
||||
return true;
|
||||
if (DKind == OMPD_parallel) {
|
||||
Body = NestedDir->getInnermostCapturedStmt()->IgnoreContainers(
|
||||
/*IgnoreCaptured=*/true);
|
||||
if (!Body)
|
||||
return false;
|
||||
ChildStmt = CGOpenMPRuntime::getSingleCompoundChild(Ctx, Body);
|
||||
if (const auto *NND =
|
||||
dyn_cast_or_null<OMPExecutableDirective>(ChildStmt)) {
|
||||
DKind = NND->getDirectiveKind();
|
||||
if (isOpenMPWorksharingDirective(DKind) &&
|
||||
isOpenMPLoopDirective(DKind) && hasStaticScheduling(*NND))
|
||||
return true;
|
||||
}
|
||||
} else if (DKind == OMPD_teams) {
|
||||
Body = NestedDir->getInnermostCapturedStmt()->IgnoreContainers(
|
||||
/*IgnoreCaptured=*/true);
|
||||
if (!Body)
|
||||
return false;
|
||||
ChildStmt = CGOpenMPRuntime::getSingleCompoundChild(Ctx, Body);
|
||||
if (const auto *NND =
|
||||
dyn_cast_or_null<OMPExecutableDirective>(ChildStmt)) {
|
||||
DKind = NND->getDirectiveKind();
|
||||
if (isOpenMPParallelDirective(DKind) &&
|
||||
isOpenMPWorksharingDirective(DKind) &&
|
||||
isOpenMPLoopDirective(DKind) && hasStaticScheduling(*NND))
|
||||
return true;
|
||||
if (DKind == OMPD_parallel) {
|
||||
Body = NND->getInnermostCapturedStmt()->IgnoreContainers(
|
||||
/*IgnoreCaptured=*/true);
|
||||
if (!Body)
|
||||
return false;
|
||||
ChildStmt = CGOpenMPRuntime::getSingleCompoundChild(Ctx, Body);
|
||||
if (const auto *NND =
|
||||
dyn_cast_or_null<OMPExecutableDirective>(ChildStmt)) {
|
||||
DKind = NND->getDirectiveKind();
|
||||
if (isOpenMPWorksharingDirective(DKind) &&
|
||||
isOpenMPLoopDirective(DKind) && hasStaticScheduling(*NND))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case OMPD_target_teams:
|
||||
if (isOpenMPParallelDirective(DKind) &&
|
||||
isOpenMPWorksharingDirective(DKind) && isOpenMPLoopDirective(DKind) &&
|
||||
hasStaticScheduling(*NestedDir))
|
||||
return true;
|
||||
if (DKind == OMPD_distribute_simd || DKind == OMPD_simd)
|
||||
return true;
|
||||
if (DKind == OMPD_parallel) {
|
||||
Body = NestedDir->getInnermostCapturedStmt()->IgnoreContainers(
|
||||
/*IgnoreCaptured=*/true);
|
||||
if (!Body)
|
||||
return false;
|
||||
ChildStmt = CGOpenMPRuntime::getSingleCompoundChild(Ctx, Body);
|
||||
if (const auto *NND =
|
||||
dyn_cast_or_null<OMPExecutableDirective>(ChildStmt)) {
|
||||
DKind = NND->getDirectiveKind();
|
||||
if (isOpenMPWorksharingDirective(DKind) &&
|
||||
isOpenMPLoopDirective(DKind) && hasStaticScheduling(*NND))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case OMPD_target_parallel:
|
||||
if (DKind == OMPD_simd)
|
||||
return true;
|
||||
return isOpenMPWorksharingDirective(DKind) &&
|
||||
isOpenMPLoopDirective(DKind) && hasStaticScheduling(*NestedDir);
|
||||
case OMPD_target_teams_distribute:
|
||||
case OMPD_target_simd:
|
||||
case OMPD_target_parallel_for:
|
||||
case OMPD_target_parallel_for_simd:
|
||||
case OMPD_target_teams_distribute_simd:
|
||||
case OMPD_target_teams_distribute_parallel_for:
|
||||
case OMPD_target_teams_distribute_parallel_for_simd:
|
||||
case OMPD_parallel:
|
||||
case OMPD_for:
|
||||
case OMPD_parallel_for:
|
||||
case OMPD_parallel_master:
|
||||
case OMPD_parallel_sections:
|
||||
case OMPD_for_simd:
|
||||
case OMPD_parallel_for_simd:
|
||||
case OMPD_cancel:
|
||||
case OMPD_cancellation_point:
|
||||
case OMPD_ordered:
|
||||
case OMPD_threadprivate:
|
||||
case OMPD_allocate:
|
||||
case OMPD_task:
|
||||
case OMPD_simd:
|
||||
case OMPD_sections:
|
||||
case OMPD_section:
|
||||
case OMPD_single:
|
||||
case OMPD_master:
|
||||
case OMPD_critical:
|
||||
case OMPD_taskyield:
|
||||
case OMPD_barrier:
|
||||
case OMPD_taskwait:
|
||||
case OMPD_taskgroup:
|
||||
case OMPD_atomic:
|
||||
case OMPD_flush:
|
||||
case OMPD_depobj:
|
||||
case OMPD_scan:
|
||||
case OMPD_teams:
|
||||
case OMPD_target_data:
|
||||
case OMPD_target_exit_data:
|
||||
case OMPD_target_enter_data:
|
||||
case OMPD_distribute:
|
||||
case OMPD_distribute_simd:
|
||||
case OMPD_distribute_parallel_for:
|
||||
case OMPD_distribute_parallel_for_simd:
|
||||
case OMPD_teams_distribute:
|
||||
case OMPD_teams_distribute_simd:
|
||||
case OMPD_teams_distribute_parallel_for:
|
||||
case OMPD_teams_distribute_parallel_for_simd:
|
||||
case OMPD_target_update:
|
||||
case OMPD_declare_simd:
|
||||
case OMPD_declare_variant:
|
||||
case OMPD_begin_declare_variant:
|
||||
case OMPD_end_declare_variant:
|
||||
case OMPD_declare_target:
|
||||
case OMPD_end_declare_target:
|
||||
case OMPD_declare_reduction:
|
||||
case OMPD_declare_mapper:
|
||||
case OMPD_taskloop:
|
||||
case OMPD_taskloop_simd:
|
||||
case OMPD_master_taskloop:
|
||||
case OMPD_master_taskloop_simd:
|
||||
case OMPD_parallel_master_taskloop:
|
||||
case OMPD_parallel_master_taskloop_simd:
|
||||
case OMPD_requires:
|
||||
case OMPD_unknown:
|
||||
default:
|
||||
llvm_unreachable("Unexpected directive.");
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGOpenMPRuntimeGPU::emitNonSPMDKernel(const OMPExecutableDirective &D,
|
||||
StringRef ParentName,
|
||||
llvm::Function *&OutlinedFn,
|
||||
|
|
Loading…
Reference in New Issue