X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbelistsched.h;h=387b6d730e5eb6484394de07af39d3f4cf6c761e;hb=6f068af98daa4725d60e5d23a8f98ec2841cfa44;hp=ac86935f1df109e5ab19469bd1c65642da52917b;hpb=6524f79ab23bdfdce2f8096dad36be93207a4b01;p=libfirm diff --git a/ir/be/belistsched.h b/ir/be/belistsched.h index ac86935f1..387b6d730 100644 --- a/ir/be/belistsched.h +++ b/ir/be/belistsched.h @@ -19,7 +19,7 @@ /** * @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$ @@ -40,17 +40,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,11 +71,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); + ir_node *(*select)(void *block_env, ir_nodeset_t *ready_set); /** * This function gets executed after a node finally has been made ready. @@ -96,28 +94,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. @@ -134,41 +110,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. @@ -178,6 +120,6 @@ extern const list_sched_selector_t normal_selector; * * @param irg The backend irg. */ -void list_sched(ir_graph *irg); +void be_list_sched_graph(ir_graph *irg, const list_sched_selector_t *selector); #endif