summaryrefslogtreecommitdiff
path: root/gcc/cfghooks.h
diff options
context:
space:
mode:
authorMostafa Hagog <mustafa@il.ibm.com>2005-04-03 08:44:33 +0000
committerMostafa Hagog <hagog@gcc.gnu.org>2005-04-03 08:44:33 +0000
commit1cb7dfc3b3c1506c0fc3cef33b8571f2eefd549c (patch)
tree0b472172f6a31148aad4e01247e8d9a83810ecd0 /gcc/cfghooks.h
parent2be74e4108a753c5b5117e4de6b6bbe2c8f01b36 (diff)
cfghooks.c (lv_flush_pending_stmts, [...]): New.
2005-03-30 Mostafa Hagog <mustafa@il.ibm.com> * cfghooks.c (lv_flush_pending_stmts, cfg_hook_duplicate_loop_to_header_edge, extract_cond_bb_edges, lv_adjust_loop_header_phi, lv_add_condition_to_bb): New. * cfghooks.h (cfg_hook_duplicate_loop_to_header_edge, lv_add_condition_to_bb, lv_adjust_loop_header_phi, extract_cond_bb_edges, flush_pending_stmts): New in cfg_hooks structure. (cfg_hook_duplicate_loop_to_header_edge, lv_flush_pending_stmts, extract_cond_bb_edges, lv_adjust_loop_header_phi, lv_add_condition_to_bb): New declarations. * cfgloop.h (duplicate_loop_to_header_edge): Change return type to bool. (loop_version): Declare. * cfgloopmanip.c (cfghooks.h): Include. (duplicate_loop_to_header_edge): Change return type to bool. (loop_version, lv_adjust_loop_entry_edge): Move here. * cfgrtl.c (cfgloop.h): Include. (rtl_verify_flow_info_1): Fix. (rtl_lv_add_condition_to_bb, rtl_extract_cond_bb_edges): New. (rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Add hooks to initialization. * tree-cfg.c (tree_lv_adjust_loop_header_phi, tree_lv_add_condition_to_bb): New. (tree_cfg_hooks): Add new hooks to initialization. * tree-ssa-loop-manip.c (lv_adjust_loop_header_phi, lv_adjust_loop_entry_edge, tree_ssa_loop_version): Remove. From-SVN: r97481
Diffstat (limited to 'gcc/cfghooks.h')
-rw-r--r--gcc/cfghooks.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/gcc/cfghooks.h b/gcc/cfghooks.h
index 92a458ed4aa..a05a0154c92 100644
--- a/gcc/cfghooks.h
+++ b/gcc/cfghooks.h
@@ -108,6 +108,33 @@ struct cfg_hooks
/* This function is called immediately before edge E is removed from
the edge vector E->dest->preds. */
void (*execute_on_shrinking_pred) (edge);
+
+ /* A hook for duplicating loop in CFG, currently this is used
+ in loop versioning. */
+ bool (*cfg_hook_duplicate_loop_to_header_edge) (struct loop *loop, edge e,
+ struct loops *loops,
+ unsigned int ndupl,
+ sbitmap wont_exit,
+ edge orig, edge *to_remove,
+ unsigned int *n_to_remove,
+ int flags);
+
+ /* Add conition to new basic block and update CFG used in loop
+ versioning. */
+ void (*lv_add_condition_to_bb) (basic_block, basic_block, basic_block,
+ void *);
+ /* Update the PHI nodes in case of loop versioning. */
+ void (*lv_adjust_loop_header_phi) (basic_block, basic_block,
+ basic_block, edge);
+
+ /* Given a condition BB extract the true/false taken/not taken edges
+ (depending if we are on tree's or RTL). */
+ void (*extract_cond_bb_edges) (basic_block, edge *, edge *);
+
+
+ /* Add PHI arguments queued in PENDINT_STMT list on edge E to edge
+ E->dest (only in tree-ssa loop versioning. */
+ void (*flush_pending_stmts) (edge);
};
extern void verify_flow_info (void);
@@ -136,6 +163,20 @@ extern bool block_ends_with_condjump_p (basic_block bb);
extern int flow_call_edges_add (sbitmap);
extern void execute_on_growing_pred (edge);
extern void execute_on_shrinking_pred (edge);
+extern bool cfg_hook_duplicate_loop_to_header_edge (struct loop *loop, edge,
+ struct loops *loops,
+ unsigned int ndupl,
+ sbitmap wont_exit,
+ edge orig, edge *to_remove,
+ unsigned int *n_to_remove,
+ int flags);
+
+extern void lv_flush_pending_stmts (edge);
+extern void extract_cond_bb_edges (basic_block, edge *, edge*);
+extern void lv_adjust_loop_header_phi (basic_block, basic_block, basic_block,
+ edge);
+extern void lv_add_condition_to_bb (basic_block, basic_block, basic_block,
+ void *);
/* Hooks containers. */
extern struct cfg_hooks tree_cfg_hooks;