Added support for SymConst(ofs_ent)
[libfirm] / ir / be / bessadestr.c
index aad06dd..55878bb 100644 (file)
@@ -28,6 +28,8 @@
 #include "belive_t.h"
 #include "benode_t.h"
 #include "besched_t.h"
+#include "benodesets.h"
+#include "bestatevent.h"
 
 DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
 
@@ -35,7 +37,7 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
 #define get_reg(irn) arch_get_irn_register(get_chordal_arch(chordal_env), irn)
 #define set_reg(irn, reg) arch_set_irn_register(get_chordal_arch(chordal_env), irn, reg)
 
-#define is_Perm(irn)            (arch_irn_classify(arch_env, irn) == arch_irn_class_perm)
+#define is_Perm(irn)            (arch_irn_class_is(arch_env, irn, perm))
 #define get_reg_cls(irn)        (arch_get_irn_reg_class(arch_env, irn, -1))
 #define is_curr_reg_class(irn)  (get_reg_cls(p) == chordal_env->cls)
 
@@ -109,7 +111,7 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                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    = HASH_PTR(arg);
+                       unsigned hash    = nodeset_hash(arg);
 
                        templ.arg  = arg;
                        pp         = set_find(arg_set, &templ, sizeof(templ), hash);
@@ -138,6 +140,8 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                                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);
+
                        free(in);
                        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);
@@ -165,7 +169,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), HASH_PTR(templ.arg));
+                               pp        = set_find(arg_set, &templ, sizeof(templ), nodeset_hash(templ.arg));
 
                                /* If not found, it was an interfering argument */
                                if (pp)