keeps behind a series of phis are fine
[libfirm] / ir / be / betranshlp.c
index 9a72354..07e4991 100644 (file)
@@ -68,7 +68,7 @@ int be_is_transformed(const ir_node *node)
 static inline ir_node *be_get_transformed_node(ir_node *old_node)
 {
        if (irn_visited(old_node)) {
-               ir_node *new_node = get_irn_link(old_node);
+               ir_node *new_node = (ir_node*)get_irn_link(old_node);
                assert(new_node != NULL);
                return new_node;
        }
@@ -211,7 +211,7 @@ static void fix_loops(ir_node *node)
        changed = 0;
        if (! is_Block(node)) {
                ir_node *block     = get_nodes_block(node);
-               ir_node *new_block = get_irn_link(block);
+               ir_node *new_block = (ir_node*)get_irn_link(block);
 
                if (new_block != NULL) {
                        set_nodes_block(node, new_block);
@@ -225,7 +225,7 @@ static void fix_loops(ir_node *node)
        arity = get_irn_arity(node);
        for (i = 0; i < arity; ++i) {
                ir_node *in = get_irn_n(node, i);
-               ir_node *nw = get_irn_link(in);
+               ir_node *nw = (ir_node*)get_irn_link(in);
 
                if (nw != NULL && nw != in) {
                        set_irn_n(node, i, nw);
@@ -244,7 +244,7 @@ static void fix_loops(ir_node *node)
        arity = get_irn_deps(node);
        for (i = 0; i < arity; ++i) {
                ir_node *in = get_irn_dep(node, i);
-               ir_node *nw = get_irn_link(in);
+               ir_node *nw = (ir_node*)get_irn_link(in);
 
                if (nw != NULL && nw != in) {
                        set_irn_dep(node, i, nw);
@@ -292,7 +292,7 @@ static ir_node *new_be_Anchor(ir_graph *irg)
 
        /* Hack: some places in the code ask the Anchor for its register
           requirements */
-       new_anchor = new_Anchor(irg);
+       new_anchor = new_r_Anchor(irg);
        info = be_get_info(new_anchor);
        info->out_infos = NEW_ARR_D(reg_out_info_t, obst, 1);
        memset(info->out_infos, 0, 1 * sizeof(info->out_infos[0]));
@@ -345,7 +345,7 @@ static void transform_nodes(ir_graph *irg, arch_pretrans_nodes *pre_transform)
 
        /* process worklist (this should transform all nodes in the graph) */
        while (! waitq_empty(env.worklist)) {
-               ir_node *node = waitq_get(env.worklist);
+               ir_node *node = (ir_node*)waitq_get(env.worklist);
                be_transform_node(node);
        }
 
@@ -357,7 +357,7 @@ static void transform_nodes(ir_graph *irg, arch_pretrans_nodes *pre_transform)
                if (anchor == NULL)
                        continue;
 
-               anchor = get_irn_link(anchor);
+               anchor = (ir_node*)get_irn_link(anchor);
                fix_loops(anchor);
                set_irn_n(new_anchor, i, anchor);
        }
@@ -470,16 +470,12 @@ void be_transform_graph(ir_graph *irg, arch_pretrans_nodes *func)
 
 int be_mux_is_abs(ir_node *sel, ir_node *mux_true, ir_node *mux_false)
 {
-       ir_node *cmp_left;
-       ir_node *cmp_right;
-       ir_node *cmp;
-       ir_mode *mode;
-       pn_Cmp   pnc;
+       ir_node    *cmp_left;
+       ir_node    *cmp_right;
+       ir_mode    *mode;
+       ir_relation relation;
 
-       if (!is_Proj(sel))
-               return 0;
-       cmp = get_Proj_pred(sel);
-       if (!is_Cmp(cmp))
+       if (!is_Cmp(sel))
                return 0;
 
        /**
@@ -493,42 +489,31 @@ int be_mux_is_abs(ir_node *sel, ir_node *mux_true, ir_node *mux_false)
                return 0;
 
        /* must be <, <=, >=, > */
-       pnc = get_Proj_proj(sel);
-       switch (pnc) {
-       case pn_Cmp_Ge:
-       case pn_Cmp_Gt:
-       case pn_Cmp_Le:
-       case pn_Cmp_Lt:
-       case pn_Cmp_Uge:
-       case pn_Cmp_Ug:
-       case pn_Cmp_Ul:
-       case pn_Cmp_Ule:
-               break;
-       default:
+       relation = get_Cmp_relation(sel);
+       if ((relation & ir_relation_less_greater) == 0)
                return 0;
-       }
 
-       if (!is_negated_value(mux_true, mux_false))
+       if (!ir_is_negated_value(mux_true, mux_false))
                return 0;
 
        /* must be x cmp 0 */
-       cmp_right = get_Cmp_right(cmp);
+       cmp_right = get_Cmp_right(sel);
        if (!is_Const(cmp_right) || !is_Const_null(cmp_right))
                return 0;
 
-       cmp_left = get_Cmp_left(cmp);
+       cmp_left = get_Cmp_left(sel);
        if (cmp_left == mux_false) {
-               if (pnc & pn_Cmp_Lt) {
+               if (relation & ir_relation_less) {
                        return 1;
                } else {
-                       assert(pnc & pn_Cmp_Gt);
+                       assert(relation & ir_relation_greater);
                        return -1;
                }
        } else if (cmp_left == mux_true) {
-               if (pnc & pn_Cmp_Lt) {
+               if (relation & ir_relation_less) {
                        return -1;
                } else {
-                       assert(pnc & pn_Cmp_Gt);
+                       assert(relation & ir_relation_greater);
                        return 1;
                }
        }
@@ -538,7 +523,6 @@ int be_mux_is_abs(ir_node *sel, ir_node *mux_true, ir_node *mux_false)
 
 ir_node *be_get_abs_op(ir_node *sel)
 {
-       ir_node *cmp      = get_Proj_pred(sel);
-       ir_node *cmp_left = get_Cmp_left(cmp);
+       ir_node *cmp_left = get_Cmp_left(sel);
        return cmp_left;
 }