diff options
author | Martin Liska <mliska@suse.cz> | 2018-06-08 14:13:20 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-06-08 12:13:20 +0000 |
commit | 0148358a02a230ef250718b13180527701edf3ca (patch) | |
tree | c391b8e527f99087eaf0e3f41c22636b16377a53 /gcc | |
parent | 99353fcfe4f50d131fae9978ce9cd19bcaf243cf (diff) | |
download | gcc-0148358a02a230ef250718b13180527701edf3ca.zip gcc-0148358a02a230ef250718b13180527701edf3ca.tar.gz gcc-0148358a02a230ef250718b13180527701edf3ca.tar.bz2 |
Add {symbol,call}_summary::get method and use it in HSA.
2018-06-08 Martin Liska <mliska@suse.cz>
* hsa-common.h (enum hsa_function_kind): Rename HSA_NONE to
HSA_INVALID.
(hsa_function_summary::hsa_function_summary): Use the new enum
value.
(hsa_gpu_implementation_p): Use hsa_summaries::get.
* hsa-gen.c (hsa_get_host_function): Likewise.
(get_brig_function_name): Likewise.
* ipa-hsa.c (process_hsa_functions): Likewise.
(ipa_hsa_write_summary): Likewise.
* symbol-summary.h (symtab_duplication): Use ::get function/
(get): New function.
From-SVN: r261310
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/hsa-common.h | 15 | ||||
-rw-r--r-- | gcc/hsa-gen.c | 9 | ||||
-rw-r--r-- | gcc/ipa-hsa.c | 22 | ||||
-rw-r--r-- | gcc/symbol-summary.h | 40 |
5 files changed, 62 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73260b6..c306be8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,19 @@ 2018-06-08 Martin Liska <mliska@suse.cz> + * hsa-common.h (enum hsa_function_kind): Rename HSA_NONE to + HSA_INVALID. + (hsa_function_summary::hsa_function_summary): Use the new enum + value. + (hsa_gpu_implementation_p): Use hsa_summaries::get. + * hsa-gen.c (hsa_get_host_function): Likewise. + (get_brig_function_name): Likewise. + * ipa-hsa.c (process_hsa_functions): Likewise. + (ipa_hsa_write_summary): Likewise. + * symbol-summary.h (symtab_duplication): Use ::get function/ + (get): New function. + +2018-06-08 Martin Liska <mliska@suse.cz> + * config/i386/i386.c (ix86_can_inline_p): Use get_create instead of get. * hsa-common.c (hsa_summary_t::link_functions): Likewise. diff --git a/gcc/hsa-common.h b/gcc/hsa-common.h index 849363c..c72343f 100644 --- a/gcc/hsa-common.h +++ b/gcc/hsa-common.h @@ -1208,7 +1208,7 @@ public: enum hsa_function_kind { - HSA_NONE, + HSA_INVALID, HSA_KERNEL, HSA_FUNCTION }; @@ -1234,7 +1234,7 @@ struct hsa_function_summary }; inline -hsa_function_summary::hsa_function_summary (): m_kind (HSA_NONE), +hsa_function_summary::hsa_function_summary (): m_kind (HSA_INVALID), m_bound_function (NULL), m_gpu_implementation_p (false) { } @@ -1244,7 +1244,10 @@ class hsa_summary_t: public function_summary <hsa_function_summary *> { public: hsa_summary_t (symbol_table *table): - function_summary<hsa_function_summary *> (table) { } + function_summary<hsa_function_summary *> (table) + { + disable_insertion_hook (); + } /* Couple GPU and HOST as gpu-specific and host-specific implementation of the same function. KIND determines whether GPU is a host-invokable kernel @@ -1407,10 +1410,8 @@ hsa_gpu_implementation_p (tree decl) if (hsa_summaries == NULL) return false; - hsa_function_summary *s - = hsa_summaries->get_create (cgraph_node::get_create (decl)); - - return s->m_gpu_implementation_p; + hsa_function_summary *s = hsa_summaries->get (cgraph_node::get_create (decl)); + return s != NULL && s->m_gpu_implementation_p; } #endif /* HSA_H */ diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c index 25d79c6..173707d 100644 --- a/gcc/hsa-gen.c +++ b/gcc/hsa-gen.c @@ -961,9 +961,7 @@ get_symbol_for_decl (tree decl) tree hsa_get_host_function (tree decl) { - hsa_function_summary *s - = hsa_summaries->get_create (cgraph_node::get_create (decl)); - gcc_assert (s->m_kind != HSA_NONE); + hsa_function_summary *s = hsa_summaries->get (cgraph_node::get_create (decl)); gcc_assert (s->m_gpu_implementation_p); return s->m_bound_function ? s->m_bound_function->decl : NULL; @@ -976,9 +974,8 @@ get_brig_function_name (tree decl) { tree d = decl; - hsa_function_summary *s - = hsa_summaries->get_create (cgraph_node::get_create (d)); - if (s->m_kind != HSA_NONE + hsa_function_summary *s = hsa_summaries->get (cgraph_node::get_create (d)); + if (s != NULL && s->m_gpu_implementation_p && s->m_bound_function) d = s->m_bound_function->decl; diff --git a/gcc/ipa-hsa.c b/gcc/ipa-hsa.c index bd19cbb..7c6ceaa 100644 --- a/gcc/ipa-hsa.c +++ b/gcc/ipa-hsa.c @@ -76,13 +76,13 @@ process_hsa_functions (void) FOR_EACH_DEFINED_FUNCTION (node) { - hsa_function_summary *s = hsa_summaries->get_create (node); + hsa_function_summary *s = hsa_summaries->get (node); /* A linked function is skipped. */ - if (s->m_bound_function != NULL) + if (s != NULL && s->m_bound_function != NULL) continue; - if (s->m_kind != HSA_NONE) + if (s != NULL) { if (!check_warn_node_versionable (node)) continue; @@ -130,11 +130,11 @@ process_hsa_functions (void) while (e) { - hsa_function_summary *src = hsa_summaries->get_create (node); - if (src->m_kind != HSA_NONE && src->m_gpu_implementation_p) + hsa_function_summary *src = hsa_summaries->get (node); + if (src != NULL && src->m_gpu_implementation_p) { - hsa_function_summary *dst = hsa_summaries->get_create (e->callee); - if (dst->m_kind != HSA_NONE && !dst->m_gpu_implementation_p) + hsa_function_summary *dst = hsa_summaries->get (e->callee); + if (dst != NULL && !dst->m_gpu_implementation_p) { e->redirect_callee (dst->m_bound_function); if (dump_file) @@ -174,9 +174,9 @@ ipa_hsa_write_summary (void) lsei_next_function_in_partition (&lsei)) { node = lsei_cgraph_node (lsei); - hsa_function_summary *s = hsa_summaries->get_create (node); + hsa_function_summary *s = hsa_summaries->get (node); - if (s->m_kind != HSA_NONE) + if (s != NULL) count++; } @@ -187,9 +187,9 @@ ipa_hsa_write_summary (void) lsei_next_function_in_partition (&lsei)) { node = lsei_cgraph_node (lsei); - hsa_function_summary *s = hsa_summaries->get_create (node); + hsa_function_summary *s = hsa_summaries->get (node); - if (s->m_kind != HSA_NONE) + if (s != NULL) { encoder = ob->decl_state->symtab_node_encoder; int node_ref = lto_symtab_encoder_encode (encoder, node); diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h index 7ba7697..8227abb 100644 --- a/gcc/symbol-summary.h +++ b/gcc/symbol-summary.h @@ -90,8 +90,13 @@ public: does not exist it will be created. */ T* get_create (cgraph_node *node) { - gcc_checking_assert (node->summary_uid); - return get_create (node->summary_uid); + return get (node->summary_uid, true); + } + + /* Getter for summary callgraph node pointer. */ + T* get (cgraph_node *node) + { + return get (node->summary_uid, false); } /* Return number of elements handled by data structure. */ @@ -136,7 +141,7 @@ private: typedef int_hash <int, 0, -1> map_hash; /* Getter for summary callgraph ID. */ - T* get_create (int uid); + T *get (int uid, bool lazy_insert); /* Indicates if insertion hook is enabled. */ bool m_insertion_enabled; @@ -245,30 +250,37 @@ function_summary<T *>::symtab_duplication (cgraph_node *node, cgraph_node *node2, void *data) { function_summary *summary = (function_summary <T *> *) (data); - T **v = summary->m_map.get (node->summary_uid); - - gcc_checking_assert (node2->summary_uid > 0); + T *v = summary->get (node); if (v) { /* This load is necessary, because we insert a new value! */ - T *data = *v; T *duplicate = summary->allocate_new (); summary->m_map.put (node2->summary_uid, duplicate); - summary->duplicate (node, node2, data, duplicate); + summary->duplicate (node, node2, v, duplicate); } } template <typename T> T* -function_summary<T *>::get_create (int uid) +function_summary<T *>::get (int uid, bool lazy_insert) { - bool existed; - T **v = &m_map.get_or_insert (uid, &existed); - if (!existed) - *v = allocate_new (); + gcc_checking_assert (uid > 0); - return *v; + if (lazy_insert) + { + bool existed; + T **v = &m_map.get_or_insert (uid, &existed); + if (!existed) + *v = allocate_new (); + + return *v; + } + else + { + T **v = m_map.get (uid); + return v == NULL ? NULL : *v; + } } template <typename T> |