Directly ask backend for current machine size in CopyB lowering.
[libfirm] / ir / lower / lower_switch.c
index 6de9751..4ff2737 100644 (file)
@@ -207,7 +207,7 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond)
        ir_node       *block         = get_nodes_block(cond);
        ir_mode       *cmp_mode      = get_irn_mode(sel);
        ir_node      **default_preds = NEW_ARR_F(ir_node*, 0);
-       unsigned long  default_pn    = get_Cond_default_proj(cond);
+       long           default_pn    = get_Cond_default_proj(cond);
        long           delta         = 0;
        ir_node       *max_const;
        ir_node       *proj_true;
@@ -252,16 +252,10 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond)
 
        /* adapt projs */
        foreach_out_irn(cond, i, proj) {
-               unsigned long pn     = get_Proj_proj(proj);
-               unsigned long new_pn = pn - delta;
+               long pn     = get_Proj_proj(proj);
+               long new_pn = pn - delta;
                if (pn == default_pn) {
-                       /* we might have to choose a new default_pn */
-                       if (pn < (unsigned long) env->switch_max) {
-                               new_pn = env->switch_max + 1;
-                               set_Cond_default_proj(cond, new_pn);
-                       } else {
-                               new_pn = default_pn;
-                       }
+                       set_Cond_default_proj(cond, new_pn);
                        ARR_APP1(ir_node*, default_preds, proj);
                }
 
@@ -272,18 +266,18 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond)
        /* adapt default block */
        n_default_preds = ARR_LEN(default_preds);
        if (n_default_preds > 1) {
-               size_t i;
+               size_t p;
 
                /* create new intermediate blocks so we don't have critical edges */
-               for (i = 0; i < n_default_preds; ++i) {
-                       ir_node *proj = default_preds[i];
-                       ir_node *block;
-                       ir_node *in[1];
+               for (p = 0; p < n_default_preds; ++p) {
+                       ir_node *pred = default_preds[p];
+                       ir_node *split_block;
+                       ir_node *block_in[1];
 
-                       in[0] = proj;
-                       block = new_r_Block(irg, 1, in);
+                       block_in[0] = pred;
+                       split_block = new_r_Block(irg, 1, block_in);
 
-                       default_preds[i] = new_r_Jmp(block);
+                       default_preds[p] = new_r_Jmp(split_block);
                }
        }
        set_irn_in(env->default_block, n_default_preds, default_preds);