const ir_node *irn;
int i, n;
int *save_time_step;
- ir_node **save_nodes;
+ const ir_node **save_nodes;
const ir_edge_t *edge;
pset *scheduled_nodes = pset_new_ptr_default();
sched_foreach(block, irn) {
sched_info_t *info = get_irn_sched_info(irn);
save_time_step[i] = info->time_step;
- save_nodes[i] = irn;
+ save_nodes[i] = (ir_node *)irn;
info->time_step = i;
pset_insert_ptr(scheduled_nodes, irn);
del_pset(scheduled_nodes);
free(save_time_step);
- free(save_nodes);
+ free((void *) save_nodes);
return res;
}
return res;
}
+int (sched_comes_after)(const ir_node *n1, const ir_node *n2)
+{
+ return _sched_comes_after(n1, n2);
+}
+
int sched_skip_cf_predicator(const ir_node *irn, void *data) {
arch_env_t *ae = data;
return arch_irn_classify(ae, irn) == arch_irn_class_branch;
return is_Phi(irn);
}
-extern ir_node *sched_skip(ir_node *from, int forward,
- sched_predicator_t *predicator, void *data)
+extern ir_node *sched_skip(ir_node *from, int forward, sched_predicator_t *predicator, void *data)
{
- const ir_node *bl = get_block(from);
- ir_node *curr;
+ const ir_node *bl = get_block(from);
+ ir_node *curr;
+
+ if (is_Block(from))
+ from = forward ? sched_next(from) : sched_prev(from);
+
+ for(curr = from; curr != bl && predicator(curr, data); curr = forward ? sched_next(curr) : sched_prev(curr));
- for(curr = from; curr != bl && predicator(curr, data);
- curr = forward ? sched_next(curr) : sched_prev(curr));
- return curr;
+ return curr;
}