dont push constrained nodes through perms (fixes fehler82)
authorMatthias Braun <matze@braunis.de>
Wed, 26 Sep 2007 19:48:22 +0000 (19:48 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 26 Sep 2007 19:48:22 +0000 (19:48 +0000)
[r15932]

ir/be/belower.c

index 42c887e..0ae32e1 100644 (file)
@@ -929,8 +929,9 @@ found_front:
        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);
@@ -949,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)) {