*/
static int count_non_bads(ir_node *node)
{
- int arity = get_irn_arity(node);
+ int arity = get_Block_n_cfgpreds(node);
int count = 0;
int i;
for (i = 0; i < arity; ++i) {
static void block_remove_bads(ir_node *block)
{
ir_graph *irg = get_irn_irg(block);
- const int max = get_irn_arity(block);
+ const int max = get_Block_n_cfgpreds(block);
const int new_max = count_non_bads(block);
ir_node **new_in = ALLOCAN(ir_node*, new_max);
int i;
/* 1. Create a new block without Bad inputs */
for (i = j = 0; i < max; ++i) {
- ir_node *block_pred = get_irn_n(block, i);
+ ir_node *const block_pred = get_Block_cfgpred(block, i);
if (!is_Bad(block_pred)) {
new_in[j++] = block_pred;
}
assert(get_irn_arity(phi) == max);
for (i = j = 0; i < max; ++i) {
- ir_node *block_pred = get_irn_n(block, i);
-
+ ir_node *const block_pred = get_Block_cfgpred(block, i);
if (!is_Bad(block_pred)) {
ir_node *pred = get_irn_n(phi, i);
new_in[j++] = pred;
firm_collect_block_phis(node, NULL);
if (is_Block(node)) {
ir_node ***blocks_to_process = (ir_node***)env;
- int arity = get_irn_arity(node);
+ int arity = get_Block_n_cfgpreds(node);
int non_bads = count_non_bads(node);
if (arity != non_bads)
ARR_APP1(ir_node*, *blocks_to_process, node);
}
}
-int remove_bads(ir_graph *irg)
+void remove_bads(ir_graph *irg)
{
size_t i;
size_t n_to_process;
if (n_to_process > 0) {
edges_deactivate(irg);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_OUTS);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- return 1;
+ clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_OUTS);
+ clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE);
}
-
- return 0;
+ add_irg_properties(irg, IR_GRAPH_PROPERTY_NO_BADS);
}