X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopyopt.h;h=988df82da3c8b07598e581ad2bbf16af063b1a30;hb=4d7a9507baf1737297cd4f7fc91eab209fd5d398;hp=1cd7cdd89590206c6413ece7cc4ea6410e6661ef;hpb=719b0dc8377fc55decc4629bf5e523104a82b76f;p=libfirm diff --git a/ir/be/becopyopt.h b/ir/be/becopyopt.h index 1cd7cdd89..988df82da 100644 --- a/ir/be/becopyopt.h +++ b/ir/be/becopyopt.h @@ -13,19 +13,18 @@ #ifndef _BECOPYOPT_H #define _BECOPYOPT_H -#include "irnode.h" +#include "firm_types.h" #include "bechordal.h" - -typedef int(*cost_fct_t)(ir_node*, ir_node*, int); - -typedef struct _copy_opt_t copy_opt_t; - /** * Has to be called during the firm init phase */ void be_copy_opt_init(void); +typedef int(*cost_fct_t)(ir_node*, ir_node*, int); + +typedef struct _copy_opt_t copy_opt_t; + /** * Generate the problem. Collect all information and optimizable nodes. */ @@ -36,6 +35,18 @@ copy_opt_t *new_copy_opt(be_chordal_env_t *chordal_env, cost_fct_t get_costs); */ void free_copy_opt(copy_opt_t *co); +/** + * Checks if a node is optimizable, viz. has something to do with coalescing + * @param arch The architecture environment + * @param irn The irn to check + */ +int co_is_optimizable_root(const copy_opt_t *co, ir_node *irn); + +/** + * Checks if the irn is a non-interfering argument of a node which 'is_optimizable' + */ +int co_is_optimizable_arg(const copy_opt_t *co, ir_node *irn); + /** * Computes the costs of a copy according to loop depth * @param pos: the argument position of arg in the root arguments @@ -49,11 +60,66 @@ int co_get_costs_loop_depth(ir_node *root, ir_node* arg, int pos); */ int co_get_costs_all_one(ir_node *root, ir_node* arg, int pos); + + + +/** + * Build internal optimization units structure + */ +void co_build_ou_structure(copy_opt_t *co); + +/** + * Frees the space used by the opt unit representation. + * Does NOT free the whole copyopt structure + */ +void co_free_ou_structure(copy_opt_t *co); + /** * Solves the problem using a heuristic approach */ int co_solve_heuristic(copy_opt_t *co); +/** + * Returns the maximal costs possible, i.e. the costs if all + * pairs would be assigned different registers. + */ +int co_get_max_copy_costs(const copy_opt_t *co); + +/** + * Returns the inevitable costs, i.e. the costs of + * all copy pairs which interfere. + */ +int co_get_inevit_copy_costs(const copy_opt_t *co); + +/** + * Returns the current costs the copies are causing. + * The result includes inevitable costs and the costs + * of the copies regarding the current register allocation + */ +int co_get_copy_costs(const copy_opt_t *co); + +/** + * Returns a lower bound for the costs of copies in this ou. + * The result includes inevitable costs and the costs of a + * minimal costs caused by the nodes of the ou. + */ +int co_get_lower_bound(const copy_opt_t *co); + + + + + +/** + * Constructs another internal representation of the affinity edges + */ +void co_build_graph_structure(copy_opt_t *co); + +/** + * Frees the space used by the graph representation. + * Does NOT free the whole copyopt structure + */ +void co_free_graph_structure(copy_opt_t *co); + /** * Solves the problem using mixed integer programming * @returns 1 iff solution state was optimal @@ -67,8 +133,9 @@ int co_solve_ilp1(copy_opt_t *co, double time_limit); int co_solve_ilp2(copy_opt_t *co, double time_limit); /** - * Compares different solutions of the same problem + * Checks if a node is optimizable, viz. has somthing to do with coalescing. + * Uses the graph representation */ -void co_compare_solvers(be_chordal_env_t *chordal_env); +int co_gs_is_optimizable(copy_opt_t *co, ir_node *irn); -#endif +#endif /* _BECOPYOPT_H */