X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbelistsched.h;h=3af7e370f307a98569eced3a31c986d90fb0df87;hb=30369d28b8fabe4f66cee12f42ee475d9444cf9e;hp=8b19545a5b16b717afc0c13fb63ddcc50be9cbb2;hpb=65a52a96e8ab7ed601d7f98c516d37c46b674b4a;p=libfirm diff --git a/ir/be/belistsched.h b/ir/be/belistsched.h index 8b19545a5..3af7e370f 100644 --- a/ir/be/belistsched.h +++ b/ir/be/belistsched.h @@ -19,10 +19,9 @@ /** * @file - * @brief Primitive list scheduling with different node selectors. + * @brief Common functions for creating listscheduling algorithms * @author Sebastian Hack * @date 20.10.2004 - * @version $Id$ */ #ifndef FIRM_BE_BELISTSCHED_H #define FIRM_BE_BELISTSCHED_H @@ -40,17 +39,17 @@ * You can implement your own list scheduler by implementing these * functions. */ -struct _list_sched_selector_t { +typedef struct list_sched_selector_t { /** * Called before a graph is being scheduled. * May be NULL. * - * @param vtab The selector vtab. * @param irg The backend graph. - * @return The environment pointer that is passed to all other functions in this struct. + * @return The environment pointer that is passed to all other + * functions in this struct. */ - void *(*init_graph)(const list_sched_selector_t *vtab, ir_graph *irg); + void *(*init_graph)(ir_graph *irg); /** * Called before scheduling starts on a block. @@ -71,21 +70,9 @@ struct _list_sched_selector_t { * @param block_env Some private information as returned by init_block(). * @param sched_head The schedule so far. * @param ready_set A set containing all ready nodes. Pick one of these nodes. - * @param live_set A set containing all nodes currently alive. * @return The chosen node. */ - ir_node *(*select)(void *block_env, ir_nodeset_t *ready_set, - ir_nodeset_t *live_set); - - /** - * This function decides, if a node should appear in a schedule. - * May be NULL. - * - * @param block_env The block environment. - * @param irn The node. - * @return 1, if the node should be scheduled, 0 if not. - */ - int (*to_appear_in_schedule)(void *block_env, const ir_node *irn); + ir_node *(*select)(void *block_env, ir_nodeset_t *ready_set); /** * This function gets executed after a node finally has been made ready. @@ -106,28 +93,6 @@ struct _list_sched_selector_t { */ void (*node_selected)(void *block_env, ir_node *irn); - /** - * Returns the execution time of node irn. - * May be NULL. - * - * @param block_env The block environment. - * @param irn The selected node. - */ - unsigned (*exectime)(void *block_env, const ir_node *irn); - - /** - * Calculates the latency of executing cycle curr_cycle of node curr in cycle pred_cycle - * of node pred. - * May be NULL. - * - * @param block_env The block environment. - * @param pred The previous node. - * @param pred_cycle The previous node execution cycle. - * @param curr The current node. - * @param curr_cycle The current node execution cycle. - */ - unsigned (*latency)(void *block_env, const ir_node *pred, int pred_cycle, const ir_node *curr, int curr_cycle); - /** * Called after a block has been scheduled. * May be NULL. @@ -144,41 +109,7 @@ struct _list_sched_selector_t { * @param env The environment. */ void (*finish_graph)(void *env); -}; - - -/** - * A trivial selector, that just selects the first ready node. - */ -extern const list_sched_selector_t trivial_selector; - -/** - * A trivial selector that selects a pseudo-random-node (deterministic). - */ -extern const list_sched_selector_t random_selector; - -/** - * A selector that tries to minimize the register pressure. - * @note Not really operational yet. - */ -extern const list_sched_selector_t reg_pressure_selector; - -/** - * A selector based on trace scheduling as introduced by Muchnik[TM] - */ -extern const list_sched_selector_t muchnik_selector; - -/** - * A selector based on trace scheduling as introduced by Muchnik[TM] - * but using the Mueller heuristic selector. - */ -extern const list_sched_selector_t heuristic_selector; - -/** - * A selector based on the strong normal form theorem (ie minimizing - * the register pressure). - */ -extern const list_sched_selector_t normal_selector; +} list_sched_selector_t; /** * List schedule a graph. @@ -188,12 +119,6 @@ extern const list_sched_selector_t normal_selector; * * @param irg The backend irg. */ -void list_sched(ir_graph *irg); - -/** - * List schedule a block. - * Same as list_sched but only for a certain block (needed for ILP fallback). - */ -void list_sched_single_block(ir_graph *irg, ir_node *block); +void be_list_sched_graph(ir_graph *irg, const list_sched_selector_t *selector); #endif