From 22e1dae4b74199ec476e3efb1b48d9f07b721aac Mon Sep 17 00:00:00 2001 From: Daniel Grund Date: Fri, 30 Sep 2005 10:46:43 +0000 Subject: [PATCH] *** empty log message *** --- ir/be/bearch_firm.c | 2 +- ir/be/bechordal.c | 2 +- ir/be/belistsched.c | 5 ++--- ir/be/bemain.c | 4 ++-- ir/be/besched_t.h | 3 +++ ir/be/bespillilp.c | 42 +++++++++++++++++++++++++++--------------- 6 files changed, 36 insertions(+), 22 deletions(-) diff --git a/ir/be/bearch_firm.c b/ir/be/bearch_firm.c index 2f9eccd97..e024f885a 100644 --- a/ir/be/bearch_firm.c +++ b/ir/be/bearch_firm.c @@ -21,7 +21,7 @@ #include "irreflect.h" -#define N_REGS 8 +#define N_REGS 4 static arch_register_t datab_regs[N_REGS]; diff --git a/ir/be/bechordal.c b/ir/be/bechordal.c index cc9036d88..b7fec1482 100644 --- a/ir/be/bechordal.c +++ b/ir/be/bechordal.c @@ -641,7 +641,7 @@ static void check_pressure_walker(ir_node *bl, void *data) ir_node *irn; irn_live_t *li; -// firm_dbg_set_mask(dbg, -1); + firm_dbg_set_mask(dbg, -1); live_foreach(bl, li) { if(live_is_end(li) && check_pressure_has_class(info, li->irn)) { diff --git a/ir/be/belistsched.c b/ir/be/belistsched.c index 793c9150a..3db352a8e 100644 --- a/ir/be/belistsched.c +++ b/ir/be/belistsched.c @@ -302,7 +302,6 @@ static void list_sched_block(ir_node *block, void *env_ptr) sched_env_t *env = env_ptr; block_sched_env_t be; const list_sched_selector_t *selector = env->selector; - const ir_edge_t *edge; ir_node *irn; int i, n, j, m; @@ -345,14 +344,14 @@ static void list_sched_block(ir_node *block, void *env_ptr) /* Other nodes must have all operands in other blocks to be made * ready */ else { - bool ready = true; + int ready = 1; /* Check, if the operands of a node are not local to this block */ for(j = 0, m = get_irn_arity(irn); j < m; ++j) { ir_node *operand = get_irn_n(irn, j); if(get_nodes_block(operand) == block) { - ready = false; + ready = 0; break; } } diff --git a/ir/be/bemain.c b/ir/be/bemain.c index 58a02efa1..867a1a22b 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -178,8 +178,8 @@ static void be_main_loop(void) DBG((env.dbg, LEVEL_1, "----> Reg class: %s\n", cls->name)); /* spilling */ - //be_spill_ilp(&session, cls); - be_spill_belady(&session, cls); + be_spill_ilp(&session, cls); + //be_spill_belady(&session, cls); #ifdef DUMP_SPILL dump_ir_block_graph_sched(session.irg, "-spill"); #endif diff --git a/ir/be/besched_t.h b/ir/be/besched_t.h index 54f59db3a..9d972ca65 100644 --- a/ir/be/besched_t.h +++ b/ir/be/besched_t.h @@ -56,6 +56,9 @@ static INLINE int to_appear_in_schedule(ir_node *irn) { int i, n; + if(get_irn_opcode(irn) == iro_Start) + return 1; + for(i = 0, n = get_irn_arity(irn); i < n; ++i) { ir_node *op = get_irn_n(irn, i); if(mode_is_datab(get_irn_mode(op))) diff --git a/ir/be/bespillilp.c b/ir/be/bespillilp.c index e526d3ffc..a61ae4a88 100644 --- a/ir/be/bespillilp.c +++ b/ir/be/bespillilp.c @@ -39,10 +39,10 @@ #define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define DBG_LEVEL SET_LEVEL_0 +#define DBG_LEVEL SET_LEVEL_4 #undef DUMP_SOLUTION -#undef DUMP_ILP +#define DUMP_ILP #undef DUMP_STATS #define LPP_SERVER "i44pc52" @@ -181,30 +181,42 @@ static live_range_t *get_live_range(spill_ilp_t *si, ir_node *irn, ir_node *user static ir_node *process_irn(spill_ilp_t *si, pset *live, ir_node *irn, int *demand) { int i, n; - int relevant_args = 0, num_projs = 0; + int relevant_args = 0, results = 0; + + DBG((si->dbg, LEVEL_1, "at %+F\n", irn)); while(is_Proj(irn)) { if(has_reg_class(si, irn)) { assert(pset_find_ptr(live, irn) && "node must be live"); pset_remove_ptr(live, irn); - num_projs++; + results++; } + DBG((si->dbg, LEVEL_1, "skipped proj %+F\n", irn)); irn = sched_prev(irn); } - if(num_projs > 0) + DBG((si->dbg, LEVEL_1, "\tlanded at irn %+F\n", irn)); + + if(results > 0) assert(get_irn_mode(irn) == mode_T && "node before projs must be tuple"); + if(has_reg_class(si, irn)) { + assert( pset_find_ptr(live, irn) && "node must be live"); + pset_remove_ptr(live, irn); + results = 1; + } + for(i = 0, n = get_irn_arity(irn); i < n; ++i) { ir_node *op = get_irn_n(irn, i); - relevant_args += has_reg_class(si, op) && !pset_find_ptr(live, op); + if(has_reg_class(si, op) && !pset_find_ptr(live, op)) { + relevant_args++; + DBG((si->dbg, LEVEL_1, "\trelevant arg %+F\n", op)); + } } - assert(pset_find_ptr(live, irn) && "node must be live"); - pset_remove_ptr(live, irn); - - *demand = MAX(num_projs, relevant_args); + *demand = MAX(results, relevant_args); + DBG((si->dbg, LEVEL_1, "\tdemand: %d\n", *demand)); return irn; } @@ -234,7 +246,7 @@ static void process_block(ir_node *bl, void *data) } } - for(irn = sched_last(bl); !sched_is_begin(irn) && !is_Phi(irn); irn = next_irn) { + for(irn = sched_last(bl); !sched_is_begin(irn) && !is_Phi(irn); irn = sched_prev(irn)) { ir_node *l; int cst; int demand; @@ -253,7 +265,7 @@ static void process_block(ir_node *bl, void *data) n_live = pset_count(live); #endif - next_irn = process_irn(si, live, irn, &demand); + irn = process_irn(si, live, irn, &demand); n_live = pset_count(live); /* @@ -506,7 +518,7 @@ void be_spill_ilp(const be_main_session_env_t *session_env, si.irn_use_heads = new_set(cmp_irn_use_head, 4096); si.live_ranges = new_set(cmp_live_range, 16384); si.senv.spill_ctxs = new_set(be_set_cmp_spillctx, 4096); - si.enable_remat = 1; + si.enable_remat = 0; si.enable_store = 0; firm_dbg_set_mask(si.dbg, DBG_LEVEL); @@ -528,8 +540,8 @@ void be_spill_ilp(const be_main_session_env_t *session_env, #endif DBG((si.dbg, LEVEL_1, "%F\n", session_env->irg)); - lpp_solve_net(si.lpp, LPP_SERVER, LPP_SOLVER); - // lpp_solve_cplex(si.lpp); +// lpp_solve_net(si.lpp, LPP_SERVER, LPP_SOLVER); + lpp_solve_cplex(si.lpp); assert(lpp_is_sol_valid(si.lpp) && "solution of ILP must be valid"); DBG((si.dbg, LEVEL_1, "\tnodes: %d, vars: %d, csts: %d\n", -- 2.20.1