@@ -158,63 +158,61 @@ struct DateEnvironmentRAII {
158158// / TODO
159159void resetStateForThread (uint32_t TId);
160160
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 ; \
173177 }
174- return ThreadStates[TId]->ICVState .*Var;
175- }
176178
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+ }
185188
186189[[gnu::always_inline, gnu::flatten]] inline uint32_t &
187190lookup32 (ValueKind Kind, bool IsReadonly, IdentTy *Ident, bool ForceTeamState) {
188191 switch (Kind) {
189192 case state::VK_NThreads:
190193 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);
194196 case state::VK_Level:
195197 if (IsReadonly)
196- return lookupImpl (&ICVStateTy:: LevelVar, ForceTeamState);
197- return lookupForModify32Impl (&ICVStateTy:: LevelVar, Ident, ForceTeamState);
198+ lookupImpl (LevelVar, ForceTeamState);
199+ lookupForModify32Impl (LevelVar, Ident, ForceTeamState);
198200 case state::VK_ActiveLevel:
199201 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);
203204 case state::VK_MaxActiveLevels:
204205 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);
208208 case state::VK_RunSched:
209209 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);
213212 case state::VK_RunSchedChunk:
214213 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);
218216 case state::VK_ParallelTeamSize:
219217 return TeamState.ParallelTeamSize ;
220218 case state::VK_HasThreadState:
0 commit comments