projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fehler109
[libfirm]
/
ir
/
be
/
bespillbelady.c
diff --git
a/ir/be/bespillbelady.c
b/ir/be/bespillbelady.c
index
948278f
..
a5d431b
100644
(file)
--- a/
ir/be/bespillbelady.c
+++ b/
ir/be/bespillbelady.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (C) 1995-200
7
University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-200
8
University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*
* This file is part of libFirm.
*
@@
-322,13
+322,13
@@
static void displace(workset_t *new_vals, int is_usage)
ir_nodeset_insert(&used, val);
if (! workset_contains(ws, val)) {
ir_nodeset_insert(&used, val);
if (! workset_contains(ws, val)) {
- DB
G
((dbg, DBG_DECIDE, " insert %+F\n", val));
+ DB((dbg, DBG_DECIDE, " insert %+F\n", val));
if (is_usage) {
if (is_usage) {
- DB
G
((dbg, DBG_SPILL, "Reload %+F before %+F\n", val, instr));
+ DB((dbg, DBG_SPILL, "Reload %+F before %+F\n", val, instr));
be_add_reload(senv, val, instr, cls, 1);
}
} else {
be_add_reload(senv, val, instr, cls, 1);
}
} else {
- DB
G
((dbg, DBG_DECIDE, " %+F already in workset\n", val));
+ DB((dbg, DBG_DECIDE, " %+F already in workset\n", val));
assert(is_usage);
/* remove the value from the current workset so it is not accidently
* spilled */
assert(is_usage);
/* remove the value from the current workset so it is not accidently
* spilled */
@@
-347,7
+347,7
@@
static void displace(workset_t *new_vals, int is_usage)
ir_node *curr_bb = get_nodes_block(instr);
workset_t *ws_start = get_block_info(curr_bb)->start_workset;
ir_node *curr_bb = get_nodes_block(instr);
workset_t *ws_start = get_block_info(curr_bb)->start_workset;
- DB
G
((dbg, DBG_DECIDE, " disposing %d values\n", spills_needed));
+ DB((dbg, DBG_DECIDE, " disposing %d values\n", spills_needed));
/* calculate current next-use distance for live values */
for (i = 0; i < len; ++i) {
/* calculate current next-use distance for live values */
for (i = 0; i < len; ++i) {
@@
-365,7
+365,7
@@
static void displace(workset_t *new_vals, int is_usage)
for (i = len - spills_needed; i < len; ++i) {
ir_node *val = ws->vals[i].node;
for (i = len - spills_needed; i < len; ++i) {
ir_node *val = ws->vals[i].node;
- DB
G
((dbg, DBG_DECIDE, " disposing node %+F (%u)\n", val,
+ DB((dbg, DBG_DECIDE, " disposing node %+F (%u)\n", val,
workset_get_time(ws, i)));
if(!USES_IS_INFINITE(ws->vals[i].time)
workset_get_time(ws, i)));
if(!USES_IS_INFINITE(ws->vals[i].time)
@@
-373,9
+373,9
@@
static void displace(workset_t *new_vals, int is_usage)
//be_add_spill(senv, val, instr);
}
//be_add_spill(senv, val, instr);
}
- if (! ir_nodeset_contains(&used, val)) {
+ if (!
is_Phi(val) && !
ir_nodeset_contains(&used, val)) {
workset_remove(ws_start, val);
workset_remove(ws_start, val);
- DB
G
((dbg, DBG_DECIDE, " (and removing %+F from start workset)\n", val));
+ DB((dbg, DBG_DECIDE, " (and removing %+F from start workset)\n", val));
}
}
}
}
@@
-417,7
+417,7
@@
static loc_t to_take_or_not_to_take(ir_node* first, ir_node *node,
/* We have to keep nonspillable nodes in the workingset */
if(arch_irn_get_flags(arch_env, node) & arch_irn_flags_dont_spill) {
loc.time = 0;
/* We have to keep nonspillable nodes in the workingset */
if(arch_irn_get_flags(arch_env, node) & arch_irn_flags_dont_spill) {
loc.time = 0;
- DB
G
((dbg, DBG_START, " %+F taken (dontspill node)\n", node, loc.time));
+ DB((dbg, DBG_START, " %+F taken (dontspill node)\n", node, loc.time));
return loc;
}
return loc;
}
@@
-426,7
+426,7
@@
static loc_t to_take_or_not_to_take(ir_node* first, ir_node *node,
// the nodes marked as live in shouldn't be dead, so it must be a phi
assert(is_Phi(node));
loc.time = USES_INFINITY;
// the nodes marked as live in shouldn't be dead, so it must be a phi
assert(is_Phi(node));
loc.time = USES_INFINITY;
- DB
G
((dbg, DBG_START, " %+F not taken (dead)\n", node));
+ DB((dbg, DBG_START, " %+F not taken (dead)\n", node));
if(is_Phi(node)) {
be_spill_phi(senv, node);
}
if(is_Phi(node)) {
be_spill_phi(senv, node);
}
@@
-436,10
+436,10
@@
static loc_t to_take_or_not_to_take(ir_node* first, ir_node *node,
loc.time = next_use.time;
if(next_use.outermost_loop >= get_loop_depth(loop)) {
loc.time = next_use.time;
if(next_use.outermost_loop >= get_loop_depth(loop)) {
- DB
G
((dbg, DBG_START, " %+F taken (%u, loop %d)\n", node, loc.time, next_use.outermost_loop));
+ DB((dbg, DBG_START, " %+F taken (%u, loop %d)\n", node, loc.time, next_use.outermost_loop));
} else {
loc.time = USES_PENDING;
} else {
loc.time = USES_PENDING;
- DB
G
((dbg, DBG_START, " %+F delayed (outerloopdepth %d < loopdetph %d)\n", node, next_use.outermost_loop, get_loop_depth(loop)));
+ DB((dbg, DBG_START, " %+F delayed (outerloopdepth %d < loopdetph %d)\n", node, next_use.outermost_loop, get_loop_depth(loop)));
}
return loc;
}
}
return loc;
}
@@
-469,7
+469,7
@@
static void compute_live_ins(const ir_node *block)
starters = NEW_ARR_F(loc_t, 0);
delayed = NEW_ARR_F(loc_t, 0);
starters = NEW_ARR_F(loc_t, 0);
delayed = NEW_ARR_F(loc_t, 0);
- DB
G
((dbg, DBG_START, "Living at start of %+F:\n", block));
+ DB((dbg, DBG_START, "Living at start of %+F:\n", block));
first = sched_first(block);
/* check all Phis first */
first = sched_first(block);
/* check all Phis first */
@@
-514,7
+514,7
@@
static void compute_live_ins(const ir_node *block)
qsort(delayed, ARR_LEN(delayed), sizeof(delayed[0]), loc_compare);
for (i = 0; i < ARR_LEN(delayed) && i < free_slots; ++i) {
qsort(delayed, ARR_LEN(delayed), sizeof(delayed[0]), loc_compare);
for (i = 0; i < ARR_LEN(delayed) && i < free_slots; ++i) {
- DB
G
((dbg, DBG_START, " delayed %+F taken\n", delayed[i].node));
+ DB((dbg, DBG_START, " delayed %+F taken\n", delayed[i].node));
ARR_APP1(loc_t, starters, delayed[i]);
delayed[i].node = NULL;
}
ARR_APP1(loc_t, starters, delayed[i]);
delayed[i].node = NULL;
}
@@
-527,7
+527,7
@@
static void compute_live_ins(const ir_node *block)
if(node == NULL || !is_Phi(node) || get_nodes_block(node) != block)
continue;
if(node == NULL || !is_Phi(node) || get_nodes_block(node) != block)
continue;
- DB
G
((dbg, DBG_START, " spilling delayed phi %+F\n", node));
+ DB((dbg, DBG_START, " spilling delayed phi %+F\n", node));
be_spill_phi(senv, node);
}
DEL_ARR_F(delayed);
be_spill_phi(senv, node);
}
DEL_ARR_F(delayed);
@@
-548,7
+548,7
@@
static void compute_live_ins(const ir_node *block)
if (! is_Phi(node) || get_nodes_block(node) != block)
continue;
if (! is_Phi(node) || get_nodes_block(node) != block)
continue;
- DB
G
((dbg, DBG_START, " spilling phi %+F\n", node));
+ DB((dbg, DBG_START, " spilling phi %+F\n", node));
be_spill_phi(senv, node);
}
be_spill_phi(senv, node);
}
@@
-663,22
+663,22
@@
static void belady(ir_node *block)
compute_live_ins(block);
}
compute_live_ins(block);
}
- DB
G
((dbg, DBG_DECIDE, "\n"));
- DB
G
((dbg, DBG_DECIDE, "Decide for %+F\n", block));
+ DB((dbg, DBG_DECIDE, "\n"));
+ DB((dbg, DBG_DECIDE, "Decide for %+F\n", block));
block_info = new_block_info();
set_block_info(block, block_info);
block_info = new_block_info();
set_block_info(block, block_info);
- DB
G
((dbg, DBG_WSETS, "Start workset for %+F:\n", block));
+ DB((dbg, DBG_WSETS, "Start workset for %+F:\n", block));
workset_foreach(ws, irn, iter) {
workset_foreach(ws, irn, iter) {
- DB
G
((dbg, DBG_WSETS, " %+F (%u)\n", irn,
+ DB((dbg, DBG_WSETS, " %+F (%u)\n", irn,
workset_get_time(ws, iter)));
}
block_info->start_workset = workset_clone(ws);
/* process the block from start to end */
workset_get_time(ws, iter)));
}
block_info->start_workset = workset_clone(ws);
/* process the block from start to end */
- DB
G
((dbg, DBG_WSETS, "Processing...\n"));
+ DB((dbg, DBG_WSETS, "Processing...\n"));
ir_nodeset_init(&used);
instr_nr = 0;
/* TODO: this leaks (into the obstack)... */
ir_nodeset_init(&used);
instr_nr = 0;
/* TODO: this leaks (into the obstack)... */
@@
-692,7
+692,7
@@
static void belady(ir_node *block)
if (is_Phi(irn)) {
continue;
}
if (is_Phi(irn)) {
continue;
}
- DB
G
((dbg, DBG_DECIDE, " ...%+F\n", irn));
+ DB((dbg, DBG_DECIDE, " ...%+F\n", irn));
/* set instruction in the workset */
instr = irn;
/* set instruction in the workset */
instr = irn;
@@
-733,9
+733,9
@@
static void belady(ir_node *block)
/* Remember end-workset for this block */
block_info->end_workset = workset_clone(ws);
/* Remember end-workset for this block */
block_info->end_workset = workset_clone(ws);
- DB
G
((dbg, DBG_WSETS, "End workset for %+F:\n", block));
+ DB((dbg, DBG_WSETS, "End workset for %+F:\n", block));
workset_foreach(ws, irn, iter)
workset_foreach(ws, irn, iter)
- DB
G
((dbg, DBG_WSETS, " %+F (%u)\n", irn,
+ DB((dbg, DBG_WSETS, " %+F (%u)\n", irn,
workset_get_time(ws, iter)));
/* add successor blocks into worklist */
workset_get_time(ws, iter)));
/* add successor blocks into worklist */
@@
-758,8
+758,8
@@
static void fix_block_borders(ir_node *block, void *data)
int iter;
(void) data;
int iter;
(void) data;
- DB
G
((dbg, DBG_FIX, "\n"));
- DB
G
((dbg, DBG_FIX, "Fixing %+F\n", block));
+ DB((dbg, DBG_FIX, "\n"));
+ DB((dbg, DBG_FIX, "Fixing %+F\n", block));
start_workset = get_block_info(block)->start_workset;
start_workset = get_block_info(block)->start_workset;
@@
-770,7
+770,7
@@
static void fix_block_borders(ir_node *block, void *data)
workset_t *pred_end_workset = get_block_info(pred)->end_workset;
ir_node *node;
workset_t *pred_end_workset = get_block_info(pred)->end_workset;
ir_node *node;
- DB
G
((dbg, DBG_FIX, " Pred %+F\n", pred));
+ DB((dbg, DBG_FIX, " Pred %+F\n", pred));
/* spill all values not used anymore */
workset_foreach(pred_end_workset, node, iter) {
/* spill all values not used anymore */
workset_foreach(pred_end_workset, node, iter) {
@@
-793,7
+793,7
@@
static void fix_block_borders(ir_node *block, void *data)
&& !pred_end_workset->vals[iter].reloaded) {
ir_node *insert_point
= be_get_end_of_block_insertion_point(pred);
&& !pred_end_workset->vals[iter].reloaded) {
ir_node *insert_point
= be_get_end_of_block_insertion_point(pred);
- DB
G
((dbg, DBG_SPILL, "Spill %+F before %+F\n", node,
+ DB((dbg, DBG_SPILL, "Spill %+F before %+F\n", node,
insert_point));
be_add_spill(senv, node, insert_point);
}
insert_point));
be_add_spill(senv, node, insert_point);
}
@@
-817,8
+817,8
@@
static void fix_block_borders(ir_node *block, void *data)
continue;
/* node is not in memory at the end of pred -> reload it */
continue;
/* node is not in memory at the end of pred -> reload it */
- DB
G
((dbg, DBG_FIX, " reload %+F\n", node));
- DB
G
((dbg, DBG_SPILL, "Reload %+F before %+F,%d\n", node, block, i));
+ DB((dbg, DBG_FIX, " reload %+F\n", node));
+ DB((dbg, DBG_SPILL, "Reload %+F before %+F,%d\n", node, block, i));
be_add_reload_on_edge(senv, node, block, i, cls, 1);
}
}
be_add_reload_on_edge(senv, node, block, i, cls, 1);
}
}