*/
static void TEMPLATE_emit_block(ir_node *block)
{
- ir_node *node;
-
be_gas_begin_block(block, true);
sched_foreach(block, node) {
*/
static void amd64_gen_block(ir_node *block, void *data)
{
- ir_node *node;
(void) data;
if (! is_Block(block))
*/
static void arm_gen_block(ir_node *block, ir_node *prev_block)
{
- ir_node *irn;
-
arm_emit_block_header(block, prev_block);
be_dwarf_location(get_irn_dbg_info(block));
sched_foreach(block, irn) {
#define border_use(irn, step, real) \
border_add(env, head, irn, step, ++pressure, 0, real)
- be_chordal_env_t *env = (be_chordal_env_t*)env_ptr;
- bitset_t *live = bitset_malloc(get_irg_last_idx(env->irg));
- ir_node *irn;
- be_lv_t *lv = be_get_irg_liveness(env->irg);
+ be_chordal_env_t *env = (be_chordal_env_t*)env_ptr;
+ bitset_t *live = bitset_malloc(get_irg_last_idx(env->irg));
+ be_lv_t *lv = be_get_irg_liveness(env->irg);
int i, n;
size_t elm;
*/
static void fix_flags_walker(ir_node *block, void *env)
{
- ir_node *node;
ir_node *flags_needed = NULL;
ir_node *flag_consumers = NULL;
int pn = -1;
(void) env;
+ ir_node *place = block;
sched_foreach_reverse(block, node) {
int i, arity;
ir_node *new_flags_needed = NULL;
ir_node *test;
- if (is_Phi(node))
+ if (is_Phi(node)) {
+ place = node;
break;
+ }
if (node == flags_needed) {
/* all ok */
if (flags_needed != NULL) {
assert(get_nodes_block(flags_needed) != block);
- rematerialize_or_move(flags_needed, node, flag_consumers, pn);
+ rematerialize_or_move(flags_needed, place, flag_consumers, pn);
flags_needed = NULL;
flag_consumers = NULL;
}
{
int i;
int arity;
- ir_node *node;
ir_node *pred;
ir_node *succ_block;
ir_node *jump = NULL;
/* there can be some non-scheduled Pin nodes left in the block, move them
* to the succ block (Pin) or pred block (Sync) */
foreach_out_edge_safe(block, edge) {
- node = get_edge_src_irn(edge);
+ ir_node *const node = get_edge_src_irn(edge);
if (node == jump)
continue;
const ir_node *pos, ir_nodeset_t *live)
{
const ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos);
- ir_node *irn;
be_liveness_end_of_block(lv, cls, bl, live);
sched_foreach_reverse(bl, irn) {
ir_node *block,
const arch_register_class_t *cls)
{
- be_lv_t *lv = be_get_irg_liveness(irg);
- ir_nodeset_t live_nodes;
- ir_node *irn;
- size_t max_live;
+ be_lv_t *lv = be_get_irg_liveness(irg);
+ ir_nodeset_t live_nodes;
+ size_t max_live;
DBG((dbg, LEVEL_1, "Processing Block %+F\n", block));
*/
static void assure_constraints_walker(ir_node *block, void *walk_env)
{
- ir_node *irn;
constraint_env_t *env = (constraint_env_t*)walk_env;
sched_foreach_reverse(block, irn) {
int n_moved;
int new_size;
ir_node *frontier = bl;
- ir_node *irn;
int i, n;
/* get some Proj and find out the register class of that Proj. */
pbqp_t *pbqp_inst = pbqp_alloc_env->pbqp_inst;
plist_t *temp_list = plist_new();
plist_element_t *el;
- ir_node *irn;
ir_nodeset_t live_nodes;
#if USE_BIPARTIT_MATCHING
int *assignment = ALLOCAN(int, cls->n_regs);
*/
static void analyze_block(ir_node *block, void *data)
{
- float weight = (float)get_block_execfreq(execfreqs, block);
- ir_nodeset_t live_nodes;
- ir_node *node;
+ float weight = (float)get_block_execfreq(execfreqs, block);
+ ir_nodeset_t live_nodes;
(void) data;
ir_nodeset_init(&live_nodes);
static void create_congruence_class(ir_node *block, void *data)
{
- ir_nodeset_t live_nodes;
- ir_node *node;
+ ir_nodeset_t live_nodes;
(void) data;
ir_nodeset_init(&live_nodes);
unsigned r;
int old_node_idx;
ir_node *live;
- ir_node *phi;
allocation_info_t *head_info;
allocation_info_t *other_info;
ir_node *op = get_Phi_pred(node, i);
int n;
int res;
unsigned *assignment;
- ir_node *node;
hungarian_problem_t *bp;
/* count phi nodes */
{
int i;
ir_nodeset_t live_nodes;
- ir_node *node;
int n_preds;
block_info_t *block_info;
block_info_t **pred_block_infos;
const arch_register_t *reg;
int p;
- node = be_lv_get_irn(lv, block, i);
+ ir_node *node = be_lv_get_irn(lv, block, i);
req = arch_get_irn_register_req(node);
if (req->cls != cls)
continue;
/* all live-ins must have a register */
#ifdef DEBUG_libfirm
{
- ir_nodeset_iterator_t iter;
+ ir_nodeset_iterator_t iter;
+ ir_node *node;
foreach_ir_nodeset(&live_nodes, node, iter) {
const arch_register_t *reg = arch_get_irn_register(node);
assert(reg != NULL);
static void sched_renumber(const ir_node *block)
{
- ir_node *irn;
sched_info_t *inf;
sched_timestep_t step = SCHED_INITIAL_GRANULARITY;
}
#define sched_foreach_from(from, irn) \
- for(irn = from; !sched_is_end(irn); irn = sched_next(irn))
+ for (ir_node *irn = from; !sched_is_end(irn); irn = sched_next(irn))
#define sched_foreach_reverse_from(from, irn) \
- for(irn = from; !sched_is_begin(irn); irn = sched_prev(irn))
+ for (ir_node *irn = from; !sched_is_begin(irn); irn = sched_prev(irn))
/**
* A shorthand macro for iterating over a schedule.
static void *reg_pressure_block_init(void *graph_env, ir_node *bl)
{
- ir_node *irn;
reg_pressure_selector_env_t *env = XMALLOC(reg_pressure_selector_env_t);
(void) graph_env;
static void pre_spill_prepare_constr_walker(ir_node *block, void *data)
{
be_pre_spill_env_t *env = (be_pre_spill_env_t*)data;
- ir_node *node;
sched_foreach(block, node) {
prepare_constr_insn(env, node);
}
{
ir_loop *loop = get_irn_loop(block);
ir_node *first;
- ir_node *node;
loc_t loc;
loc_t *starters;
loc_t *delayed;
static void process_block(ir_node *block)
{
workset_t *new_vals;
- ir_node *irn;
unsigned iter;
block_info_t *block_info;
int arity;
set_block_info(block, block_info);
DB((dbg, DBG_WSETS, "Start workset for %+F:\n", block));
- workset_foreach(ws, irn, iter) {
- DB((dbg, DBG_WSETS, " %+F (%u)\n", irn,
- workset_get_time(ws, iter)));
+ {
+ ir_node *irn;
+ workset_foreach(ws, irn, iter) {
+ DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, workset_get_time(ws, iter)));
+ }
}
block_info->start_workset = workset_clone(ws);
/* Remember end-workset for this block */
block_info->end_workset = workset_clone(ws);
DB((dbg, DBG_WSETS, "End workset for %+F:\n", block));
- workset_foreach(ws, irn, iter)
- DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, workset_get_time(ws, iter)));
+ {
+ ir_node *irn;
+ workset_foreach(ws, irn, iter)
+ DB((dbg, DBG_WSETS, " %+F (%u)\n", irn, workset_get_time(ws, iter)));
+ }
}
/**
*/
static void spill_block(ir_node *block, void *data)
{
- ir_nodeset_t live_nodes;
- ir_nodeset_iterator_t iter;
- ir_node *node;
- int n_phi_values_spilled;
- int regpressure;
- int live_nodes_pressure;
- int phi_spills_needed;
+ ir_nodeset_t live_nodes;
+ ir_nodeset_iterator_t iter;
+ int n_phi_values_spilled;
+ int regpressure;
+ int live_nodes_pressure;
+ int phi_spills_needed;
(void) data;
DBG((dbg, LEVEL_1, "spilling block %+F\n", block));
be_liveness_end_of_block(lv, cls, block, &live_nodes);
/* remove already spilled nodes from liveset */
- foreach_ir_nodeset(&live_nodes, node, iter) {
- DBG((dbg, LEVEL_2, "\t%+F is live-end... ", node));
- if (bitset_is_set(spilled_nodes, get_irn_idx(node))) {
- DBG((dbg, LEVEL_2, "but spilled; removing.\n"));
- ir_nodeset_remove_iterator(&live_nodes, &iter);
- } else {
- DBG((dbg, LEVEL_2, "keeping.\n"));
+ {
+ ir_node *node;
+ foreach_ir_nodeset(&live_nodes, node, iter) {
+ DBG((dbg, LEVEL_2, "\t%+F is live-end... ", node));
+ if (bitset_is_set(spilled_nodes, get_irn_idx(node))) {
+ DBG((dbg, LEVEL_2, "but spilled; removing.\n"));
+ ir_nodeset_remove_iterator(&live_nodes, &iter);
+ } else {
+ DBG((dbg, LEVEL_2, "keeping.\n"));
+ }
}
}
}
live_nodes_pressure = 0;
- foreach_ir_nodeset(&live_nodes, node, iter) {
- live_nodes_pressure += get_value_width(node);
+ {
+ ir_node *node;
+ foreach_ir_nodeset(&live_nodes, node, iter) {
+ live_nodes_pressure += get_value_width(node);
+ }
}
/* calculate how many of the phis need to be spilled */
*/
static void process_block(be_ssa_construction_env_t *env, ir_node *block)
{
- ir_node *node;
ir_node *def = NULL;
constr_info *block_info = get_or_set_info(env, block);
}
}
else {
- ir_node *def = NULL;
-
/* Search the last definition of the block. */
sched_foreach_reverse(block, def) {
if (is_definition(env, def)) {
constr_info *info = get_info(env, def);
- def = info->u.definition;
- DBG((dbg, LEVEL_3, "\t...found definition %+F\n", def));
-
+ DBG((dbg, LEVEL_3, "\t...found definition %+F\n", info->u.definition));
+ block_info->u.last_definition = info->u.definition;
break;
}
}
- assert(def && "No definition found");
-
- block_info->u.last_definition = def;
+ assert(block_info->u.last_definition && "No definition found");
}
return block_info->u.last_definition;
be_stack_layout_t *layout = be_get_irg_stack_layout(irg);
bool sp_relative = layout->sp_relative;
const arch_env_t *arch_env = be_get_irg_arch_env(irg);
- ir_node *irn;
sched_foreach(bl, irn) {
int ofs;
ir_node *block,
const arch_register_class_t *cls)
{
- ir_graph *irg = env->irg;
- ir_node *irn;
- ir_nodeset_t live_nodes;
- size_t max_live;
+ ir_graph *irg = env->irg;
+ ir_nodeset_t live_nodes;
+ size_t max_live;
ir_nodeset_init(&live_nodes);
be_liveness_end_of_block(env->lv, cls, block, &live_nodes);
static void estimate_block_costs(ir_node *block, void *data)
{
estimate_irg_costs_env_t *env = (estimate_irg_costs_env_t*)data;
- ir_node *node;
- double costs = 0.0;
+ double costs = 0.0;
sched_foreach(block, node) {
costs += arch_get_op_estimated_cost(node);
be_next_use_t next_use;
ir_loop *loop;
ir_node *best_starter, *first;
- ir_node *node;
int n_cfgpreds;
unsigned best_time;
int outer_loop_allowed;
/* check all Live-Ins */
be_lv_foreach(env->lv, block, be_lv_state_in, i) {
- node = be_lv_get_irn(env->lv, block, i);
+ ir_node *const node = be_lv_get_irn(env->lv, block, i);
if (!mode_is_data(get_irn_mode(node)))
continue;
static void belady(minibelady_env_t *env, ir_node *block)
{
ir_node *current_state;
- ir_node *node;
block_info_t *block_info;
/* Don't do a block twice */
*/
static int be_is_phi_argument(const ir_node *block, const ir_node *def)
{
- ir_node *node;
ir_node *succ_block = NULL;
int arity, i;
*/
static void set_sched_step_walker(ir_node *block, void *data)
{
- ir_node *node;
unsigned step = 0;
(void) data;
{
be_verify_register_pressure_env_t *env = (be_verify_register_pressure_env_t *)data;
ir_nodeset_t live_nodes;
- ir_node *irn;
int pressure;
/* collect register pressure info, start with end of a block */
static void verify_schedule_walker(ir_node *block, void *data)
{
be_verify_schedule_env_t *env = (be_verify_schedule_env_t*) data;
- ir_node *node;
ir_node *non_phi_found = NULL;
ir_node *cfchange_found = NULL;
int last_timestep = INT_MIN;
static void verify_block_register_allocation(ir_node *block, void *data)
{
unsigned i;
- ir_node *node;
unsigned n_regs;
int idx;
*/
static void ia32_gen_block(ir_node *block)
{
- ir_node *node;
-
ia32_emit_block_header(block);
if (sp_relative) {
static void gen_binary_block(ir_node *block)
{
- ir_node *node;
-
ia32_emit_block_header(block);
/* emit the contents of the block */
*/
static void peephole_ia32_Return(ir_node *node)
{
- ir_node *irn;
-
if (!ia32_cg_config.use_pad_return)
return;
static void peephole_store_incsp(ir_node *store)
{
dbg_info *dbgi;
- ir_node *node;
ir_node *block;
ir_node *noreg;
ir_node *mem;
{
vfp_liveness live = vfp_liveness_end_of_block(sim, block);
unsigned idx;
- ir_node *irn;
/* now iterate through the block backward and cache the results */
sched_foreach_reverse(block, irn) {
*/
static void sparc_emit_block(ir_node *block, ir_node *prev)
{
- ir_node *node;
ir_node *next_delay_slot;
bool needs_label = block_needs_label(block, prev);
static void process_bias(ir_node *block, bool sp_relative, int bias,
int free_bytes)
{
- ir_node *irn;
-
mark_Block_block_visited(block);
/* process schedule */