21#ifndef GCC_SYMBOL_SUMMARY_H
22#define GCC_SYMBOL_SUMMARY_H
191 template<
typename Arg,
bool (*f)(const T &, Arg)>
194 m_map.template traverse <f> (
a);
212 T **v =
m_map.get (node->get_uid ());
282 typedef typename hash_map <map_hash, T *>::iterator map_iterator;
283 for (map_iterator it =
m_map.begin (); it !=
m_map.end (); ++it)
293 summary->insert (node, summary->get_create (node));
302 summary->remove (node);
311 T *v = summary->get (node);
314 summary->duplicate (node, node2, v, summary->get_create (node2));
341template<
typename T,
typename U>
356template <
class T,
class V>
366template <
class T,
class V>
379 template<
typename Arg,
bool (*f)(const T &, Arg)>
393 id = this->
m_symtab->assign_summary_id (node);
395 if ((
unsigned int)
id >=
m_vector->length ())
397 this->
m_symtab->cgraph_max_summary_id);
408 return exists (node) ? (*m_vector)[node->get_summary_id ()] :
NULL;
427 && (
unsigned int)id < m_vector->length ()
442 bool is_ggc ()
final override;
453template <typename
T, typename V>
465template <
typename T,
typename V>
477template <
typename T,
typename V>
483 summary->insert (node, summary->get_create (node));
486template <
typename T,
typename V>
493 if (summary->exists (node))
494 summary->remove (node);
497template <
typename T,
typename V>
504 T *v = summary->get (node);
509 summary->duplicate (node, node2, v,
duplicate);
513template <
typename T,
typename V>
690 template<
typename Arg,
bool (*f)(const T &, Arg)>
693 m_map.template traverse <f> (
a);
701 T **v = &
m_map.get_or_insert (
edge->get_uid (), &existed);
719 int uid =
edge->get_uid ();
757 template <
typename U>
friend void gt_ggc_mx (call_summary <U *> *
const &);
758 template <
typename U>
friend void gt_pch_nx (call_summary <U *> *
const &);
759 template <
typename U>
friend void gt_pch_nx (call_summary <U *> *
const &,
769 typedef typename hash_map <map_hash, T *>::iterator map_iterator;
770 for (map_iterator it =
m_map.begin (); it !=
m_map.end (); ++it)
779 summary->remove (
edge);
788 T *edge1_summary =
NULL;
790 if (summary->m_initialize_when_cloning)
791 edge1_summary = summary->get_create (edge1);
793 edge1_summary = summary->get (edge1);
796 summary->duplicate (edge1, edge2, edge1_summary,
797 summary->get_create (edge2));
825template <
class T,
class V>
835template <
class T,
class V>
853 template<
typename Arg,
bool (*f)(const T &, Arg)>
865 int id =
edge->get_summary_id ();
869 if ((
unsigned)
id >=
m_vector->length ())
890 int id =
edge->get_summary_id ();
899 int id =
edge->get_summary_id ();
901 && (
unsigned)id < m_vector->length ()
913 bool is_ggc ()
final override;
924template <typename
T, typename V>
936template <
typename T,
typename V>
941 summary->remove (
edge);
944template <
typename T,
typename V>
950 T *edge1_summary =
NULL;
952 if (summary->m_initialize_when_cloning)
953 edge1_summary = summary->get_create (edge1);
955 edge1_summary = summary->get (edge1);
960 summary->duplicate (edge1, edge2, edge1_summary,
duplicate);
964template <
typename T,
typename V>
987 void *cookie ATTRIBUTE_UNUSED)
1006template <
typename T>
symbol_table * symtab
Definition cgraph.cc:81
void(* cgraph_edge_hook)(cgraph_edge *, void *)
Definition cgraph.h:2166
void(* cgraph_node_hook)(cgraph_node *, void *)
Definition cgraph.h:2167
void(* cgraph_2node_hook)(cgraph_node *, cgraph_node *, void *)
Definition cgraph.h:2170
void(* cgraph_2edge_hook)(cgraph_edge *, cgraph_edge *, void *)
Definition cgraph.h:2169
call_summary(symbol_table *symtab, bool ggc=false CXX_MEM_STAT_INFO)
Definition symbol-summary.h:679
hash_map< map_hash, T * > m_map
Definition symbol-summary.h:755
T * get(cgraph_edge *edge) ATTRIBUTE_PURE
Definition symbol-summary.h:709
bool m_ggc
Definition symbol-summary.h:743
static void symtab_removal(cgraph_edge *edge, void *data)
Definition symbol-summary.h:776
friend void gt_pch_nx(call_summary< U * > *const &)
int_hash< int, 0, -1 > map_hash
Definition symbol-summary.h:752
friend void gt_pch_nx(call_summary< U * > *const &, gt_pointer_operator, void *)
bool is_ggc() final override
Definition symbol-summary.h:747
static void symtab_duplication(cgraph_edge *edge1, cgraph_edge *edge2, void *data)
Definition symbol-summary.h:784
bool exists(cgraph_edge *edge)
Definition symbol-summary.h:729
T * get_create(cgraph_edge *edge)
Definition symbol-summary.h:698
void traverse(Arg a) const
Definition symbol-summary.h:691
friend void gt_ggc_mx(call_summary< U * > *const &)
void remove(cgraph_edge *edge)
Definition symbol-summary.h:717
Definition symbol-summary.h:566
cgraph_2edge_hook m_symtab_duplication
Definition symbol-summary.h:637
T * allocate_new()
Definition symbol-summary.h:611
virtual void remove(cgraph_edge *, T *)
Definition symbol-summary.h:582
object_allocator< T > m_allocator
Definition symbol-summary.h:651
bool m_initialize_when_cloning
Definition symbol-summary.h:644
cgraph_edge_hook m_symtab_removal
Definition symbol-summary.h:635
symbol_table * m_symtab
Definition symbol-summary.h:632
cgraph_edge_hook_list * m_symtab_removal_hook
Definition symbol-summary.h:640
void unregister_hooks()
Definition symbol-summary.h:656
void enable_duplication_hook()
Definition symbol-summary.h:591
virtual void duplicate(cgraph_edge *, cgraph_edge *, T *, T *)
Definition symbol-summary.h:585
cgraph_2edge_hook_list * m_symtab_duplication_hook
Definition symbol-summary.h:642
call_summary_base(symbol_table *symtab, cgraph_edge_hook symtab_removal, cgraph_2edge_hook symtab_duplication CXX_MEM_STAT_INFO)
Definition symbol-summary.h:569
void release(T *item)
Definition symbol-summary.h:620
void disable_duplication_hook()
Definition symbol-summary.h:600
Definition symbol-summary.h:667
Definition genoutput.cc:150
static void symtab_removal(cgraph_edge *edge, void *data)
Definition symbol-summary.h:938
T * get(cgraph_edge *edge) ATTRIBUTE_PURE
Definition symbol-summary.h:879
void remove(cgraph_edge *edge)
Definition symbol-summary.h:886
static void symtab_duplication(cgraph_edge *edge1, cgraph_edge *edge2, void *data)
Definition symbol-summary.h:946
void traverse(Arg a) const
Definition symbol-summary.h:854
T * get_create(cgraph_edge *edge)
Definition symbol-summary.h:863
friend void gt_ggc_mx(fast_call_summary< U *, va_gc > *const &)
bool exists(cgraph_edge *edge)
Definition symbol-summary.h:897
fast_call_summary(symbol_table *symtab CXX_MEM_STAT_INFO)
Definition symbol-summary.h:840
vec< T *, V > * m_vector
Definition symbol-summary.h:916
friend void gt_pch_nx(fast_call_summary< U *, va_gc > *const &)
Definition symbol-summary.h:827
void remove(cgraph_node *node)
Definition symbol-summary.h:412
friend void gt_ggc_mx(fast_function_summary< U *, va_gc > *const &)
static void symtab_insertion(cgraph_node *node, void *data)
Definition symbol-summary.h:479
vec< T *, V > * m_vector
Definition symbol-summary.h:445
T * get(cgraph_node *node) ATTRIBUTE_PURE
Definition symbol-summary.h:406
void traverse(Arg a) const
Definition symbol-summary.h:380
fast_function_summary(symbol_table *symtab CXX_MEM_STAT_INFO)
Definition symbol-summary.h:454
T * get_create(cgraph_node *node)
Definition symbol-summary.h:389
friend void gt_pch_nx(fast_function_summary< U *, va_gc > *const &)
bool exists(cgraph_node *node)
Definition symbol-summary.h:423
static void symtab_duplication(cgraph_node *node, cgraph_node *node2, void *data)
Definition symbol-summary.h:499
static void symtab_removal(cgraph_node *node, void *data)
Definition symbol-summary.h:488
Definition symbol-summary.h:358
friend void gt_pch_nx(function_summary< U * > *const &)
function_summary(symbol_table *symtab, bool ggc=false CXX_MEM_STAT_INFO)
Definition symbol-summary.h:268
void traverse(Arg a) const
Definition symbol-summary.h:192
hash_map< map_hash, T * > m_map
Definition symbol-summary.h:259
static void symtab_removal(cgraph_node *node, void *data)
Definition symbol-summary.h:298
bool is_ggc() final override
Definition symbol-summary.h:251
static void symtab_insertion(cgraph_node *node, void *data)
Definition symbol-summary.h:289
void remove(cgraph_node *node)
Definition symbol-summary.h:218
static void symtab_duplication(cgraph_node *node, cgraph_node *node2, void *data)
Definition symbol-summary.h:307
T * get(cgraph_node *node) ATTRIBUTE_PURE
Definition symbol-summary.h:210
int_hash< int, 0, -1 > map_hash
Definition symbol-summary.h:256
bool m_ggc
Definition symbol-summary.h:247
friend void gt_ggc_mx(function_summary< U * > *const &)
friend void gt_pch_nx(function_summary< U * > *const &, gt_pointer_operator, void *)
T * get_create(cgraph_node *node)
Definition symbol-summary.h:199
bool exists(cgraph_node *node)
Definition symbol-summary.h:230
Definition symbol-summary.h:28
virtual void remove(cgraph_node *, T *)
Definition symbol-summary.h:57
cgraph_node_hook_list * m_symtab_removal_hook
Definition symbol-summary.h:137
virtual void insert(cgraph_node *, T *)
Definition symbol-summary.h:49
cgraph_2node_hook m_symtab_duplication
Definition symbol-summary.h:132
void disable_duplication_hook()
Definition symbol-summary.h:93
void disable_insertion_hook()
Definition symbol-summary.h:75
cgraph_node_hook_list * m_symtab_insertion_hook
Definition symbol-summary.h:135
symbol_table * m_symtab
Definition symbol-summary.h:125
T * allocate_new()
Definition symbol-summary.h:104
cgraph_node_hook m_symtab_insertion
Definition symbol-summary.h:128
cgraph_2node_hook_list * m_symtab_duplication_hook
Definition symbol-summary.h:139
void enable_insertion_hook()
Definition symbol-summary.h:67
void unregister_hooks()
Definition symbol-summary.h:151
cgraph_node_hook m_symtab_removal
Definition symbol-summary.h:130
virtual void duplicate(cgraph_node *, cgraph_node *, T *, T *)
Definition symbol-summary.h:60
function_summary_base(symbol_table *symtab, cgraph_node_hook symtab_insertion, cgraph_node_hook symtab_removal, cgraph_2node_hook symtab_duplication CXX_MEM_STAT_INFO)
Definition symbol-summary.h:31
void enable_duplication_hook()
Definition symbol-summary.h:85
void release(T *item)
Definition symbol-summary.h:113
object_allocator< T > m_allocator
Definition symbol-summary.h:146
Definition symbol-summary.h:163
Definition alloc-pool.h:482
class edge_def * edge
Definition coretypes.h:352
#define GTY(x)
Definition coretypes.h:41
void(* gt_pointer_operator)(void *, void *, void *)
Definition coretypes.h:473
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2008
static void function_summary(const coverage_info *)
Definition gcov.cc:2763
static struct token T
Definition gengtype-parse.cc:45
void * ggc_internal_alloc(size_t size, void(*f)(void *), size_t, size_t MEM_STAT_DECL)
Definition ggc-none.cc:44
#define ggc_test_and_set_mark(EXPR)
Definition ggc.h:81
void ggc_delete(T *ptr)
Definition ggc.h:255
i
Definition poly-int.h:776
Ca & a
Definition poly-int.h:770
#define PASS_MEM_STAT
Definition statistics.h:54
#define MEM_STAT_DECL
Definition statistics.h:52
#define CXX_MEM_STAT_INFO
Definition statistics.h:58
int get_summary_id()
Definition cgraph.h:1315
Definition collect2.cc:168
Definition hash-traits.h:122
static const bool value
Definition symbol-summary.h:350
Definition symbol-summary.h:343
static const bool value
Definition symbol-summary.h:344
int get_uid()
Definition cgraph.h:494
void gt_pch_nx(function_summary< T * > *const &)
Definition symbol-summary.h:327
void gt_ggc_mx(function_summary< T * > *const &summary)
Definition symbol-summary.h:319
#define NULL
Definition system.h:50
#define gcc_unreachable()
Definition system.h:841
#define true
Definition system.h:887
#define false
Definition system.h:888
#define gcc_checking_assert(EXPR)
Definition system.h:821
void vec_safe_grow_cleared(vec< T, A, vl_embed > *&v, unsigned len, bool exact=false CXX_MEM_STAT_INFO)
Definition vec.h:768
void vec_alloc(vec< T, A, vl_embed > *&v, unsigned nelems CXX_MEM_STAT_INFO)
Definition vec.h:735
void vec_free(vec< T, A, vl_embed > *&v)
Definition vec.h:746