fix warnings
[libfirm] / ir / be / ia32 / ia32_optimize.c
index 963d9b1..8c7e0ba 100644 (file)
@@ -53,7 +53,6 @@
 #include "ia32_common_transform.h"
 #include "ia32_transform.h"
 #include "ia32_dbg_stat.h"
-#include "ia32_util.h"
 #include "ia32_architecture.h"
 
 DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
@@ -153,7 +152,6 @@ static void peephole_ia32_Cmp(ir_node *const node)
        ir_node                     *op;
        ia32_attr_t           const *attr;
        int                          ins_permuted;
-       int                          cmp_unsigned;
        ir_node                     *test;
        arch_register_t       const *reg;
        ir_edge_t             const *edge;
@@ -178,14 +176,13 @@ static void peephole_ia32_Cmp(ir_node *const node)
        op           = get_irn_n(node, n_ia32_Cmp_left);
        attr         = get_ia32_attr(node);
        ins_permuted = attr->data.ins_permuted;
-       cmp_unsigned = attr->data.cmp_unsigned;
 
        if (is_ia32_Cmp(node)) {
                test = new_bd_ia32_Test(dbgi, block, noreg, noreg, nomem,
-                                       op, op, ins_permuted, cmp_unsigned);
+                                       op, op, ins_permuted);
        } else {
                test = new_bd_ia32_Test8Bit(dbgi, block, noreg, noreg, nomem,
-                                           op, op, ins_permuted, cmp_unsigned);
+                                           op, op, ins_permuted);
        }
        set_ia32_ls_mode(test, get_ia32_ls_mode(node));
 
@@ -223,14 +220,15 @@ static void peephole_ia32_Test(ir_node *node)
                ir_node         *flags_proj;
                ir_mode         *flags_mode;
                ir_node         *schedpoint;
+               ir_node         *op = left;
                const ir_edge_t *edge;
 
                if (get_nodes_block(left) != block)
                        return;
 
-               if (is_Proj(left)) {
-                       pn   = get_Proj_proj(left);
-                       left = get_Proj_pred(left);
+               if (is_Proj(op)) {
+                       pn = get_Proj_proj(op);
+                       op = get_Proj_pred(op);
                }
 
                /* walk schedule up and abort when we find left or some other node
@@ -238,7 +236,7 @@ static void peephole_ia32_Test(ir_node *node)
                schedpoint = node;
                for (;;) {
                        schedpoint = sched_prev(schedpoint);
-                       if (schedpoint == left)
+                       if (schedpoint == op)
                                break;
                        if (arch_irn_is(schedpoint, modify_flags))
                                return;
@@ -248,29 +246,29 @@ static void peephole_ia32_Test(ir_node *node)
 
                /* make sure only Lg/Eq tests are used */
                foreach_out_edge(node, edge) {
-                       ir_node *user = get_edge_src_irn(edge);
-                       int      pnc  = get_ia32_condcode(user);
+                       ir_node              *user = get_edge_src_irn(edge);
+                       ia32_condition_code_t cc  = get_ia32_condcode(user);
 
-                       if (pnc != pn_Cmp_Eq && pnc != pn_Cmp_Lg) {
+                       if (cc != ia32_cc_equal && cc != ia32_cc_not_equal) {
                                return;
                        }
                }
 
-               switch (produces_test_flag(left, pn)) {
+               switch (produces_test_flag(op, pn)) {
                        case produces_flag_zero:
                                break;
 
                        case produces_flag_carry:
                                foreach_out_edge(node, edge) {
-                                       ir_node *user = get_edge_src_irn(edge);
-                                       int      pnc  = get_ia32_condcode(user);
+                                       ir_node              *user = get_edge_src_irn(edge);
+                                       ia32_condition_code_t cc   = get_ia32_condcode(user);
 
-                                       switch (pnc) {
-                                               case pn_Cmp_Eq: pnc = ia32_pn_Cmp_not_carry; break;
-                                               case pn_Cmp_Lg: pnc = ia32_pn_Cmp_carry;     break;
-                                               default: panic("unexpected pn");
+                                       switch (cc) {
+                                       case ia32_cc_equal:     cc = ia32_cc_above_equal; break; /* CF = 0 */
+                                       case ia32_cc_not_equal: cc = ia32_cc_below;       break; /* CF = 1 */
+                                       default: panic("unexpected pn");
                                        }
-                                       set_ia32_condcode(user, pnc);
+                                       set_ia32_condcode(user, cc);
                                }
                                break;
 
@@ -278,21 +276,24 @@ static void peephole_ia32_Test(ir_node *node)
                                return;
                }
 
-               if (get_irn_mode(left) != mode_T) {
-                       set_irn_mode(left, mode_T);
+               if (get_irn_mode(op) != mode_T) {
+                       set_irn_mode(op, mode_T);
 
                        /* If there are other users, reroute them to result proj */
-                       if (get_irn_n_edges(left) != 2) {
-                               ir_node *res = new_r_Proj(left, mode_Iu, pn_ia32_res);
+                       if (get_irn_n_edges(op) != 2) {
+                               ir_node *res = new_r_Proj(op, mode_Iu, pn_ia32_res);
 
-                               edges_reroute(left, res, current_ir_graph);
+                               edges_reroute(op, res);
                                /* Reattach the result proj to left */
-                               set_Proj_pred(res, left);
+                               set_Proj_pred(res, op);
                        }
+               } else {
+                       if (get_irn_n_edges(left) == 2)
+                               kill_node(left);
                }
 
                flags_mode = ia32_reg_classes[CLASS_ia32_flags].mode;
-               flags_proj = new_r_Proj(left, flags_mode, pn_ia32_flags);
+               flags_proj = new_r_Proj(op, flags_mode, pn_ia32_flags);
                arch_set_irn_register(flags_proj, &ia32_registers[REG_EFLAGS]);
 
                assert(get_irn_mode(node) != mode_T);
@@ -368,7 +369,6 @@ static void peephole_ia32_Return(ir_node *node)
                        continue;
                case iro_Start:
                case beo_Start:
-               case beo_Barrier:
                        /* ignore no code generated */
                        continue;
                case beo_IncSP:
@@ -544,7 +544,7 @@ static ir_node *create_push(dbg_info *dbgi, ir_node *block,
        ir_node *val   = ia32_new_NoReg_gp(cg);
        ir_node *noreg = ia32_new_NoReg_gp(cg);
        ir_graph *irg  = get_irn_irg(block);
-       ir_node *nomem = new_r_NoMem(irg);
+       ir_node *nomem = get_irg_no_mem(irg);
        ir_node *push  = new_bd_ia32_Push(dbgi, block, noreg, noreg, nomem, val, stack);
        sched_add_before(schedpoint, push);
 
@@ -581,8 +581,8 @@ static void peephole_store_incsp(ir_node *store)
        /* we have to be at offset 0 */
        int my_offset = get_ia32_am_offs_int(store);
        if (my_offset != 0) {
-               /* TODO here: find out wether there is a store with offset 0 before
-                * us and wether we can move it down to our place */
+               /* TODO here: find out whether there is a store with offset 0 before
+                * us and whether we can move it down to our place */
                return;
        }
        ir_mode *ls_mode = get_ia32_ls_mode(store);
@@ -858,7 +858,7 @@ static ir_node *create_pop(dbg_info *dbgi, ir_node *block,
        ir_node *val;
        ir_node *in[1];
 
-       pop   = new_bd_ia32_Pop(dbgi, block, new_r_NoMem(irg), stack);
+       pop   = new_bd_ia32_Pop(dbgi, block, get_irg_no_mem(irg), stack);
 
        stack = new_r_Proj(pop, mode_Iu, pn_ia32_Pop_stack);
        arch_set_irn_register(stack, esp);
@@ -1155,7 +1155,7 @@ make_add:
        block = get_nodes_block(node);
        irg   = get_irn_irg(node);
        noreg = ia32_new_NoReg_gp(irg);
-       nomem = new_r_NoMem(irg);
+       nomem = get_irg_no_mem(irg);
        res   = new_bd_ia32_Add(dbgi, block, noreg, noreg, nomem, op1, op2);
        arch_set_irn_register(res, out_reg);
        set_ia32_commutative(res);
@@ -1166,7 +1166,7 @@ make_shl:
        block = get_nodes_block(node);
        irg   = get_irn_irg(node);
        noreg = ia32_new_NoReg_gp(irg);
-       nomem = new_r_NoMem(irg);
+       nomem = get_irg_no_mem(irg);
        res   = new_bd_ia32_Shl(dbgi, block, op1, op2);
        arch_set_irn_register(res, out_reg);
        goto exchange;
@@ -1274,7 +1274,7 @@ void ia32_peephole_optimization(ir_graph *irg)
 
 /**
  * Removes node from schedule if it is not used anymore. If irn is a mode_T node
- * all it's Projs are removed as well.
+ * all its Projs are removed as well.
  * @param irn  The irn to be removed from schedule
  */
 static inline void try_kill(ir_node *node)