#include "irgraph_t.h"
#include "irprintf.h"
#include "obst.h"
+#include "error.h"
#include "bespillmorgan.h"
#include "bechordal_t.h"
//---------------------------------------------------------------------------
-static int loop_edge_cmp(const void* p1, const void* p2, size_t s) {
+static int loop_edge_cmp(const void* p1, const void* p2, size_t size) {
loop_edge_t *e1 = (loop_edge_t*) p1;
loop_edge_t *e2 = (loop_edge_t*) p2;
+ (void) size;
return e1->block != e2->block || e1->pos != e2->pos;
}
-static int loop_attr_cmp(const void *e1, const void *e2, size_t s) {
+static int loop_attr_cmp(const void *e1, const void *e2, size_t size) {
loop_attr_t *la1 = (loop_attr_t*) e1;
loop_attr_t *la2 = (loop_attr_t*) e2;
+ (void) size;
return la1->loop != la2->loop;
}
-static int block_attr_cmp(const void *e1, const void *e2, size_t s) {
+static int block_attr_cmp(const void *e1, const void *e2, size_t size) {
block_attr_t *b1 = (block_attr_t*) e1;
block_attr_t *b2 = (block_attr_t*) e2;
+ (void) size;
return b1->block != b2->block;
}
/*
* All values that are used within the block are not unused (and therefore not
* livethrough_unused)
+ *
+ * TODO FIXME use block out edges and not schedule to find uses
*/
+ panic("needs fixing");
sched_foreach(block, node) {
int i, arity;
const bitset_t *cand_bitset = loop_attr->livethrough_unused;
int candidatecount = bitset_popcnt(cand_bitset);
spillcandidate_t *candidates;
+ bitset_pos_t idx;
int i, c;
loop_edge_t *edge;
DBG((dbg, DBG_CHOOSE, "Candidates for loop %d\n", get_loop_loop_nr(loop_attr->loop)));
// build candidiatelist
c = 0;
- bitset_foreach(cand_bitset, i) {
- ir_node *node = get_idx_irn(env->irg, i);
+ bitset_foreach(cand_bitset, idx) {
+ ir_node *node = get_idx_irn(env->irg, idx);
candidates[c].node = node;
candidates[c].cost = 0;
ir_node *node;
int max_pressure;
int loop_unused_spills_needed;
- pset *live_nodes = pset_new_ptr_default();
+ ir_nodeset_t live_nodes;
const be_lv_t *lv = env->lv;
- be_liveness_end_of_block(lv, env->arch, env->cls, block, live_nodes);
- max_pressure = pset_count(live_nodes);
+ ir_nodeset_init(&live_nodes);
+
+ be_liveness_end_of_block(lv, env->arch, env->cls, block, &live_nodes);
+ max_pressure = ir_nodeset_size(&live_nodes);
DBG((dbg, DBG_LIVE, "Reduce pressure to %d In Block %+F:\n", env->registers_available, block));
if(is_Phi(node))
break;
- be_liveness_transfer(env->arch, env->cls, node, live_nodes);
- pressure = pset_count(live_nodes);
+ be_liveness_transfer(env->arch, env->cls, node, &live_nodes);
+ pressure = ir_nodeset_size(&live_nodes);
if(pressure > max_pressure)
max_pressure = pressure;
}
- del_pset(live_nodes);
+ ir_nodeset_destroy(&live_nodes);
loop_unused_spills_needed = max_pressure - env->registers_available;