From 4553bd26281ff00e1c1ad1bf6e6b68af45819de8 Mon Sep 17 00:00:00 2001 From: Ritanya B Bharadwaj Date: Mon, 16 Jun 2025 13:25:29 -0500 Subject: [PATCH 1/2] [clang][OpenMP] OpenMP ThreadSet clause - basic runtime --- openmp/runtime/src/kmp.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openmp/runtime/src/kmp.h b/openmp/runtime/src/kmp.h index a2cacc8792b15..7a17b9f8550e9 100644 --- a/openmp/runtime/src/kmp.h +++ b/openmp/runtime/src/kmp.h @@ -2740,7 +2740,8 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */ unsigned tasking_ser : 1; unsigned task_serial : 1; unsigned tasktype : 1; - unsigned reserved : 8; + unsigned free_agent_eligible : 1; + unsigned reserved : 7; unsigned hidden_helper : 1; unsigned detachable : 1; unsigned priority_specified : 1; @@ -2763,7 +2764,9 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */ setting for the task */ unsigned detachable : 1; /* 1 == can detach */ unsigned hidden_helper : 1; /* 1 == hidden helper task */ - unsigned reserved : 8; /* reserved for compiler use */ + unsigned reserved : 7; /* reserved for compiler use */ + unsigned free_agent_eligible : 1; /* set if task can be executed by a + free-agent thread */ /* Library flags */ /* Total library flags must be 16 bits */ unsigned tasktype : 1; /* task is either explicit(1) or implicit (0) */ From b40dd81949a9649a5a85d700e04645182c2e6817 Mon Sep 17 00:00:00 2001 From: Ritanya B Bharadwaj Date: Sun, 29 Jun 2025 09:25:23 -0500 Subject: [PATCH 2/2] Reordering the flags in kmp.h based on review comments --- openmp/runtime/src/kmp.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/openmp/runtime/src/kmp.h b/openmp/runtime/src/kmp.h index 7a17b9f8550e9..f62cabee6ea84 100644 --- a/openmp/runtime/src/kmp.h +++ b/openmp/runtime/src/kmp.h @@ -2725,11 +2725,12 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */ #if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) /* Same fields as in the #else branch, but in reverse order */ #if OMPX_TASKGRAPH - unsigned reserved31 : 5; + unsigned reserved31 : 4; unsigned onced : 1; #else - unsigned reserved31 : 6; + unsigned reserved31 : 5; #endif + unsigned hidden_helper : 1; unsigned target : 1; unsigned native : 1; unsigned freed : 1; @@ -2740,9 +2741,8 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */ unsigned tasking_ser : 1; unsigned task_serial : 1; unsigned tasktype : 1; + unsigned reserved : 8; unsigned free_agent_eligible : 1; - unsigned reserved : 7; - unsigned hidden_helper : 1; unsigned detachable : 1; unsigned priority_specified : 1; unsigned proxy : 1; @@ -2763,10 +2763,9 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */ unsigned priority_specified : 1; /* set if the compiler provides priority setting for the task */ unsigned detachable : 1; /* 1 == can detach */ - unsigned hidden_helper : 1; /* 1 == hidden helper task */ - unsigned reserved : 7; /* reserved for compiler use */ unsigned free_agent_eligible : 1; /* set if task can be executed by a free-agent thread */ + unsigned reserved : 8; /* reserved for compiler use */ /* Library flags */ /* Total library flags must be 16 bits */ unsigned tasktype : 1; /* task is either explicit(1) or implicit (0) */ @@ -2783,11 +2782,12 @@ typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */ unsigned freed : 1; /* 1==freed, 0==allocated */ unsigned native : 1; /* 1==gcc-compiled task, 0==intel */ unsigned target : 1; + unsigned hidden_helper : 1; /* 1 == hidden helper task */ #if OMPX_TASKGRAPH unsigned onced : 1; /* 1==ran once already, 0==never ran, record & replay purposes */ - unsigned reserved31 : 5; /* reserved for library use */ + unsigned reserved31 : 4; /* reserved for library use */ #else - unsigned reserved31 : 6; /* reserved for library use */ + unsigned reserved31 : 5; /* reserved for library use */ #endif #endif } kmp_tasking_flags_t;