Add and fix some comments.
[libfirm] / ir / lower / lower_switch.c
index 2d4e214..ed1f294 100644 (file)
@@ -98,8 +98,8 @@ static void analyse_switch(cond_env_t *env, ir_node *cond)
 
 static int casecmp(const void *a, const void *b)
 {
-       const case_data_t *cda = a;
-       const case_data_t *cdb = b;
+       const case_data_t *cda = (const case_data_t*)a;
+       const case_data_t *cdb = (const case_data_t*)b;
 
        /*
         * Enforce unsigned sorting. Signed comparison will behave differently for
@@ -139,7 +139,7 @@ static void create_if_cascade(cond_env_t *env, dbg_info *dbgi, ir_node *block,
 
        if (numcases == 0) {
                /* zero cases: "goto default;" */
-               ARR_APP1(ir_node*, env->defusers, new_Jmp());
+               ARR_APP1(ir_node*, env->defusers, new_r_Jmp(block));
        } else if (numcases == 1) {
                /* only one case: "if (sel == val) goto target else goto default;" */
                ir_node *val       = new_r_Const_long(irg, cmp_mode, curcases[0].value);
@@ -235,6 +235,7 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond)
                delta            = env->switch_min;
                env->switch_min  = 0;
                env->switch_max -= delta;
+               set_Cond_selector(cond, sel);
        }
 
        /* check for out-of-bounds */
@@ -298,7 +299,7 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond)
  */
 static void find_cond_nodes(ir_node *block, void *ctx)
 {
-       walk_env_t  *env = ctx;
+       walk_env_t  *env = (walk_env_t *)ctx;
        ir_node     *projx;
        ir_node     *cond;
        ir_node     *sel;