[gomp] Simplify thread pool initialization
authorSebastian Huber <sebastian.huber@embedded-brains.de>
Thu, 3 Sep 2015 11:24:34 +0000 (11:24 +0000)
committerSebastian Huber <sh@gcc.gnu.org>
Thu, 3 Sep 2015 11:24:34 +0000 (11:24 +0000)
libgomp/ChangeLog

* team.c (gomp_new_thread_pool): Delete and move content to ...
(gomp_get_thread_pool): ... new function.  Allocate and
initialize thread pool on demand.
(get_last_team): Use gomp_get_thread_pool().
(gomp_team_start): Delete thread pool initialization.

From-SVN: r227439

libgomp/ChangeLog
libgomp/team.c

index d5aaa486204869bd2f344c08aa0f12d86c3c399f..319795c41ba62bcefabe826f259efc8e0ccdc918 100644 (file)
@@ -1,3 +1,11 @@
+2015-09-03  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * team.c (gomp_new_thread_pool): Delete and move content to ...
+       (gomp_get_thread_pool): ... new function.  Allocate and
+       initialize thread pool on demand.
+       (get_last_team): Use gomp_get_thread_pool().
+       (gomp_team_start): Delete thread pool initialization.
+
 2015-09-03  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/65637
index 7671b05c5bd6a3541b921173cf56630af97a6898..e1c4d60270e0e70a83bfb7a695ecbdac483ae351 100644 (file)
@@ -134,22 +134,39 @@ gomp_thread_start (void *xdata)
   return NULL;
 }
 
+/* Get the thread pool, allocate and initialize it on demand.  */
+
+static inline struct gomp_thread_pool *
+gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads)
+{
+  struct gomp_thread_pool *pool = thr->thread_pool;
+  if (__builtin_expect (pool == NULL, 0))
+    {
+      pool = gomp_malloc (sizeof (*pool));
+      pool->threads = NULL;
+      pool->threads_size = 0;
+      pool->threads_used = 0;
+      pool->last_team = NULL;
+      pool->threads_busy = nthreads;
+      thr->thread_pool = pool;
+      pthread_setspecific (gomp_thread_destructor, thr);
+    }
+  return pool;
+}
+
 static inline struct gomp_team *
 get_last_team (unsigned nthreads)
 {
   struct gomp_thread *thr = gomp_thread ();
   if (thr->ts.team == NULL)
     {
-      struct gomp_thread_pool *pool = thr->thread_pool;
-      if (pool != NULL)
-       {
-         struct gomp_team *last_team = pool->last_team;
-         if (last_team != NULL && last_team->nthreads == nthreads)
-           {
-             pool->last_team = NULL;
-             return last_team;
-           }
-       }
+      struct gomp_thread_pool *pool = gomp_get_thread_pool (thr, nthreads);
+      struct gomp_team *last_team = pool->last_team;
+      if (last_team != NULL && last_team->nthreads == nthreads)
+        {
+          pool->last_team = NULL;
+          return last_team;
+        }
     }
   return NULL;
 }
@@ -219,19 +236,6 @@ free_team (struct gomp_team *team)
   free (team);
 }
 
-/* Allocate and initialize a thread pool. */
-
-static struct gomp_thread_pool *gomp_new_thread_pool (void)
-{
-  struct gomp_thread_pool *pool
-    = gomp_malloc (sizeof(struct gomp_thread_pool));
-  pool->threads = NULL;
-  pool->threads_size = 0;
-  pool->threads_used = 0;
-  pool->last_team = NULL;
-  return pool;
-}
-
 static void
 gomp_free_pool_helper (void *thread_pool)
 {
@@ -316,12 +320,6 @@ gomp_team_start (void (*fn) (void *), void *data, unsigned nthreads,
 
   thr = gomp_thread ();
   nested = thr->ts.team != NULL;
-  if (__builtin_expect (thr->thread_pool == NULL, 0))
-    {
-      thr->thread_pool = gomp_new_thread_pool ();
-      thr->thread_pool->threads_busy = nthreads;
-      pthread_setspecific (gomp_thread_destructor, thr);
-    }
   pool = thr->thread_pool;
   task = thr->task;
   icv = task ? &task->icv : &gomp_global_icv;