mirror of git://gcc.gnu.org/git/gcc.git
[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>
|
2019-01-03 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
* config/nvptx/nvptx.c (struct offload_attrs): New.
|
* config/nvptx/nvptx.c (struct offload_attrs): New.
|
||||||
|
|
|
||||||
|
|
@ -2883,6 +2883,47 @@ struct offload_attrs
|
||||||
int vector_length;
|
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
|
/* Loop structure of the function. The entire function is described as
|
||||||
a NULL loop. */
|
a NULL loop. */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -218,6 +218,9 @@ struct GTY(()) machine_function
|
||||||
int return_mode; /* Return mode of current fn.
|
int return_mode; /* Return mode of current fn.
|
||||||
(machine_mode not defined yet.) */
|
(machine_mode not defined yet.) */
|
||||||
rtx axis_predicate[2]; /* Neutering predicates. */
|
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_master; /* 'Master lane index' for -muniform-simt. */
|
||||||
rtx unisimt_predicate; /* Predicate for -muniform-simt. */
|
rtx unisimt_predicate; /* Predicate for -muniform-simt. */
|
||||||
rtx unisimt_location; /* Mask location for -muniform-simt. */
|
rtx unisimt_location; /* Mask location for -muniform-simt. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue