@@ -254,9 +254,6 @@ class AccAttributeVisitor : DirectiveAttributeVisitor<llvm::acc::Directive> {
254
254
Symbol::Flag::AccCopyIn, Symbol::Flag::AccCopyOut,
255
255
Symbol::Flag::AccDelete, Symbol::Flag::AccPresent};
256
256
257
- Symbol::Flags accFlagsRequireNewSymbol{Symbol::Flag::AccPrivate,
258
- Symbol::Flag::AccFirstPrivate, Symbol::Flag::AccReduction};
259
-
260
257
Symbol::Flags accDataMvtFlags{
261
258
Symbol::Flag::AccDevice, Symbol::Flag::AccHost, Symbol::Flag::AccSelf};
262
259
@@ -266,7 +263,7 @@ class AccAttributeVisitor : DirectiveAttributeVisitor<llvm::acc::Directive> {
266
263
Symbol::Flag::AccDevicePtr, Symbol::Flag::AccDeviceResident,
267
264
Symbol::Flag::AccLink, Symbol::Flag::AccPresent};
268
265
269
- void PrivatizeAssociatedLoopIndex (const parser::OpenACCLoopConstruct &);
266
+ void CheckAssociatedLoopIndex (const parser::OpenACCLoopConstruct &);
270
267
void ResolveAccObjectList (const parser::AccObjectList &, Symbol::Flag);
271
268
void ResolveAccObject (const parser::AccObject &, Symbol::Flag);
272
269
Symbol *ResolveAcc (const parser::Name &, Symbol::Flag, Scope &);
@@ -877,7 +874,7 @@ bool AccAttributeVisitor::Pre(const parser::OpenACCLoopConstruct &x) {
877
874
}
878
875
ClearDataSharingAttributeObjects ();
879
876
SetContextAssociatedLoopLevel (GetAssociatedLoopLevelFromClauses (clauseList));
880
- PrivatizeAssociatedLoopIndex (x);
877
+ CheckAssociatedLoopIndex (x);
881
878
return true ;
882
879
}
883
880
@@ -1141,13 +1138,12 @@ std::int64_t AccAttributeVisitor::GetAssociatedLoopLevelFromClauses(
1141
1138
return 1 ; // default is outermost loop
1142
1139
}
1143
1140
1144
- void AccAttributeVisitor::PrivatizeAssociatedLoopIndex (
1141
+ void AccAttributeVisitor::CheckAssociatedLoopIndex (
1145
1142
const parser::OpenACCLoopConstruct &x) {
1146
1143
std::int64_t level{GetContext ().associatedLoopLevel };
1147
- if (level <= 0 ) { // collpase value was negative or 0
1144
+ if (level <= 0 ) { // collapse value was negative or 0
1148
1145
return ;
1149
1146
}
1150
- Symbol::Flag ivDSA{Symbol::Flag::AccPrivate};
1151
1147
1152
1148
const auto getNextDoConstruct =
1153
1149
[this ](const parser::Block &block) -> const parser::DoConstruct * {
@@ -1166,16 +1162,8 @@ void AccAttributeVisitor::PrivatizeAssociatedLoopIndex(
1166
1162
1167
1163
const auto &outer{std::get<std::optional<parser::DoConstruct>>(x.t )};
1168
1164
for (const parser::DoConstruct *loop{&*outer}; loop && level > 0 ; --level) {
1169
- // go through all the nested do-loops and resolve index variables
1170
- const parser::Name *iv{GetLoopIndex (*loop)};
1171
- if (iv) {
1172
- if (auto *symbol{ResolveAcc (*iv, ivDSA, currScope ())}) {
1173
- symbol->set (Symbol::Flag::AccPreDetermined);
1174
- iv->symbol = symbol; // adjust the symbol within region
1175
- AddToContextObjectWithDSA (*symbol, ivDSA);
1176
- }
1177
- }
1178
-
1165
+ // Go through all nested loops to ensure index variable exists.
1166
+ GetLoopIndex (*loop);
1179
1167
const auto &block{std::get<parser::Block>(loop->t )};
1180
1168
loop = getNextDoConstruct (block);
1181
1169
}
@@ -1328,20 +1316,12 @@ void AccAttributeVisitor::ResolveAccObject(
1328
1316
1329
1317
Symbol *AccAttributeVisitor::ResolveAcc (
1330
1318
const parser::Name &name, Symbol::Flag accFlag, Scope &scope) {
1331
- if (accFlagsRequireNewSymbol.test (accFlag)) {
1332
- return DeclarePrivateAccessEntity (name, accFlag, scope);
1333
- } else {
1334
- return DeclareOrMarkOtherAccessEntity (name, accFlag);
1335
- }
1319
+ return DeclareOrMarkOtherAccessEntity (name, accFlag);
1336
1320
}
1337
1321
1338
1322
Symbol *AccAttributeVisitor::ResolveAcc (
1339
1323
Symbol &symbol, Symbol::Flag accFlag, Scope &scope) {
1340
- if (accFlagsRequireNewSymbol.test (accFlag)) {
1341
- return DeclarePrivateAccessEntity (symbol, accFlag, scope);
1342
- } else {
1343
- return DeclareOrMarkOtherAccessEntity (symbol, accFlag);
1344
- }
1324
+ return DeclareOrMarkOtherAccessEntity (symbol, accFlag);
1345
1325
}
1346
1326
1347
1327
Symbol *AccAttributeVisitor::DeclareOrMarkOtherAccessEntity (
@@ -1374,11 +1354,6 @@ static bool WithMultipleAppearancesAccException(
1374
1354
void AccAttributeVisitor::CheckMultipleAppearances (
1375
1355
const parser::Name &name, const Symbol &symbol, Symbol::Flag accFlag) {
1376
1356
const auto *target{&symbol};
1377
- if (accFlagsRequireNewSymbol.test (accFlag)) {
1378
- if (const auto *details{symbol.detailsIf <HostAssocDetails>()}) {
1379
- target = &details->symbol ();
1380
- }
1381
- }
1382
1357
if (HasDataSharingAttributeObject (*target) &&
1383
1358
!WithMultipleAppearancesAccException (symbol, accFlag)) {
1384
1359
context_.Say (name.source ,
0 commit comments