X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fopt%2Fcombo.c;h=af5bc660663b7ce8c0bc16750d477bac4f85f107;hb=7fcabe88f484291a1d97c829beb68335babf4497;hp=1ab9371b49e592ff69bd80d1bc94f1b44b3ff138;hpb=c2d8fb7499bfda2c9e64cf9dab01fb26cfc0236f;p=libfirm diff --git a/ir/opt/combo.c b/ir/opt/combo.c index 1ab9371b4..af5bc6606 100644 --- a/ir/opt/combo.c +++ b/ir/opt/combo.c @@ -112,6 +112,7 @@ struct opcode_key_t { long proj; /**< For Proj nodes, its proj number */ ir_entity *ent; /**< For Sel Nodes, its entity */ int intVal; /**< For Conv/Div Nodes: strict/remainderless */ + unsigned uintVal;/**< for Builtin: the kind */ ir_node *block; /**< for Block: itself */ void *ptr; /**< generic pointer for hash/cmp */ } u; @@ -295,12 +296,15 @@ static void check_opcode(const partition_t *Z) { case iro_Load: key.mode = get_Load_mode(irn); break; + case iro_Builtin: + key.u.intVal = get_Builtin_kind(irn); + break; default: break; } first = 0; } else { - assert(key.code == get_irn_opcode(irn)); + assert((unsigned)key.code == get_irn_opcode(irn)); assert(key.mode == get_irn_mode(irn)); assert(key.arity == get_irn_arity(irn)); @@ -323,6 +327,9 @@ static void check_opcode(const partition_t *Z) { case iro_Load: assert(key.mode == get_Load_mode(irn)); break; + case iro_Builtin: + assert(key.u.intVal == (int) get_Builtin_kind(irn)); + break; default: break; } @@ -578,7 +585,7 @@ static int cmp_opcode(const void *elt, const void *key, size_t size) { return o1->code != o2->code || o1->mode != o2->mode || o1->arity != o2->arity || o1->u.proj != o2->u.proj || - o1->u.intVal != o2->u.intVal || + o1->u.intVal != o2->u.intVal || /* this already checks uIntVal */ o1->u.ptr != o2->u.ptr; } /* cmp_opcode */ @@ -1680,6 +1687,9 @@ static void *lambda_opcode(const node_t *node, environment_t *env) { case iro_Load: key.mode = get_Load_mode(irn); break; + case iro_Builtin: + key.u.intVal = get_Builtin_kind(irn); + break; default: break; } @@ -2366,7 +2376,7 @@ static void compute_Proj_Cond(node_t *node, ir_node *cond) { node->type.tv = tarval_reachable; } else if (selector->type.tv == tarval_top) { if (tarval_UNKNOWN == tarval_top && - pnc == get_Cond_defaultProj(cond)) { + pnc == get_Cond_default_proj(cond)) { /* a switch based of Top is always "default" */ node->type.tv = tarval_reachable; } else { @@ -2374,7 +2384,7 @@ static void compute_Proj_Cond(node_t *node, ir_node *cond) { } } else { long value = get_tarval_long(selector->type.tv); - if (pnc == get_Cond_defaultProj(cond)) { + if (pnc == get_Cond_default_proj(cond)) { /* default switch, have to check ALL other cases */ int i; @@ -3532,6 +3542,7 @@ void combo(ir_graph *irg) { set_irg_extblk_inconsistent(irg); set_irg_doms_inconsistent(irg); set_irg_loopinfo_inconsistent(irg); + set_irg_entity_usage_state(irg, ir_entity_usage_not_computed); } ir_free_resources(irg, IR_RESOURCE_IRN_LINK | IR_RESOURCE_PHI_LIST);