aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraph.h
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2008-07-07 21:06:28 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2008-07-07 21:06:28 +0200
commit9088c1cc654a768bf3481519372ac3b0853feb4d (patch)
tree61b998ffc2d6713cc2e2c2ee4e3b71ae3e4fafdc /gcc/cgraph.h
parentc71618c614e98cc61b87bc3a9f8aabd04b008ec2 (diff)
downloadgcc-9088c1cc654a768bf3481519372ac3b0853feb4d.zip
gcc-9088c1cc654a768bf3481519372ac3b0853feb4d.tar.gz
gcc-9088c1cc654a768bf3481519372ac3b0853feb4d.tar.bz2
cgraph.c (cgraph_edge_max_uid): New variable.
2008-07-07 Martin Jambor <mjambor@suse.cz> * cgraph.c (cgraph_edge_max_uid): New variable. (struct cgraph_edge_hook_list): New type. (struct cgraph_node_hook_list): New type. (struct cgraph_2edge_hook_list): New type. (struct cgraph_2node_hook_list): New type. (first_cgraph_edge_removal_hook): New variable. (first_cgraph_node_removal_hook): New variable. (first_cgraph_edge_duplicated_hook): New variable. (first_cgraph_node_duplicated_hook): New variable. (cgraph_add_edge_removal_hook): New function. (cgraph_remove_edge_removal_hook): New function. (cgraph_call_edge_removal_hooks): New function. (cgraph_add_node_removal_hook): New function. (cgraph_remove_node_removal_hook): New function. (cgraph_call_node_removal_hooks): New function. (cgraph_add_edge_duplication_hook): New function. (cgraph_remove_edge_duplication_hook): New function. (cgraph_call_edge_duplication_hooks): New function. (cgraph_add_node_duplication_hook): New function. (cgraph_remove_node_duplication_hook): New function. (cgraph_call_node_duplication_hooks): New function. (cgraph_create_edge): Assign to edge uid. (cgraph_remove_edge): Call edge removal hooks. (cgraph_node_remove_callees): Call edge removal hooks. (cgraph_node_remove_callers): Call edge removal hooks. (cgraph_remove_node): Call node removal hooks. (cgraph_clone_edge): Call edge duplication hooks. (cgraph_clone_node): Call node duplication hooks. * cgraph.h (cgraph_edge): New field uid. (cgraph_edge_hook): New type. (cgraph_node_hook): New type. (cgraph_2edge_hook): New type. (cgraph_2node_hook): New type. From-SVN: r137591
Diffstat (limited to 'gcc/cgraph.h')
-rw-r--r--gcc/cgraph.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index dda2a18..ee79c92 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -209,6 +209,8 @@ struct cgraph_edge GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_call
int frequency;
/* Depth of loop nest, 1 means no loop nest. */
int loop_nest;
+ /* Unique id of the edge. */
+ int uid;
};
#define CGRAPH_FREQ_BASE 1000
@@ -266,6 +268,7 @@ struct cgraph_asm_node GTY(())
extern GTY(()) struct cgraph_node *cgraph_nodes;
extern GTY(()) int cgraph_n_nodes;
extern GTY(()) int cgraph_max_uid;
+extern GTY(()) int cgraph_edge_max_uid;
extern GTY(()) int cgraph_max_pid;
extern bool cgraph_global_info_ready;
enum cgraph_state
@@ -351,6 +354,26 @@ struct cgraph_node *save_inline_function_body (struct cgraph_node *);
void record_references_in_initializer (tree);
bool cgraph_process_new_functions (void);
+typedef void (*cgraph_edge_hook)(struct cgraph_edge *, void *);
+typedef void (*cgraph_node_hook)(struct cgraph_node *, void *);
+typedef void (*cgraph_2edge_hook)(struct cgraph_edge *, struct cgraph_edge *,
+ void *);
+typedef void (*cgraph_2node_hook)(struct cgraph_node *, struct cgraph_node *,
+ void *);
+struct cgraph_edge_hook_list;
+struct cgraph_node_hook_list;
+struct cgraph_2edge_hook_list;
+struct cgraph_2node_hook_list;
+struct cgraph_edge_hook_list *cgraph_add_edge_removal_hook (cgraph_edge_hook, void *);
+void cgraph_remove_edge_removal_hook (struct cgraph_edge_hook_list *);
+struct cgraph_node_hook_list *cgraph_add_node_removal_hook (cgraph_node_hook,
+ void *);
+void cgraph_remove_node_removal_hook (struct cgraph_node_hook_list *);
+struct cgraph_2edge_hook_list *cgraph_add_edge_duplication_hook (cgraph_2edge_hook, void *);
+void cgraph_remove_edge_duplication_hook (struct cgraph_2edge_hook_list *);
+struct cgraph_2node_hook_list *cgraph_add_node_duplication_hook (cgraph_2node_hook, void *);
+void cgraph_remove_node_duplication_hook (struct cgraph_2node_hook_list *);
+
/* In cgraphbuild.c */
unsigned int rebuild_cgraph_edges (void);