@@ -158,63 +158,61 @@ struct DateEnvironmentRAII {
158
158
// / TODO
159
159
void resetStateForThread (uint32_t TId);
160
160
161
- inline uint32_t &lookupForModify32Impl (uint32_t state::ICVStateTy::*Var,
162
- IdentTy *Ident, bool ForceTeamState) {
163
- if (OMP_LIKELY (ForceTeamState || !config::mayUseThreadStates () ||
164
- !TeamState.HasThreadState ))
165
- return TeamState.ICVState .*Var;
166
- uint32_t TId = mapping::getThreadIdInBlock ();
167
- if (OMP_UNLIKELY (!ThreadStates[TId])) {
168
- ThreadStates[TId] = reinterpret_cast <ThreadStateTy *>(memory::allocGlobal (
169
- sizeof (ThreadStateTy), " ICV modification outside data environment" ));
170
- ASSERT (ThreadStates[TId] != nullptr , " Nullptr returned by malloc!" );
171
- TeamState.HasThreadState = true ;
172
- ThreadStates[TId]->init ();
161
+ // FIXME: https://github.com/llvm/llvm-project/issues/123241.
162
+ #define lookupForModify32Impl (Member, Ident, ForceTeamState ) \
163
+ { \
164
+ if (OMP_LIKELY (ForceTeamState || !config::mayUseThreadStates () || \
165
+ !TeamState.HasThreadState )) \
166
+ return TeamState.ICVState .Member ; \
167
+ uint32_t TId = mapping::getThreadIdInBlock (); \
168
+ if (OMP_UNLIKELY (!ThreadStates[TId])) { \
169
+ ThreadStates[TId] = reinterpret_cast <ThreadStateTy *>( \
170
+ memory::allocGlobal (sizeof (ThreadStateTy), \
171
+ " ICV modification outside data environment" )); \
172
+ ASSERT (ThreadStates[TId] != nullptr , " Nullptr returned by malloc!" ); \
173
+ TeamState.HasThreadState = true ; \
174
+ ThreadStates[TId]->init (); \
175
+ } \
176
+ return ThreadStates[TId]->ICVState .Member ; \
173
177
}
174
- return ThreadStates[TId]->ICVState .*Var;
175
- }
176
178
177
- inline uint32_t &lookupImpl (uint32_t state::ICVStateTy::*Var,
178
- bool ForceTeamState) {
179
- auto TId = mapping::getThreadIdInBlock ();
180
- if (OMP_UNLIKELY (!ForceTeamState && config::mayUseThreadStates () &&
181
- TeamState.HasThreadState && ThreadStates[TId]))
182
- return ThreadStates[TId]->ICVState .*Var;
183
- return TeamState.ICVState .*Var;
184
- }
179
+ // FIXME: https://github.com/llvm/llvm-project/issues/123241.
180
+ #define lookupImpl (Member, ForceTeamState ) \
181
+ { \
182
+ auto TId = mapping::getThreadIdInBlock (); \
183
+ if (OMP_UNLIKELY (!ForceTeamState && config::mayUseThreadStates () && \
184
+ TeamState.HasThreadState && ThreadStates[TId])) \
185
+ return ThreadStates[TId]->ICVState .Member ; \
186
+ return TeamState.ICVState .Member ; \
187
+ }
185
188
186
189
[[gnu::always_inline, gnu::flatten]] inline uint32_t &
187
190
lookup32 (ValueKind Kind, bool IsReadonly, IdentTy *Ident, bool ForceTeamState) {
188
191
switch (Kind) {
189
192
case state::VK_NThreads:
190
193
if (IsReadonly)
191
- return lookupImpl (&ICVStateTy::NThreadsVar, ForceTeamState);
192
- return lookupForModify32Impl (&ICVStateTy::NThreadsVar, Ident,
193
- ForceTeamState);
194
+ lookupImpl (NThreadsVar, ForceTeamState);
195
+ lookupForModify32Impl (NThreadsVar, Ident, ForceTeamState);
194
196
case state::VK_Level:
195
197
if (IsReadonly)
196
- return lookupImpl (&ICVStateTy:: LevelVar, ForceTeamState);
197
- return lookupForModify32Impl (&ICVStateTy:: LevelVar, Ident, ForceTeamState);
198
+ lookupImpl (LevelVar, ForceTeamState);
199
+ lookupForModify32Impl (LevelVar, Ident, ForceTeamState);
198
200
case state::VK_ActiveLevel:
199
201
if (IsReadonly)
200
- return lookupImpl (&ICVStateTy::ActiveLevelVar, ForceTeamState);
201
- return lookupForModify32Impl (&ICVStateTy::ActiveLevelVar, Ident,
202
- ForceTeamState);
202
+ lookupImpl (ActiveLevelVar, ForceTeamState);
203
+ lookupForModify32Impl (ActiveLevelVar, Ident, ForceTeamState);
203
204
case state::VK_MaxActiveLevels:
204
205
if (IsReadonly)
205
- return lookupImpl (&ICVStateTy::MaxActiveLevelsVar, ForceTeamState);
206
- return lookupForModify32Impl (&ICVStateTy::MaxActiveLevelsVar, Ident,
207
- ForceTeamState);
206
+ lookupImpl (MaxActiveLevelsVar, ForceTeamState);
207
+ lookupForModify32Impl (MaxActiveLevelsVar, Ident, ForceTeamState);
208
208
case state::VK_RunSched:
209
209
if (IsReadonly)
210
- return lookupImpl (&ICVStateTy::RunSchedVar, ForceTeamState);
211
- return lookupForModify32Impl (&ICVStateTy::RunSchedVar, Ident,
212
- ForceTeamState);
210
+ lookupImpl (RunSchedVar, ForceTeamState);
211
+ lookupForModify32Impl (RunSchedVar, Ident, ForceTeamState);
213
212
case state::VK_RunSchedChunk:
214
213
if (IsReadonly)
215
- return lookupImpl (&ICVStateTy::RunSchedChunkVar, ForceTeamState);
216
- return lookupForModify32Impl (&ICVStateTy::RunSchedChunkVar, Ident,
217
- ForceTeamState);
214
+ lookupImpl (RunSchedChunkVar, ForceTeamState);
215
+ lookupForModify32Impl (RunSchedChunkVar, Ident, ForceTeamState);
218
216
case state::VK_ParallelTeamSize:
219
217
return TeamState.ParallelTeamSize ;
220
218
case state::VK_HasThreadState:
0 commit comments