ia32: improve Test peephole optimisation
[libfirm] / ir / be / becopyopt.c
index e9e0e9c..f4e5f23 100644 (file)
@@ -43,8 +43,9 @@
 #include "irloop_t.h"
 #include "iredges_t.h"
 #include "irbitset.h"
-#include "irphase_t.h"
 #include "irprintf_t.h"
+#include "irtools.h"
+#include "util.h"
 
 #include "bemodule.h"
 #include "bearch.h"
@@ -75,7 +76,7 @@
 
 static unsigned   dump_flags  = 0;
 static unsigned   style_flags = 0;
-static unsigned   do_stats    = 0;
+static int        do_stats    = 0;
 static cost_fct_t cost_func   = co_get_costs_exec_freq;
 static int        improve     = 1;
 
@@ -136,7 +137,7 @@ void be_register_copyopt(const char *name, co_algo_info *copyopt)
        be_add_module_to_list(&copyopts, name, copyopt);
 }
 
-BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyopt);
+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copyopt)
 void be_init_copyopt(void)
 {
        lc_opt_entry_t *be_grp = lc_opt_get_grp(firm_opt_get_root(), "be");
@@ -155,7 +156,7 @@ static int void_algo(copy_opt_t *co)
        return 0;
 }
 
-BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copynone);
+BE_REGISTER_MODULE_CONSTRUCTOR(be_init_copynone)
 void be_init_copynone(void)
 {
        static co_algo_info copyheur = {
@@ -235,7 +236,7 @@ static int co_is_optimizable_root(ir_node *irn)
        if (is_Reg_Phi(irn) || is_Perm_Proj(irn))
                return 1;
 
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (is_2addr_code(req))
                return 1;
 
@@ -395,7 +396,7 @@ static void co_collect_units(ir_node *irn, void *env)
 
        if (get_irn_mode(irn) == mode_T)
                return;
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (req->cls != co->cls)
                return;
        if (!co_is_optimizable_root(irn))
@@ -422,7 +423,7 @@ static void co_collect_units(ir_node *irn, void *env)
                        int o, arg_pos;
                        ir_node *arg = get_irn_n(irn, i);
 
-                       assert(arch_get_irn_reg_class_out(arg) == co->cls && "Argument not in same register class.");
+                       assert(arch_get_irn_reg_class(arg) == co->cls && "Argument not in same register class.");
                        if (arg == irn)
                                continue;
                        if (nodes_interfere(co->cenv, irn, arg)) {
@@ -544,7 +545,7 @@ static int compare_ous(const void *k1, const void *k2)
        /* Units with constraints come first */
        u1_has_constr = 0;
        for (i=0; i<u1->node_count; ++i) {
-               arch_get_register_req_out(&req, u1->nodes[i]);
+               arch_get_irn_register_req(&req, u1->nodes[i]);
                if (arch_register_req_is(&req, limited)) {
                        u1_has_constr = 1;
                        break;
@@ -553,7 +554,7 @@ static int compare_ous(const void *k1, const void *k2)
 
        u2_has_constr = 0;
        for (i=0; i<u2->node_count; ++i) {
-               arch_get_register_req_out(&req, u2->nodes[i]);
+               arch_get_irn_register_req(&req, u2->nodes[i]);
                if (arch_register_req_is(&req, limited)) {
                        u2_has_constr = 1;
                        break;
@@ -803,7 +804,7 @@ static void build_graph_walker(ir_node *irn, void *env)
 
        if (get_irn_mode(irn) == mode_T)
                return;
-       req = arch_get_register_req_out(irn);
+       req = arch_get_irn_register_req(irn);
        if (req->cls != co->cls || arch_irn_is_ignore(irn))
                return;
 
@@ -872,7 +873,7 @@ static int co_dump_appel_disjoint_constraints(const copy_opt_t *co, ir_node *a,
        constr[1] = bitset_alloca(co->cls->n_regs);
 
        for (j = 0; j < 2; ++j) {
-               const arch_register_req_t *req = arch_get_register_req_out(nodes[j]);
+               const arch_register_req_t *req = arch_get_irn_register_req(nodes[j]);
                if (arch_register_req_is(req, limited))
                        rbitset_copy_to_bitset(req->limited, constr[j]);
                else
@@ -925,7 +926,7 @@ void co_dump_appel_graph(const copy_opt_t *co, FILE *f)
                if (!arch_irn_is_ignore(irn)) {
                        int idx                        = node_map[get_irn_idx(irn)];
                        affinity_node_t           *a   = get_affinity_info(co, irn);
-                       const arch_register_req_t *req = arch_get_register_req_out(irn);
+                       const arch_register_req_t *req = arch_get_irn_register_req(irn);
                        ir_node                   *adj;
 
                        if (arch_register_req_is(req, limited)) {
@@ -1030,7 +1031,7 @@ static void ifg_dump_node_attr(FILE *f, void *self, ir_node *irn)
 {
        co_ifg_dump_t             *env     = (co_ifg_dump_t*)self;
        const arch_register_t     *reg     = arch_get_irn_register(irn);
-       const arch_register_req_t *req     = arch_get_register_req_out(irn);
+       const arch_register_req_t *req     = arch_get_irn_register_req(irn);
        int                        limited = arch_register_req_is(req, limited);
 
        if (env->flags & CO_IFG_DUMP_LABELS) {
@@ -1210,16 +1211,16 @@ void co_driver(be_chordal_env_t *cenv)
        co_complete_stats(co, &after);
 
        if (do_stats) {
-               ulong64 optimizable_costs = after.max_costs - after.inevit_costs;
-               ulong64 evitable          = after.costs     - after.inevit_costs;
+               unsigned long long optimizable_costs = after.max_costs - after.inevit_costs;
+               unsigned long long evitable          = after.costs     - after.inevit_costs;
 
                ir_printf("%30F ", cenv->irg);
-               printf("%10s %10" ULL_FMT "%10" ULL_FMT "%10" ULL_FMT, cenv->cls->name, after.max_costs, before.costs, after.inevit_costs);
+               printf("%10s %10llu%10llu%10llu", cenv->cls->name, after.max_costs, before.costs, after.inevit_costs);
 
                if (optimizable_costs > 0)
-                       printf("%10" ULL_FMT " %5.2f\n", after.costs, (evitable * 100.0) / optimizable_costs);
+                       printf("%10llu %5.2f\n", after.costs, (evitable * 100.0) / optimizable_costs);
                else
-                       printf("%10" ULL_FMT " %5s\n", after.costs, "-");
+                       printf("%10llu %5s\n", after.costs, "-");
        }
 
        /* Dump the interference graph in Appel's format. */