*/
static void dump_partition(const char *msg, const partition_t *part)
{
- const block_t *block;
- int first = 1;
+ int first = 1;
DB((dbg, LEVEL_2, " %s part%u (%u blocks) {\n ", msg, part->nr, part->n_blocks));
list_for_each_entry(block_t, block, &part->blocks, block_list) {
key.id = id;
key.list = NULL;
key.next = NULL;
- entry = (listmap_entry_t*)set_insert(map->map, &key, sizeof(key), hash_ptr(id));
+ entry = set_insert(listmap_entry_t, map->map, &key, sizeof(key), hash_ptr(id));
if (entry->list == NULL) {
/* a new entry, put into the list */
case iro_Const:
key.u.tv = get_Const_tarval(irn);
break;
- case iro_Conv:
- key.u.intVal = get_Conv_strict(irn);
- break;
case iro_Load:
key.mode = get_Load_mode(irn);
break;
break;
}
- entry = (opcode_key_t*)set_insert(env->opcode2id_map, &key, sizeof(key), opcode_hash(&key));
+ entry = set_insert(opcode_key_t, env->opcode2id_map, &key, sizeof(key), opcode_hash(&key));
return entry;
} /* opcode */
{
block_t *ready_blocks = NULL;
unsigned n_ready = 0;
- block_t *bl, *next;
listmap_t map;
listmap_entry_t *iter;
for (i = get_irn_arity(irn) - 1; i >= 0; --i) {
ir_node *pred = get_irn_n(irn, i);
ir_node *block = get_nodes_block(skip_Proj(pred));
- node_t *p_node;
if (block != bl->block) {
- p_node = create_node(pred, bl, env);
+ node_t *p_node = create_node(pred, bl, env);
if (is_input_node(pred, irn, i)) {
/* is a block live input */
p_node->is_input = 1;
}
} else if (! irn_visited_else_mark(pred)) {
/* not yet visited, ok */
- p_node = create_node(pred, bl, env);
+ create_node(pred, bl, env);
if (is_Phi(pred)) {
/* update the Phi list */
*/
static void propagate(environment_t *env)
{
- partition_t *part, *next;
-
list_for_each_entry_safe(partition_t, part, next, &env->partitions, part_list) {
if (part->n_blocks < 2) {
/* zero or one block left, kill this partition */
static void propagate_blocks_live_troughs(partition_t *part, environment_t *env)
{
const ir_node *meet_block = part->meet_block;
- block_t *bl, *next;
listmap_t map;
listmap_entry_t *iter;
const ir_node *phi;
*/
static void propagate_live_troughs(environment_t *env)
{
- partition_t *part, *next;
-
list_for_each_entry_safe(partition_t, part, next, &env->partitions, part_list) {
propagate_blocks_live_troughs(part, env);
}
static void apply(ir_graph *irg, partition_t *part)
{
block_t *repr = list_entry(part->blocks.next, block_t, block_list);
- block_t *bl;
ir_node *block, *end, *meet_block, *p, *next;
ir_node **ins, **phi_ins;
phi_t *repr_phi, *phi;
#endif /* GENERAL_SHAPE */
/* Combines congruent end blocks into one. */
-int shape_blocks(ir_graph *irg)
+void shape_blocks(ir_graph *irg)
{
environment_t env;
- partition_t *part;
block_t *bl;
int res, n;
if (res) {
/* control flow changed */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
- | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
+ clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE);
}
for (bl = env.all_blocks; bl != NULL; bl = bl->all_next) {
DEL_ARR_F(env.live_outs);
del_set(env.opcode2id_map);
obstack_free(&env.obst, NULL);
-
- return res;
} /* shape_blocks */
ir_graph_pass_t *shape_blocks_pass(const char *name)
{
- return def_graph_pass_ret(name ? name : "shape_blocks", shape_blocks);
+ return def_graph_pass(name ? name : "shape_blocks", shape_blocks);
} /* shape_blocks_pass */