return get_irn_link(block);
}
-static bool is_fallthrough(const ir_node *cfgpred)
+static int is_fallthrough(const ir_node *cfgpred)
{
ir_node *pred;
if(!is_Proj(cfgpred))
- return true;
+ return 1;
pred = get_Proj_pred(cfgpred);
if(is_ia32_SwitchJmp(pred))
- return false;
+ return 0;
- return true;
+ return 1;
}
-static bool block_needs_label(const ir_node *block)
+static int block_needs_label(const ir_node *block)
{
- bool need_label = true;
+ int need_label = 1;
int n_cfgpreds = get_Block_n_cfgpreds(block);
if (n_cfgpreds == 0) {
- need_label = false;
+ need_label = 0;
} else if (n_cfgpreds == 1) {
ir_node *cfgpred = get_Block_cfgpred(block, 0);
ir_node *cfgpred_block = get_nodes_block(cfgpred);
if (get_prev_block_sched(block) == cfgpred_block
&& is_fallthrough(cfgpred)) {
- need_label = false;
+ need_label = 0;
}
}
return NULL;
}
-static bool can_be_fallthrough(const ir_node *node)
+static int can_be_fallthrough(const ir_node *node)
{
ir_node *target_block = get_cfop_target_block(node);
ir_node *block = get_nodes_block(node);
const ir_node *proj_true;
const ir_node *proj_false;
const ir_node *block;
- const ir_node *next_block;
pn_Cmp pnc = get_ia32_condcode(node);
pnc = determine_final_pnc(node, 0, pnc);
case pn_Cmp_Le:
/* we need a local label if the false proj is a fallthrough
* as the falseblock might have no label emitted then */
- if (get_cfop_target_block(proj_false) == next_block) {
+ if (can_be_fallthrough(proj_false)) {
need_parity_label = 1;
be_emit_cstring("\tjp 1f");
} else {
}
/* the second Proj might be a fallthrough */
- if (get_cfop_target_block(proj_false) != next_block) {
- be_emit_cstring("\tjmp ");
+ if (can_be_fallthrough(proj_false)) {
+ be_emit_cstring("\t/* fallthrough to ");
ia32_emit_cfop_target(proj_false);
+ be_emit_cstring(" */");
be_emit_finish_line_gas(proj_false);
} else {
- be_emit_cstring("\t/* fallthrough to ");
+ be_emit_cstring("\tjmp ");
ia32_emit_cfop_target(proj_false);
- be_emit_cstring(" */");
be_emit_finish_line_gas(proj_false);
}
}
break;
}
default:
- assert(0 && "unsupported op type for Conv");
+ panic("unsupported op type for Conv");
}
be_emit_finish_line_gas(node);
}
n_cfgpreds = get_Block_n_cfgpreds(block);
for(i = 0; i < n_cfgpreds; ++i) {
- ir_node *pred = get_Block_cfgpred_block(block, i);
- double pred_freq = get_block_execfreq(exec_freq, pred);
+ const ir_node *pred = get_Block_cfgpred_block(block, i);
+ double pred_freq = get_block_execfreq(exec_freq, pred);
if(pred == prev) {
prev_freq += pred_freq;
static void ia32_emit_block_header(ir_node *block)
{
ir_graph *irg = current_ir_graph;
- int n_cfgpreds;
- bool need_label = block_needs_label(block);
+ int need_label = block_needs_label(block);
int i, arity;
ir_exec_freq *exec_freq = cg->birg->exec_freq;
} else {
/* if the predecessor block has no fall-through,
we can always align the label. */
- int i;
- bool has_fallthrough = false;;
+ int i;
+ int has_fallthrough = 0;
- for (i = n_cfgpreds - 1; i >= 0; --i) {
+ for (i = get_Block_n_cfgpreds(block) - 1; i >= 0; --i) {
ir_node *cfg_pred = get_Block_cfgpred(block, i);
if (can_be_fallthrough(cfg_pred)) {
- has_fallthrough = true;
+ has_fallthrough = 1;
break;
}
}
be_gas_emit_function_prolog(entity, ia32_cg_config.function_alignment);
/* we use links to point to target blocks */
- set_using_irn_link(irg);
+ ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
irg_block_walk_graph(irg, ia32_gen_labels, NULL, &exc_list);
/* initialize next block links */
be_emit_char('\n');
be_emit_write_line();
- clear_using_irn_link(irg);
+ ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
/* Sort the exception table using the exception label id's.
Those are ascending with ascending addresses. */