Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
099c502
[OpenMP] Add parser/semantic support for dyn_groupprivate clause
kevinsala Aug 8, 2025
f66e5fa
[OpenMP] Add codegen support for dyn_groupprivate clause
kevinsala Aug 8, 2025
c34e062
[OpenMP][Flang] Add empty clause support for dyn_groupprivate in Flang
kevinsala Aug 17, 2025
96a73ab
Merge branch 'main' into users/kevinsala/omp-dyn-groupprivate-pr
kparzysz Aug 18, 2025
0a7a96d
Fix merge in ClauseT.h
kparzysz Aug 18, 2025
b5b8439
more merge fixes
kparzysz Aug 18, 2025
6e4c547
more merge fixes
kparzysz Aug 18, 2025
776401c
Merge remote-tracking branch 'upstream/main' into users/kevinsala/omp…
kevinsala Aug 22, 2025
84fc963
Add fixes and improvements after merge
kevinsala Aug 25, 2025
00550f9
Merge remote-tracking branch 'upstream/users/kevinsala/omp-dyn-groupp…
kevinsala Aug 25, 2025
86f0cf0
Update syntax for fallback complex modifier
kevinsala Oct 23, 2025
86d4e6d
Merge remote-tracking branch 'upstream/main' into users/kevinsala/omp…
kevinsala Oct 24, 2025
f9eee16
Merge branch 'users/kevinsala/omp-dyn-groupprivate-pr' into users/kev…
kevinsala Oct 24, 2025
3a2fe70
Update for fallback complex modifier
kevinsala Oct 25, 2025
4662a4f
Fix parsing
kevinsala Oct 27, 2025
64e7abc
Fix format
kevinsala Oct 27, 2025
3307ec1
Merge branch 'users/kevinsala/omp-dyn-groupprivate-pr' into users/kev…
kevinsala Oct 27, 2025
7b53c9a
Fix review comments
kevinsala Oct 27, 2025
79b34f1
Fix more review comments
kevinsala Oct 27, 2025
c4905e0
Fix initialization of a fallback variable
kevinsala Oct 30, 2025
c439e44
Add codegen test for dyn_groupprivate
kevinsala Oct 30, 2025
b76e32c
Fix review comments
kevinsala Nov 2, 2025
03db991
Merge branch 'users/kevinsala/omp-dyn-groupprivate-pr' into users/kev…
kevinsala Nov 2, 2025
a3cd7ef
Add cgroup mem parameters in createTarget
kevinsala Nov 4, 2025
0fa3d30
Merge remote-tracking branch 'upstream/main' into users/kevinsala/omp…
kevinsala Nov 7, 2025
81f2225
Merge remote-tracking branch 'upstream/main' into users/kevinsala/omp…
kevinsala Nov 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 38 additions & 13 deletions clang/lib/CodeGen/CGOpenMPRuntime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10006,19 +10006,44 @@ static llvm::Value *emitDeviceID(
return DeviceID;
}

static llvm::Value *emitDynCGGroupMem(const OMPExecutableDirective &D,
CodeGenFunction &CGF) {
llvm::Value *DynCGroupMem = CGF.Builder.getInt32(0);

if (auto *DynMemClause = D.getSingleClause<OMPXDynCGroupMemClause>()) {
CodeGenFunction::RunCleanupsScope DynCGroupMemScope(CGF);
llvm::Value *DynCGroupMemVal = CGF.EmitScalarExpr(
DynMemClause->getSize(), /*IgnoreResultAssign=*/true);
DynCGroupMem = CGF.Builder.CreateIntCast(DynCGroupMemVal, CGF.Int32Ty,
/*isSigned=*/false);
static std::pair<llvm::Value *, OMPDynGroupprivateFallbackType>
emitDynCGroupMem(const OMPExecutableDirective &D, CodeGenFunction &CGF) {
llvm::Value *DynGP = CGF.Builder.getInt32(0);
auto DynGPFallback = OMPDynGroupprivateFallbackType::Abort;

if (auto *DynGPClause = D.getSingleClause<OMPDynGroupprivateClause>()) {
CodeGenFunction::RunCleanupsScope DynGPScope(CGF);
llvm::Value *DynGPVal =
CGF.EmitScalarExpr(DynGPClause->getSize(), /*IgnoreResultAssign=*/true);
DynGP = CGF.Builder.CreateIntCast(DynGPVal, CGF.Int32Ty,
/*isSigned=*/false);
auto FallbackModifier = DynGPClause->getDynGroupprivateFallbackModifier();
switch (FallbackModifier) {
case OMPC_DYN_GROUPPRIVATE_FALLBACK_abort:
DynGPFallback = OMPDynGroupprivateFallbackType::Abort;
break;
case OMPC_DYN_GROUPPRIVATE_FALLBACK_null:
DynGPFallback = OMPDynGroupprivateFallbackType::Null;
break;
case OMPC_DYN_GROUPPRIVATE_FALLBACK_default_mem:
case OMPC_DYN_GROUPPRIVATE_FALLBACK_unknown:
// This is the default for dyn_groupprivate.
DynGPFallback = OMPDynGroupprivateFallbackType::DefaultMem;
break;
default:
llvm_unreachable("Unknown fallback modifier for OpenMP dyn_groupprivate");
}
} else if (auto *OMPXDynCGClause =
D.getSingleClause<OMPXDynCGroupMemClause>()) {
CodeGenFunction::RunCleanupsScope DynCGMemScope(CGF);
llvm::Value *DynCGMemVal = CGF.EmitScalarExpr(OMPXDynCGClause->getSize(),
/*IgnoreResultAssign=*/true);
DynGP = CGF.Builder.CreateIntCast(DynCGMemVal, CGF.Int32Ty,
/*isSigned=*/false);
}
return DynCGroupMem;
return {DynGP, DynGPFallback};
}

static void genMapInfoForCaptures(
MappableExprsHandler &MEHandler, CodeGenFunction &CGF,
const CapturedStmt &CS, llvm::SmallVectorImpl<llvm::Value *> &CapturedVars,
Expand Down Expand Up @@ -10227,7 +10252,7 @@ static void emitTargetCallKernelLaunch(
llvm::Value *RTLoc = OMPRuntime->emitUpdateLocation(CGF, D.getBeginLoc());
llvm::Value *NumIterations =
OMPRuntime->emitTargetNumIterationsCall(CGF, D, SizeEmitter);
llvm::Value *DynCGGroupMem = emitDynCGGroupMem(D, CGF);
auto [DynCGroupMem, DynCGroupMemFallback] = emitDynCGroupMem(D, CGF);
llvm::OpenMPIRBuilder::InsertPointTy AllocaIP(
CGF.AllocaInsertPt->getParent(), CGF.AllocaInsertPt->getIterator());

Expand All @@ -10237,7 +10262,7 @@ static void emitTargetCallKernelLaunch(

llvm::OpenMPIRBuilder::TargetKernelArgs Args(
NumTargetItems, RTArgs, NumIterations, NumTeams, NumThreads,
DynCGGroupMem, HasNoWait);
DynCGroupMem, HasNoWait, DynCGroupMemFallback);

llvm::OpenMPIRBuilder::InsertPointTy AfterIP =
cantFail(OMPRuntime->getOMPBuilder().emitKernelLaunch(
Expand Down
Loading