Revert reversion of r28379. Maybe this way it's clear why the assert was wrong.
[libfirm] / ir / opt / combo.c
index 815822b..bb00e89 100644 (file)
@@ -290,8 +290,12 @@ static void check_opcode(const partition_t *Z)
                                key.u.intVal = get_Conv_strict(irn);
                                break;
                        case iro_Div:
+                               key.mode = get_Div_resmode(irn);
                                key.u.intVal = get_Div_no_remainder(irn);
                                break;
+                       case iro_Mod:
+                               key.mode = get_Mod_resmode(irn);
+                               break;
                        case iro_Block:
                                key.u.block = irn;
                                break;
@@ -307,32 +311,41 @@ static void check_opcode(const partition_t *Z)
                        first = 0;
                } else {
                        assert((unsigned)key.code  == get_irn_opcode(irn));
-                       assert(key.mode  == get_irn_mode(irn));
                        assert(key.arity == get_irn_arity(irn));
 
                        switch (get_irn_opcode(irn)) {
                        case iro_Proj:
+                               assert(key.mode  == get_irn_mode(irn));
                                assert(key.u.proj == get_Proj_proj(irn));
                                break;
                        case iro_Sel:
+                               assert(key.mode  == get_irn_mode(irn));
                                assert(key.u.ent == get_Sel_entity(irn));
                                break;
                        case iro_Conv:
+                               assert(key.mode  == get_irn_mode(irn));
                                assert(key.u.intVal == get_Conv_strict(irn));
                                break;
                        case iro_Div:
+                               assert(key.mode  == get_Div_resmode(irn));
                                assert(key.u.intVal == get_Div_no_remainder(irn));
                                break;
+                       case iro_Mod:
+                               assert(key.mode == get_Mod_resmode(irn));
+                               break;
                        case iro_Block:
+                               assert(key.mode  == get_irn_mode(irn));
                                assert(key.u.block == irn);
                                break;
                        case iro_Load:
                                assert(key.mode == get_Load_mode(irn));
                                break;
                        case iro_Builtin:
+                               assert(key.mode  == get_irn_mode(irn));
                                assert(key.u.intVal == (int) get_Builtin_kind(irn));
                                break;
                        default:
+                               assert(key.mode  == get_irn_mode(irn));
                                break;
                        }
                }
@@ -3519,10 +3532,10 @@ static void apply_end(ir_node *end, environment_t *env)
  */
 static void set_compute_functions(void)
 {
-       int i;
+       size_t i, n;
 
        /* set the default compute function */
-       for (i = get_irp_n_opcodes() - 1; i >= 0; --i) {
+       for (i = 0, n = get_irp_n_opcodes(); i < n; ++i) {
                ir_op *op = get_irp_opcode(i);
                op->ops.generic = (op_func)default_compute;
        }