Do not emit cld in the CopyB prologue. The ABI mandates that DF is cleared, so do...
[libfirm] / ir / be / bessadestr.c
index 2a6124d..3bcc300 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -46,7 +46,6 @@
 #include "belive_t.h"
 #include "benode_t.h"
 #include "besched_t.h"
-#include "benodesets.h"
 #include "bestatevent.h"
 #include "beirg_t.h"
 #include "beintlive_t.h"
@@ -139,9 +138,9 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                 * register class by construction.
                 */
                for(phi = get_irn_link(bl); phi; phi = get_irn_link(phi)) {
-                       perm_proj_t templ;
-                       ir_node *arg     = get_irn_n(phi, i);
-                       unsigned hash    = nodeset_hash(arg);
+                       ir_node     *arg  = get_irn_n(phi, i);
+                       unsigned     hash = hash_irn(arg);
+                       perm_proj_t  templ;
 
                        if (arch_irn_is(chordal_env->birg->main_env->arch_env, arg, ignore))
                                continue;
@@ -168,14 +167,14 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                         * Create a new Perm with the arguments just collected
                         * above in the arg_set and insert it into the schedule.
                         */
-                       in = xmalloc(n_projs * sizeof(in[0]));
+                       in = XMALLOCN(ir_node*, n_projs);
                        for(pp = set_first(arg_set); pp; pp = set_next(arg_set))
                                in[pp->pos] = pp->arg;
 
                        perm = be_new_Perm(chordal_env->cls, irg, pred_bl, n_projs, in);
                        be_stat_ev("phi_perm", n_projs);
 
-                       insert_after = sched_skip(sched_last(pred_bl), 0, sched_skip_cf_predicator, chordal_env->birg->main_env->arch_env);
+                       insert_after = sched_skip(sched_last(pred_bl), 0, sched_skip_cf_predicator, &chordal_env->birg->main_env->arch_env);
                        sched_add_after(insert_after, perm);
 
                        /*
@@ -189,9 +188,6 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                                pp->proj = proj;
                                assert(get_reg(pp->arg));
                                set_reg(proj, get_reg(pp->arg));
-#ifdef SCHEDULE_PROJS
-                               sched_add_after(insert_after, proj);
-#endif
                                insert_after = proj;
                                DBG((dbg, LEVEL_2, "Copy register assignment %s from %+F to %+F\n", get_reg(pp->arg)->name, pp->arg, pp->proj));
                        }
@@ -203,7 +199,7 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                                perm_proj_t templ;
 
                                templ.arg = get_irn_n(phi, i);
-                               pp        = set_find(arg_set, &templ, sizeof(templ), nodeset_hash(templ.arg));
+                               pp        = set_find(arg_set, &templ, sizeof(templ), hash_irn(templ.arg));
 
                                /* If not found, it was an interfering argument */
                                if (pp) {
@@ -292,7 +288,7 @@ static void set_regs_or_place_dupls_walker(ir_node *bl, void *data) {
 
                                set_irn_n(phi, i, dupl);
                                set_reg(dupl, phi_reg);
-                               sched_add_after(sched_skip(sched_last(arg_block), 0, sched_skip_cf_predicator, chordal_env->birg->main_env->arch_env), dupl);
+                               sched_add_after(sched_skip(sched_last(arg_block), 0, sched_skip_cf_predicator, &chordal_env->birg->main_env->arch_env), dupl);
                                pin_irn(dupl, phi_block);
                                be_liveness_introduce(lv, dupl);
                                be_liveness_update(lv, arg);
@@ -393,7 +389,6 @@ void be_ssa_destruction(be_chordal_env_t *chordal_env) {
        FIRM_DBG_REGISTER(dbg, "ir.be.ssadestr");
 
        be_liveness_invalidate(lv);
-       be_liveness_assure_sets(lv);
 
        /* create a map for fast lookup of perms: block --> perm */
        irg_walk_graph(irg, clear_link, collect_phis_walker, chordal_env);