This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[gomp-nvptx 4/5] libgomp: remove __nvptx_stacks setup code
- From: Alexander Monakov <amonakov at ispras dot ru>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 15 Feb 2016 21:44:11 +0300
- Subject: [gomp-nvptx 4/5] libgomp: remove __nvptx_stacks setup code
- Authentication-results: sourceware.org; auth=none
- References: <1455561852-9237-1-git-send-email-amonakov at ispras dot ru>
This patch implements the NVPTX libgomp part of the transition to
host-allocated soft stacks. The wrapper around gomp_nvptx_main previously
responsible for that is no longer needed.
This mostly reverts commit b408f1293e29a009ba70a3fda7b800277e1f310a.
* config/nvptx/team.c: (gomp_nvptx_main_1): Rename back to...
(gomp_nvptx_main): ...this; delete the wrapper.
diff --git a/libgomp/config/nvptx/team.c b/libgomp/config/nvptx/team.c
index bc8c4e6..b9f9f9f 100644
--- a/libgomp/config/nvptx/team.c
+++ b/libgomp/config/nvptx/team.c
@@ -34,9 +34,12 @@ struct gomp_thread *nvptx_thrs __attribute__((shared));
static void gomp_thread_start (struct gomp_thread_pool *);
-static void __attribute__((noinline))
-gomp_nvptx_main_1 (void (*fn) (void *), void *fn_data, int ntids, int tid)
+void
+gomp_nvptx_main (void (*fn) (void *), void *fn_data)
{
+ int tid, ntids;
+ asm ("mov.u32 %0, %%tid.y;" : "=r" (tid));
+ asm ("mov.u32 %0, %%ntid.y;" : "=r" (ntids));
if (tid == 0)
{
gomp_global_icv.nthreads_var = ntids;
@@ -69,30 +72,6 @@ gomp_nvptx_main_1 (void (*fn) (void *), void *fn_data, int ntids, int tid)
}
}
-void
-gomp_nvptx_main (void (*fn) (void *), void *fn_data)
-{
- int tid, ntids;
- asm ("mov.u32 %0, %%tid.y;" : "=r" (tid));
- asm ("mov.u32 %0, %%ntid.y;" : "=r" (ntids));
- char *stacks = 0;
- int *__nvptx_uni;
- asm ("cvta.shared.u64 %0, __nvptx_uni;" : "=r" (__nvptx_uni));
- __nvptx_uni[tid] = 0;
- if (tid == 0)
- {
- size_t stacksize = 131072;
- stacks = gomp_malloc (stacksize * ntids);
- char **__nvptx_stacks = 0;
- asm ("cvta.shared.u64 %0, __nvptx_stacks;" : "=r" (__nvptx_stacks));
- for (int i = 0; i < ntids; i++)
- __nvptx_stacks[i] = stacks + stacksize * (i + 1);
- }
- asm ("bar.sync 0;");
- gomp_nvptx_main_1 (fn, fn_data, ntids, tid);
- free (stacks);
-}
-
/* This function is a pthread_create entry point. This contains the idle
loop in which a thread waits to be called up to become part of a team. */