renamed set_value/clear_value(): these names clash with the construction functions
[libfirm] / ir / be / belower.c
index 8785e06..2f22221 100644 (file)
@@ -178,14 +178,14 @@ static int get_pairidx_for_regidx(reg_pair_t *pairs, int n, int reg_idx, int in_
        if (in_out) {
                for (i = 0; i < n; i++) {
                        /* out register matches */
-                       if (pairs[i].out_reg->index == reg_idx)
+                       if ((int) pairs[i].out_reg->index == reg_idx)
                                return i;
                }
        }
        else {
                for (i = 0; i < n; i++) {
                        /* in register matches */
-                       if (pairs[i].in_reg->index == reg_idx)
+                       if ((int) pairs[i].in_reg->index == reg_idx)
                                return i;
                }
        }
@@ -882,6 +882,7 @@ static int push_through_perm(ir_node *perm, void *data)
 
        ir_graph *irg     = get_irn_irg(perm);
        ir_node *bl       = get_nodes_block(perm);
+       ir_node *node;
        int  arity        = get_irn_arity(perm);
        int *map;
        int *proj_map;
@@ -925,11 +926,12 @@ found_front:
 
        DBG((mod, LEVEL_2, "\tfrontier: %+F\n", frontier));
 
-       ir_node *node = sched_prev(perm);
+       node = sched_prev(perm);
        n_moved = 0;
        while(!sched_is_begin(node)) {
-               int      input = -1;
-               ir_node *proj;
+               const arch_register_req_t *req;
+               int                        input = -1;
+               ir_node                   *proj;
 
                foreach_out_edge(perm, edge) {
                        ir_node *out = get_edge_src_irn(edge);
@@ -948,6 +950,14 @@ found_front:
                        break;
                if(arch_irn_is(aenv, node, modify_flags))
                        break;
+               if(is_Proj(node)) {
+                       req = arch_get_register_req(aenv, get_Proj_pred(node),
+                                                   -1 - get_Proj_proj(node));
+               } else {
+                       req = arch_get_register_req(aenv, node, -1);
+               }
+               if(req->type != arch_register_req_type_normal)
+                       break;
                for(i = get_irn_arity(node) - 1; i >= 0; --i) {
                        ir_node *opop = get_irn_n(node, i);
                        if (arch_irn_consider_in_reg_alloc(aenv, cls, opop)) {
@@ -996,7 +1006,6 @@ found_front:
                if(bitset_is_set(moved, i))
                        continue;
                map[n]      = i;
-               fprintf(stderr, "Pn %d -> %d\n", i, n);
                proj_map[i] = n;
                n++;
        }