X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_blocks.c;h=a95b67b009120f50b1092cc25647cc529a23e475;hb=7fcabe88f484291a1d97c829beb68335babf4497;hp=4ad1b952ef16821794efb31221f0714be6acb724;hpb=4803d434aae007f6506553c8d714c31f503ec78c;p=libfirm diff --git a/ir/opt/opt_blocks.c b/ir/opt/opt_blocks.c index 4ad1b952e..a95b67b00 100644 --- a/ir/opt/opt_blocks.c +++ b/ir/opt/opt_blocks.c @@ -23,8 +23,7 @@ * @author Michael Beck * @version $Id$ * - * This phase find congruent blocks. Works currently for - * predecessors of the end block only. + * This phase find congruent blocks. * Two block are congruent, if they contains only equal calculations. */ #include "config.h" @@ -40,7 +39,8 @@ #include "set.h" #include "debug.h" -/* define this for gneral block shaping */ +/* define this for general block shaping: congruent blocks + are found not only before the end block but anywhere in the graph */ #define GENERAL_SHAPE typedef struct partition_t partition_t; @@ -409,9 +409,15 @@ static opcode_key_t *opcode(const node_t *node, environment_t *env) { case iro_Conv: key.u.intVal = get_Conv_strict(irn); break; + case iro_Load: + key.mode = get_Load_mode(irn); + break; case iro_Div: key.u.intVal = is_Div_remainderless(irn); break; + case iro_Builtin: + key.u.intVal = get_Builtin_kind(irn); + break; default: break; } @@ -544,7 +550,7 @@ void propagate_blocks(partition_t *part, environment_t *env) { DB((dbg, LEVEL_3, " propagate Input %+F\n", node->node)); } - /* Add bl to map[opcode(bl)]. */ + /* Add bl to map[opcode(n)]. */ id = opcode(node, env); entry = listmap_find(&map, id); bl->next = entry->list; @@ -1134,7 +1140,7 @@ static void add_roots(ir_graph *irg, environment_t *env) { } /* * Now sort the roots to normalize them as good as possible. - * Else, we will split identical blocks if we start which different roots + * Else, we will split identical blocks if we start which different roots. */ for (bl = env->all_blocks; bl != NULL; bl = bl->all_next) { int i, n = ARR_LEN(bl->roots);