@@ -7734,30 +7734,6 @@ class MappableExprsHandler {
7734
7734
OpenMPOffloadMappingFlags::OMP_MAP_FROM;
7735
7735
}
7736
7736
7737
- static OpenMPOffloadMappingFlags getMemberOfFlag(unsigned Position) {
7738
- // Rotate by getFlagMemberOffset() bits.
7739
- return static_cast<OpenMPOffloadMappingFlags>(((uint64_t)Position + 1)
7740
- << getFlagMemberOffset());
7741
- }
7742
-
7743
- static void setCorrectMemberOfFlag(OpenMPOffloadMappingFlags &Flags,
7744
- OpenMPOffloadMappingFlags MemberOfFlag) {
7745
- // If the entry is PTR_AND_OBJ but has not been marked with the special
7746
- // placeholder value 0xFFFF in the MEMBER_OF field, then it should not be
7747
- // marked as MEMBER_OF.
7748
- if (static_cast<std::underlying_type_t<OpenMPOffloadMappingFlags>>(
7749
- Flags & OpenMPOffloadMappingFlags::OMP_MAP_PTR_AND_OBJ) &&
7750
- static_cast<std::underlying_type_t<OpenMPOffloadMappingFlags>>(
7751
- (Flags & OpenMPOffloadMappingFlags::OMP_MAP_MEMBER_OF) !=
7752
- OpenMPOffloadMappingFlags::OMP_MAP_MEMBER_OF))
7753
- return;
7754
-
7755
- // Reset the placeholder value to prepare the flag for the assignment of the
7756
- // proper MEMBER_OF value.
7757
- Flags &= ~OpenMPOffloadMappingFlags::OMP_MAP_MEMBER_OF;
7758
- Flags |= MemberOfFlag;
7759
- }
7760
-
7761
7737
void getPlainLayout(const CXXRecordDecl *RD,
7762
7738
llvm::SmallVectorImpl<const FieldDecl *> &Layout,
7763
7739
bool AsBase) const {
@@ -7825,6 +7801,7 @@ class MappableExprsHandler {
7825
7801
/// the device pointers info array.
7826
7802
void generateAllInfoForClauses(
7827
7803
ArrayRef<const OMPClause *> Clauses, MapCombinedInfoTy &CombinedInfo,
7804
+ llvm::OpenMPIRBuilder &OMPBuilder,
7828
7805
const llvm::DenseSet<CanonicalDeclPtr<const Decl>> &SkipVarSet =
7829
7806
llvm::DenseSet<CanonicalDeclPtr<const Decl>>()) const {
7830
7807
// We have to process the component lists that relate with the same
@@ -8159,7 +8136,7 @@ class MappableExprsHandler {
8159
8136
if (PartialStruct.Base.isValid()) {
8160
8137
CurInfo.NonContigInfo.Dims.push_back(0);
8161
8138
emitCombinedEntry(CombinedInfo, CurInfo.Types, PartialStruct,
8162
- /*IsMapThis*/ !VD, VD);
8139
+ /*IsMapThis*/ !VD, OMPBuilder, VD);
8163
8140
}
8164
8141
8165
8142
// We need to append the results of this capture to what we already
@@ -8226,6 +8203,7 @@ class MappableExprsHandler {
8226
8203
void emitCombinedEntry(MapCombinedInfoTy &CombinedInfo,
8227
8204
MapFlagsArrayTy &CurTypes,
8228
8205
const StructRangeInfoTy &PartialStruct, bool IsMapThis,
8206
+ llvm::OpenMPIRBuilder &OMPBuilder,
8229
8207
const ValueDecl *VD = nullptr,
8230
8208
bool NotTargetParams = true) const {
8231
8209
if (CurTypes.size() == 1 &&
@@ -8313,9 +8291,9 @@ class MappableExprsHandler {
8313
8291
// (except for PTR_AND_OBJ entries which do not have a placeholder value
8314
8292
// 0xFFFF in the MEMBER_OF field).
8315
8293
OpenMPOffloadMappingFlags MemberOfFlag =
8316
- getMemberOfFlag(CombinedInfo.BasePointers.size() - 1);
8294
+ OMPBuilder. getMemberOfFlag(CombinedInfo.BasePointers.size() - 1);
8317
8295
for (auto &M : CurTypes)
8318
- setCorrectMemberOfFlag(M, MemberOfFlag);
8296
+ OMPBuilder. setCorrectMemberOfFlag(M, MemberOfFlag);
8319
8297
}
8320
8298
8321
8299
/// Generate all the base pointers, section pointers, sizes, map types, and
@@ -8324,23 +8302,26 @@ class MappableExprsHandler {
8324
8302
/// pair of the relevant declaration and index where it occurs is appended to
8325
8303
/// the device pointers info array.
8326
8304
void generateAllInfo(
8327
- MapCombinedInfoTy &CombinedInfo,
8305
+ MapCombinedInfoTy &CombinedInfo, llvm::OpenMPIRBuilder &OMPBuilder,
8328
8306
const llvm::DenseSet<CanonicalDeclPtr<const Decl>> &SkipVarSet =
8329
8307
llvm::DenseSet<CanonicalDeclPtr<const Decl>>()) const {
8330
8308
assert(CurDir.is<const OMPExecutableDirective *>() &&
8331
8309
"Expect a executable directive");
8332
8310
const auto *CurExecDir = CurDir.get<const OMPExecutableDirective *>();
8333
- generateAllInfoForClauses(CurExecDir->clauses(), CombinedInfo, SkipVarSet);
8311
+ generateAllInfoForClauses(CurExecDir->clauses(), CombinedInfo, OMPBuilder,
8312
+ SkipVarSet);
8334
8313
}
8335
8314
8336
8315
/// Generate all the base pointers, section pointers, sizes, map types, and
8337
8316
/// mappers for the extracted map clauses of user-defined mapper (all included
8338
8317
/// in \a CombinedInfo).
8339
- void generateAllInfoForMapper(MapCombinedInfoTy &CombinedInfo) const {
8318
+ void generateAllInfoForMapper(MapCombinedInfoTy &CombinedInfo,
8319
+ llvm::OpenMPIRBuilder &OMPBuilder) const {
8340
8320
assert(CurDir.is<const OMPDeclareMapperDecl *>() &&
8341
8321
"Expect a declare mapper directive");
8342
8322
const auto *CurMapperDir = CurDir.get<const OMPDeclareMapperDecl *>();
8343
- generateAllInfoForClauses(CurMapperDir->clauses(), CombinedInfo);
8323
+ generateAllInfoForClauses(CurMapperDir->clauses(), CombinedInfo,
8324
+ OMPBuilder);
8344
8325
}
8345
8326
8346
8327
/// Emit capture info for lambdas for variables captured by reference.
@@ -8422,6 +8403,7 @@ class MappableExprsHandler {
8422
8403
8423
8404
/// Set correct indices for lambdas captures.
8424
8405
void adjustMemberOfForLambdaCaptures(
8406
+ llvm::OpenMPIRBuilder &OMPBuilder,
8425
8407
const llvm::DenseMap<llvm::Value *, llvm::Value *> &LambdaPointers,
8426
8408
MapBaseValuesArrayTy &BasePointers, MapValuesArrayTy &Pointers,
8427
8409
MapFlagsArrayTy &Types) const {
@@ -8446,8 +8428,9 @@ class MappableExprsHandler {
8446
8428
// All other current entries will be MEMBER_OF the combined entry
8447
8429
// (except for PTR_AND_OBJ entries which do not have a placeholder value
8448
8430
// 0xFFFF in the MEMBER_OF field).
8449
- OpenMPOffloadMappingFlags MemberOfFlag = getMemberOfFlag(TgtIdx);
8450
- setCorrectMemberOfFlag(Types[I], MemberOfFlag);
8431
+ OpenMPOffloadMappingFlags MemberOfFlag =
8432
+ OMPBuilder.getMemberOfFlag(TgtIdx);
8433
+ OMPBuilder.setCorrectMemberOfFlag(Types[I], MemberOfFlag);
8451
8434
}
8452
8435
}
8453
8436
@@ -9141,7 +9124,7 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
9141
9124
// Get map clause information. Fill up the arrays with all mapped variables.
9142
9125
MappableExprsHandler::MapCombinedInfoTy Info;
9143
9126
MappableExprsHandler MEHandler(*D, MapperCGF);
9144
- MEHandler.generateAllInfoForMapper(Info);
9127
+ MEHandler.generateAllInfoForMapper(Info, OMPBuilder );
9145
9128
9146
9129
// Call the runtime API __tgt_mapper_num_components to get the number of
9147
9130
// pre-existing components.
@@ -9525,19 +9508,20 @@ static void emitTargetCallKernelLaunch(
9525
9508
CombinedInfo.append(PartialStruct.PreliminaryMapData);
9526
9509
MEHandler.emitCombinedEntry(
9527
9510
CombinedInfo, CurInfo.Types, PartialStruct, CI->capturesThis(),
9528
- nullptr, !PartialStruct.PreliminaryMapData.BasePointers.empty());
9511
+ OMPBuilder, nullptr,
9512
+ !PartialStruct.PreliminaryMapData.BasePointers.empty());
9529
9513
}
9530
9514
9531
9515
// We need to append the results of this capture to what we already have.
9532
9516
CombinedInfo.append(CurInfo);
9533
9517
}
9534
9518
// Adjust MEMBER_OF flags for the lambdas captures.
9535
9519
MEHandler.adjustMemberOfForLambdaCaptures(
9536
- LambdaPointers, CombinedInfo.BasePointers , CombinedInfo.Pointers ,
9537
- CombinedInfo.Types);
9520
+ OMPBuilder, LambdaPointers , CombinedInfo.BasePointers ,
9521
+ CombinedInfo.Pointers, CombinedInfo. Types);
9538
9522
// Map any list items in a map clause that were not captures because they
9539
9523
// weren't referenced within the construct.
9540
- MEHandler.generateAllInfo(CombinedInfo, MappedVarSet);
9524
+ MEHandler.generateAllInfo(CombinedInfo, OMPBuilder, MappedVarSet);
9541
9525
9542
9526
CGOpenMPRuntime::TargetDataInfo Info;
9543
9527
// Fill up the arrays and create the arguments.
@@ -10272,7 +10256,7 @@ void CGOpenMPRuntime::emitTargetDataCalls(
10272
10256
CGF.Builder.restoreIP(CodeGenIP);
10273
10257
// Get map clause information.
10274
10258
MappableExprsHandler MEHandler(D, CGF);
10275
- MEHandler.generateAllInfo(CombinedInfo);
10259
+ MEHandler.generateAllInfo(CombinedInfo, OMPBuilder );
10276
10260
10277
10261
auto FillInfoMap = [&](MappableExprsHandler::MappingExprInfo &MapExpr) {
10278
10262
return emitMappingInformation(CGF, OMPBuilder, MapExpr);
@@ -10478,7 +10462,7 @@ void CGOpenMPRuntime::emitTargetDataStandAloneCall(
10478
10462
10479
10463
// Get map clause information.
10480
10464
MappableExprsHandler MEHandler(D, CGF);
10481
- MEHandler.generateAllInfo(CombinedInfo);
10465
+ MEHandler.generateAllInfo(CombinedInfo, OMPBuilder );
10482
10466
10483
10467
CGOpenMPRuntime::TargetDataInfo Info;
10484
10468
// Fill up the arrays and create the arguments.
0 commit comments