Skip to content

Commit f390a76

Browse files
committed
Revert "Revert "[OpenMP][NFC] Add min/max threads/teams count into the KernelEnvironment (#70257)""
This reverts commit ddbaa11. Reapply the original commit, the broken test was repaired in 5e51363 in the meantime.
1 parent ddbaa11 commit f390a76

31 files changed

+323
-280
lines changed

llvm/include/llvm/Frontend/OpenMP/OMPKinds.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ __OMP_STRUCT_TYPE(AsyncInfo, __tgt_async_info, false, Int8Ptr)
9595
__OMP_STRUCT_TYPE(DependInfo, kmp_dep_info, false, SizeTy, SizeTy, Int8)
9696
__OMP_STRUCT_TYPE(Task, kmp_task_ompbuilder_t, false, VoidPtr, VoidPtr, Int32, VoidPtr, VoidPtr)
9797
__OMP_STRUCT_TYPE(ConfigurationEnvironment, ConfigurationEnvironmentTy, false,
98-
Int8, Int8, Int8)
98+
Int8, Int8, Int8, Int32, Int32, Int32, Int32)
9999
__OMP_STRUCT_TYPE(DynamicEnvironment, DynamicEnvironmentTy, false, Int16)
100100
__OMP_STRUCT_TYPE(KernelEnvironment, KernelEnvironmentTy, false,
101101
ConfigurationEnvironment, IdentPtr, DynamicEnvironmentPtr)

llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4071,18 +4071,21 @@ OpenMPIRBuilder::createTargetInit(const LocationDescription &Loc, bool IsSPMD) {
40714071
uint32_t SrcLocStrSize;
40724072
Constant *SrcLocStr = getOrCreateSrcLocStr(Loc, SrcLocStrSize);
40734073
Constant *Ident = getOrCreateIdent(SrcLocStr, SrcLocStrSize);
4074-
ConstantInt *IsSPMDVal = ConstantInt::getSigned(
4075-
IntegerType::getInt8Ty(Int8->getContext()),
4076-
IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
4077-
ConstantInt *UseGenericStateMachineVal = ConstantInt::getSigned(
4078-
IntegerType::getInt8Ty(Int8->getContext()), !IsSPMD);
4079-
ConstantInt *MayUseNestedParallelismVal =
4080-
ConstantInt::getSigned(IntegerType::getInt8Ty(Int8->getContext()), true);
4081-
ConstantInt *DebugIndentionLevelVal =
4082-
ConstantInt::getSigned(IntegerType::getInt16Ty(Int8->getContext()), 0);
4074+
Constant *IsSPMDVal = ConstantInt::getSigned(
4075+
Int8, IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
4076+
Constant *UseGenericStateMachineVal = ConstantInt::getSigned(Int8, !IsSPMD);
4077+
Constant *MayUseNestedParallelismVal = ConstantInt::getSigned(Int8, true);
4078+
Constant *DebugIndentionLevelVal = ConstantInt::getSigned(Int16, 0);
40834079

4084-
// We need to strip the debug prefix to get the correct kernel name.
40854080
Function *Kernel = Builder.GetInsertBlock()->getParent();
4081+
auto [MinThreadsVal, MaxThreadsVal] = readThreadBoundsForKernel(*Kernel);
4082+
auto [MinTeamsVal, MaxTeamsVal] = readTeamBoundsForKernel(*Kernel);
4083+
Constant *MinThreads = ConstantInt::getSigned(Int32, MinThreadsVal);
4084+
Constant *MaxThreads = ConstantInt::getSigned(Int32, MaxThreadsVal);
4085+
Constant *MinTeams = ConstantInt::getSigned(Int32, MinTeamsVal);
4086+
Constant *MaxTeams = ConstantInt::getSigned(Int32, MaxTeamsVal);
4087+
4088+
// We need to strip the debug prefix to get the correct kernel name.
40864089
StringRef KernelName = Kernel->getName();
40874090
const std::string DebugPrefix = "_debug__";
40884091
if (KernelName.ends_with(DebugPrefix))
@@ -4113,6 +4116,10 @@ OpenMPIRBuilder::createTargetInit(const LocationDescription &Loc, bool IsSPMD) {
41134116
UseGenericStateMachineVal,
41144117
MayUseNestedParallelismVal,
41154118
IsSPMDVal,
4119+
MinThreads,
4120+
MaxThreads,
4121+
MinTeams,
4122+
MaxTeams,
41164123
});
41174124
Constant *KernelEnvironmentInitializer = ConstantStruct::get(
41184125
KernelEnvironment, {

llvm/lib/Transforms/IPO/OpenMPOpt.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,10 @@ namespace KernelInfo {
191191
// uint8_t UseGenericStateMachine;
192192
// uint8_t MayUseNestedParallelism;
193193
// llvm::omp::OMPTgtExecModeFlags ExecMode;
194+
// int32_t MinThreads;
195+
// int32_t MaxThreads;
196+
// int32_t MinTeams;
197+
// int32_t MaxTeams;
194198
// };
195199

196200
// struct DynamicEnvironmentTy {
@@ -217,6 +221,10 @@ KERNEL_ENVIRONMENT_IDX(Ident, 1)
217221
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(UseGenericStateMachine, 0)
218222
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MayUseNestedParallelism, 1)
219223
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(ExecMode, 2)
224+
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MinThreads, 3)
225+
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MaxThreads, 4)
226+
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MinTeams, 5)
227+
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MaxTeams, 6)
220228

221229
#undef KERNEL_ENVIRONMENT_CONFIGURATION_IDX
222230

@@ -241,6 +249,10 @@ KERNEL_ENVIRONMENT_GETTER(Configuration, ConstantStruct)
241249
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(UseGenericStateMachine)
242250
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MayUseNestedParallelism)
243251
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(ExecMode)
252+
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MinThreads)
253+
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MaxThreads)
254+
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MinTeams)
255+
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MaxTeams)
244256

245257
#undef KERNEL_ENVIRONMENT_CONFIGURATION_GETTER
246258

@@ -3636,6 +3648,10 @@ struct AAKernelInfoFunction : AAKernelInfo {
36363648
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(UseGenericStateMachine)
36373649
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MayUseNestedParallelism)
36383650
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(ExecMode)
3651+
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MinThreads)
3652+
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MaxThreads)
3653+
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MinTeams)
3654+
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MaxTeams)
36393655

36403656
#undef KERNEL_ENVIRONMENT_CONFIGURATION_SETTER
36413657

@@ -3723,6 +3739,19 @@ struct AAKernelInfoFunction : AAKernelInfo {
37233739
else
37243740
setExecModeOfKernelEnvironment(AssumedExecModeC);
37253741

3742+
auto *Int32Ty = Type::getInt32Ty(Fn->getContext());
3743+
auto [MinThreads, MaxThreads] =
3744+
OpenMPIRBuilder::readThreadBoundsForKernel(*Fn);
3745+
if (MinThreads)
3746+
setMinThreadsOfKernelEnvironment(ConstantInt::get(Int32Ty, MinThreads));
3747+
if (MaxThreads)
3748+
setMaxThreadsOfKernelEnvironment(ConstantInt::get(Int32Ty, MaxThreads));
3749+
auto [MinTeams, MaxTeams] = OpenMPIRBuilder::readTeamBoundsForKernel(*Fn);
3750+
if (MinTeams)
3751+
setMinTeamsOfKernelEnvironment(ConstantInt::get(Int32Ty, MinTeams));
3752+
if (MaxTeams)
3753+
setMaxTeamsOfKernelEnvironment(ConstantInt::get(Int32Ty, MaxTeams));
3754+
37263755
ConstantInt *MayUseNestedParallelismC =
37273756
KernelInfo::getMayUseNestedParallelismFromKernelEnvironment(KernelEnvC);
37283757
ConstantInt *AssumedMayUseNestedParallelismC = ConstantInt::get(

llvm/test/Transforms/OpenMP/always_inline_device.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
%struct.ident_t = type { i32, i32, i32, i32, ptr }
55
%struct.KernelEnvironmentTy = type { %struct.ConfigurationEnvironmentTy, ptr, ptr }
6-
%struct.ConfigurationEnvironmentTy = type { i8, i8, i8 }
6+
%struct.ConfigurationEnvironmentTy = type { i8, i8, i8, i32, i32, i32, i32 }
77
@0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
88
@1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 0, ptr @0 }, align 8
99
@G = external global i8
1010

11-
@kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1 }, ptr @1, ptr null }
11+
@kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
1212

1313
; Function Attrs: convergent norecurse nounwind
1414
;.
1515
; CHECK: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
1616
; CHECK: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
1717
; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external global i8
18-
; CHECK: @[[KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 0, i8 3 }, ptr @[[GLOB1]], ptr null }
18+
; CHECK: @[[KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 0, i8 3, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
1919
;.
2020
define weak void @__omp_offloading_fd02_c0934fc2_foo_l4() #0 {
2121
; CHECK: Function Attrs: norecurse nounwind

0 commit comments

Comments
 (0)