[llvm] [OpenMP] Remove usage of pointer-to-member in lookup (PR #123671)

Joseph Huber via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 20 18:58:10 PST 2025


================
@@ -158,63 +158,61 @@ struct DateEnvironmentRAII {
 /// TODO
 void resetStateForThread(uint32_t TId);
 
-inline uint32_t &lookupForModify32Impl(uint32_t state::ICVStateTy::*Var,
-                                       IdentTy *Ident, bool ForceTeamState) {
-  if (OMP_LIKELY(ForceTeamState || !config::mayUseThreadStates() ||
-                 !TeamState.HasThreadState))
-    return TeamState.ICVState.*Var;
-  uint32_t TId = mapping::getThreadIdInBlock();
-  if (OMP_UNLIKELY(!ThreadStates[TId])) {
-    ThreadStates[TId] = reinterpret_cast<ThreadStateTy *>(memory::allocGlobal(
-        sizeof(ThreadStateTy), "ICV modification outside data environment"));
-    ASSERT(ThreadStates[TId] != nullptr, "Nullptr returned by malloc!");
-    TeamState.HasThreadState = true;
-    ThreadStates[TId]->init();
+// FIXME: https://github.com/llvm/llvm-project/issues/123241.
+#define lookupForModify32Impl(Member, Ident, ForceTeamState)                   \
----------------
jhuber6 wrote:

Basically it encodes an enum to a struct member. I could obviously pass `offsetof(S, Member)` and return a pointer (or a reference), but I wanted to keep the code as similar as possible. Otherwise, there's no easy way to avoid the member pointer syntax.

https://github.com/llvm/llvm-project/pull/123671


More information about the llvm-commits mailing list