mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-16 04:20:26 +08:00
[nvptx] Add nvptx_mach_vector_length, nvptx_mach_max_workers
The vector length and maximum number of workers are known compile-time. Make these easily available during code generation via new functions. 2019-01-03 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.c (MACH_VECTOR_LENGTH, MACH_MAX_WORKERS): Define. (init_axis_dim, nvptx_mach_max_workers, nvptx_mach_vector_length): New function. * config/nvptx/nvptx.h (struct machine_function): Add axis_dims. From-SVN: r267558
This commit is contained in:
parent
2498a6abcc
commit
0d06e8c794
@ -1,3 +1,10 @@
|
||||
2019-01-03 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* config/nvptx/nvptx.c (MACH_VECTOR_LENGTH, MACH_MAX_WORKERS): Define.
|
||||
(init_axis_dim, nvptx_mach_max_workers, nvptx_mach_vector_length): New
|
||||
function.
|
||||
* config/nvptx/nvptx.h (struct machine_function): Add axis_dims.
|
||||
|
||||
2019-01-03 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* config/nvptx/nvptx.c (struct offload_attrs): New.
|
||||
|
@ -2883,6 +2883,47 @@ struct offload_attrs
|
||||
int vector_length;
|
||||
};
|
||||
|
||||
/* Define entries for cfun->machine->axis_dim. */
|
||||
|
||||
#define MACH_VECTOR_LENGTH 0
|
||||
#define MACH_MAX_WORKERS 1
|
||||
|
||||
static void populate_offload_attrs (offload_attrs *oa);
|
||||
|
||||
static void
|
||||
init_axis_dim (void)
|
||||
{
|
||||
offload_attrs oa;
|
||||
int max_workers;
|
||||
|
||||
populate_offload_attrs (&oa);
|
||||
|
||||
if (oa.num_workers == 0)
|
||||
max_workers = PTX_CTA_SIZE / oa.vector_length;
|
||||
else
|
||||
max_workers = oa.num_workers;
|
||||
|
||||
cfun->machine->axis_dim[MACH_VECTOR_LENGTH] = oa.vector_length;
|
||||
cfun->machine->axis_dim[MACH_MAX_WORKERS] = max_workers;
|
||||
cfun->machine->axis_dim_init_p = true;
|
||||
}
|
||||
|
||||
static int ATTRIBUTE_UNUSED
|
||||
nvptx_mach_max_workers ()
|
||||
{
|
||||
if (!cfun->machine->axis_dim_init_p)
|
||||
init_axis_dim ();
|
||||
return cfun->machine->axis_dim[MACH_MAX_WORKERS];
|
||||
}
|
||||
|
||||
static int ATTRIBUTE_UNUSED
|
||||
nvptx_mach_vector_length ()
|
||||
{
|
||||
if (!cfun->machine->axis_dim_init_p)
|
||||
init_axis_dim ();
|
||||
return cfun->machine->axis_dim[MACH_VECTOR_LENGTH];
|
||||
}
|
||||
|
||||
/* Loop structure of the function. The entire function is described as
|
||||
a NULL loop. */
|
||||
|
||||
|
@ -218,6 +218,9 @@ struct GTY(()) machine_function
|
||||
int return_mode; /* Return mode of current fn.
|
||||
(machine_mode not defined yet.) */
|
||||
rtx axis_predicate[2]; /* Neutering predicates. */
|
||||
int axis_dim[2]; /* Maximum number of threads on each axis, dim[0] is
|
||||
vector_length, dim[1] is num_workers. */
|
||||
bool axis_dim_init_p;
|
||||
rtx unisimt_master; /* 'Master lane index' for -muniform-simt. */
|
||||
rtx unisimt_predicate; /* Predicate for -muniform-simt. */
|
||||
rtx unisimt_location; /* Mask location for -muniform-simt. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user