Commit 4bf1cec7 by Martin Jambor Committed by Martin Jambor

[hsa] Consodlidate GTY roots for trees used during expansion to HSA

2016-03-07  Martin Jambor  <mjambor@suse.cz>

	* hsa.h (hsa_get_ctor_statements): Declare.
	(hsa_get_dtor_statements): Likewise.
	(hsa_get_kernel_dispatch_type): Likewise.
	* hsa.c (hsa_get_ctor_statements): New function.
	(hsa_get_dtor_statements): Likewise.
	(hsa_get_kernel_dispatch_type): Likewise.
	* hsa-brig.c (hsa_cdtor_statements): Removed.
	(hsa_output_libgomp_mapping): Use hsa_get_ctor_statements and
	hsa_get_dtor_statements.
	* hsa-gen.c (hsa_kernel_dispatch_type): Removed.
	(get_hsa_kernel_dispatch_offset): Use hsa_get_kernel_dispatch_type.

From-SVN: r234042
parent 94156b3f
2016-03-07 Martin Jambor <mjambor@suse.cz>
* hsa.h (hsa_get_ctor_statements): Declare.
(hsa_get_dtor_statements): Likewise.
(hsa_get_kernel_dispatch_type): Likewise.
* hsa.c (hsa_get_ctor_statements): New function.
(hsa_get_dtor_statements): Likewise.
(hsa_get_kernel_dispatch_type): Likewise.
* hsa-brig.c (hsa_cdtor_statements): Removed.
(hsa_output_libgomp_mapping): Use hsa_get_ctor_statements and
hsa_get_dtor_statements.
* hsa-gen.c (hsa_kernel_dispatch_type): Removed.
(get_hsa_kernel_dispatch_offset): Use hsa_get_kernel_dispatch_type.
2016-03-07 Andre Vieira <andre.simoesdiasvieira@arm.com>
* config/arm/arm-cores.def (cortex-r8): New.
......
......@@ -2006,8 +2006,6 @@ hsa_brig_emit_omp_symbols (void)
emit_directive_variable (hsa_num_threads);
}
static GTY(()) tree hsa_cdtor_statements[2];
/* Create and return __hsa_global_variables symbol that contains
all informations consumed by libgomp to link global variables
with their string names used by an HSA kernel. */
......@@ -2408,6 +2406,7 @@ hsa_output_libgomp_mapping (tree brig_decl)
= builtin_decl_explicit (BUILT_IN_GOMP_OFFLOAD_REGISTER);
gcc_checking_assert (offload_register);
tree *hsa_ctor_stmts = hsa_get_ctor_statements ();
append_to_statement_list
(build_call_expr (offload_register, 4,
build_int_cstu (unsigned_type_node,
......@@ -2416,15 +2415,15 @@ hsa_output_libgomp_mapping (tree brig_decl)
build_fold_addr_expr (hsa_libgomp_host_table),
build_int_cst (integer_type_node, GOMP_DEVICE_HSA),
build_fold_addr_expr (hsa_img_descriptor)),
&hsa_cdtor_statements[0]);
hsa_ctor_stmts);
cgraph_build_static_cdtor ('I', hsa_cdtor_statements[0],
DEFAULT_INIT_PRIORITY);
cgraph_build_static_cdtor ('I', *hsa_ctor_stmts, DEFAULT_INIT_PRIORITY);
tree offload_unregister
= builtin_decl_explicit (BUILT_IN_GOMP_OFFLOAD_UNREGISTER);
gcc_checking_assert (offload_unregister);
tree *hsa_dtor_stmts = hsa_get_dtor_statements ();
append_to_statement_list
(build_call_expr (offload_unregister, 4,
build_int_cstu (unsigned_type_node,
......@@ -2433,9 +2432,8 @@ hsa_output_libgomp_mapping (tree brig_decl)
build_fold_addr_expr (hsa_libgomp_host_table),
build_int_cst (integer_type_node, GOMP_DEVICE_HSA),
build_fold_addr_expr (hsa_img_descriptor)),
&hsa_cdtor_statements[1]);
cgraph_build_static_cdtor ('D', hsa_cdtor_statements[1],
DEFAULT_INIT_PRIORITY);
hsa_dtor_stmts);
cgraph_build_static_cdtor ('D', *hsa_dtor_stmts, DEFAULT_INIT_PRIORITY);
}
/* Emit the brig module we have compiled to a section in the final assembly and
......
......@@ -3772,20 +3772,19 @@ gen_set_num_threads (tree value, hsa_bb *hbb)
hbb->append_insn (basic);
}
static GTY (()) tree hsa_kernel_dispatch_type = NULL;
/* Return byte offset of a FIELD_NAME in GOMP_hsa_kernel_dispatch which
is defined in plugin-hsa.c. */
static HOST_WIDE_INT
get_hsa_kernel_dispatch_offset (const char *field_name)
{
if (hsa_kernel_dispatch_type == NULL)
tree *hsa_kernel_dispatch_type = hsa_get_kernel_dispatch_type ();
if (*hsa_kernel_dispatch_type == NULL)
{
/* Collection of information needed for a dispatch of a kernel from a
kernel. Keep in sync with libgomp's plugin-hsa.c. */
hsa_kernel_dispatch_type = make_node (RECORD_TYPE);
*hsa_kernel_dispatch_type = make_node (RECORD_TYPE);
tree id_f1 = build_decl (BUILTINS_LOCATION, FIELD_DECL,
get_identifier ("queue"), ptr_type_node);
DECL_CHAIN (id_f1) = NULL_TREE;
......@@ -3835,12 +3834,12 @@ get_hsa_kernel_dispatch_offset (const char *field_name)
DECL_CHAIN (id_f12) = id_f11;
finish_builtin_struct (hsa_kernel_dispatch_type, "__hsa_kernel_dispatch",
finish_builtin_struct (*hsa_kernel_dispatch_type, "__hsa_kernel_dispatch",
id_f12, NULL_TREE);
TYPE_ARTIFICIAL (hsa_kernel_dispatch_type) = 1;
TYPE_ARTIFICIAL (*hsa_kernel_dispatch_type) = 1;
}
for (tree chain = TYPE_FIELDS (hsa_kernel_dispatch_type);
for (tree chain = TYPE_FIELDS (*hsa_kernel_dispatch_type);
chain != NULL_TREE; chain = TREE_CHAIN (chain))
if (strcmp (field_name, IDENTIFIER_POINTER (DECL_NAME (chain))) == 0)
return int_byte_position (chain);
......
......@@ -712,6 +712,31 @@ hsa_add_kernel_dependency (tree caller, const char *called_function)
s->safe_push (called_function);
}
/* Expansion to HSA needs a few gc roots to hold types, constructors etc. In
order to minimize the number of GTY roots, we'll root them all in the
following array. The individual elements should only be accessed by the
very simple getters (of a pointer-to-tree) below. */
static GTY(()) tree hsa_tree_gt_roots[3];
tree *
hsa_get_ctor_statements (void)
{
return &hsa_tree_gt_roots[0];
}
tree *
hsa_get_dtor_statements (void)
{
return &hsa_tree_gt_roots[1];
}
tree *
hsa_get_kernel_dispatch_type (void)
{
return &hsa_tree_gt_roots[2];
}
/* Modify the name P in-place so that it is a valid HSA identifier. */
void
......
......@@ -1353,6 +1353,9 @@ char *hsa_get_decl_kernel_mapping_name (unsigned i);
unsigned hsa_get_decl_kernel_mapping_omp_size (unsigned i);
bool hsa_get_decl_kernel_mapping_gridified (unsigned i);
void hsa_free_decl_kernel_mapping (void);
tree *hsa_get_ctor_statements (void);
tree *hsa_get_dtor_statements (void);
tree *hsa_get_kernel_dispatch_type (void);
void hsa_add_kernel_dependency (tree caller, const char *called_function);
void hsa_sanitize_name (char *p);
char *hsa_brig_function_name (const char *p);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment