simplify and speedup belady/loopana a bit
[libfirm] / ir / be / belower.c
index 3b2b47a..44a310b 100644 (file)
@@ -38,6 +38,7 @@
 #include "irgmod.h"
 #include "iredges_t.h"
 #include "irgwalk.h"
+#include "array_t.h"
 
 #include "bearch_t.h"
 #include "belower.h"
@@ -364,8 +365,6 @@ static void lower_perm_node(ir_node *irn, void *walk_env) {
 
        real_size = n - get_n_checked_pairs(pairs, n);
 
-       be_do_stat_perm(reg_class->name, reg_class->n_regs, irn, block, n, real_size);
-
        /* check for cycles and chains */
        while (get_n_checked_pairs(pairs, n) < n) {
                i = n_ops = 0;
@@ -495,8 +494,6 @@ static void lower_perm_node(ir_node *irn, void *walk_env) {
                        }
                }
 
-               be_do_stat_permcycle(reg_class->name, irn, block, cycle->type == PERM_CHAIN, cycle->n_elems, n_ops);
-
                free((void *) cycle->elems);
                free(cycle);
        }
@@ -620,7 +617,8 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different,
  */
 static void assure_different_constraints(ir_node *irn, constraint_env_t *env) {
        const arch_register_req_t *req;
-       const arch_env_t          *arch_env = be_get_birg_arch_env(env->birg);
+       const arch_env_t          *arch_env    = be_get_birg_arch_env(env->birg);
+       ir_node                   *skipped_irn = belower_skip_proj(irn);
 
        req = arch_get_register_req(arch_env, irn, -1);
 
@@ -639,14 +637,14 @@ static void assure_different_constraints(ir_node *irn, constraint_env_t *env) {
                                 * We can safely ignore a should_be_same x must_be_different y
                                 * IFF both inputs are equal!
                                 */
-                               if (get_irn_n(irn, idx_other) == get_irn_n(irn, idx_same)) {
+                               if (get_irn_n(skipped_irn, idx_other) == get_irn_n(skipped_irn, idx_same)) {
                                        return;
                                }
                        }
                }
                for (i = 0; 1U << i <= other; ++i) {
                        if (other & (1U << i)) {
-                               ir_node *different_from = get_irn_n(belower_skip_proj(irn), i);
+                               ir_node *different_from = get_irn_n(skipped_irn, i);
                                gen_assure_different_pattern(irn, different_from, env);
                        }
                }
@@ -800,8 +798,6 @@ void assure_constraints(be_irg_t *birg) {
        ir_node          **nodes;
        FIRM_DBG_REGISTER(firm_dbg_module_t *mod, "firm.be.lower.constr");
 
-       be_assure_dom_front(birg);
-
        DEBUG_ONLY(cenv.dbg = mod;)
        cenv.birg   = birg;
        cenv.op_set = new_pset(cmp_op_copy_assoc, 16);