fix bad input register requirements
[libfirm] / ir / be / arm / arm_transform.c
index 677118d..e231cc9 100644 (file)
@@ -738,7 +738,7 @@ static ir_node *make_shift(ir_node *node, match_flags_t flags,
        ir_node  *new_op2;
 
        if (get_mode_modulo_shift(mode) != 32)
-               panic("modulo shift!=32 not supported by arm backend");
+               panic("modulo shift!=32 not supported");
 
        if (flags & MATCH_SIZE_NEUTRAL) {
                op1 = arm_skip_downconv(op1);
@@ -942,7 +942,7 @@ static ir_node *gen_Load(ir_node *node)
        ir_node  *new_load = NULL;
 
        if (get_Load_unaligned(node) == align_non_aligned)
-               panic("arm: unaligned Loads not supported yet");
+               panic("unaligned Loads not supported yet");
 
        if (mode_is_float(mode)) {
                if (USE_FPA(isa)) {
@@ -984,7 +984,7 @@ static ir_node *gen_Store(ir_node *node)
        ir_node *new_store = NULL;
 
        if (get_Store_unaligned(node) == align_non_aligned)
-               panic("arm: unaligned Stores not supported yet");
+               panic("unaligned Stores not supported yet");
 
        if (mode_is_float(mode)) {
                if (USE_FPA(isa)) {
@@ -1293,7 +1293,7 @@ static ir_node *gen_Builtin(ir_node *node)
        case ir_bk_inner_trampoline:
                break;
        }
-       panic("Builtin %s not implemented in ARM", get_builtin_kind_name(kind));
+       panic("Builtin %s not implemented", get_builtin_kind_name(kind));
 }
 
 /**
@@ -1326,7 +1326,7 @@ static ir_node *gen_Proj_Builtin(ir_node *proj)
        case ir_bk_inner_trampoline:
                break;
        }
-       panic("Builtin %s not implemented in ARM", get_builtin_kind_name(kind));
+       panic("Builtin %s not implemented", get_builtin_kind_name(kind));
 }
 
 static ir_node *gen_Proj_Load(ir_node *node)
@@ -1398,16 +1398,6 @@ static ir_node *gen_Proj_Div(ir_node *node)
        panic("Unsupported Proj from Div");
 }
 
-/**
- * Transform the Projs from a Cmp.
- */
-static ir_node *gen_Proj_Cmp(ir_node *node)
-{
-       (void) node;
-       /* we should only be here in case of a Mux node */
-       panic("Mux NYI");
-}
-
 static ir_node *gen_Proj_Start(ir_node *node)
 {
        ir_node *block     = get_nodes_block(node);
@@ -1580,8 +1570,6 @@ static ir_node *gen_Proj(ir_node *node)
                return gen_Proj_CopyB(node);
        case iro_Div:
                return gen_Proj_Div(node);
-       case iro_Cmp:
-               return gen_Proj_Cmp(node);
        case iro_Start:
                return gen_Proj_Start(node);
        case iro_Cond:
@@ -2003,18 +1991,10 @@ static ir_node *gen_Sel(ir_node *node)
        return new_bd_arm_FrameAddr(dbgi, new_block, new_ptr, entity, 0);
 }
 
-/**
- * Change some phi modes
- */
 static ir_node *gen_Phi(ir_node *node)
 {
+       ir_mode                   *mode = get_irn_mode(node);
        const arch_register_req_t *req;
-       ir_node  *block = be_transform_node(get_nodes_block(node));
-       ir_graph *irg   = current_ir_graph;
-       dbg_info *dbgi  = get_irn_dbg_info(node);
-       ir_mode  *mode  = get_irn_mode(node);
-       ir_node  *phi;
-
        if (mode_needs_gp_reg(mode)) {
                /* we shouldn't have any 64bit stuff around anymore */
                assert(get_mode_size_bits(mode) <= 32);
@@ -2025,21 +2005,9 @@ static ir_node *gen_Phi(ir_node *node)
                req = arch_no_register_req;
        }
 
-       /* phi nodes allow loops, so we use the old arguments for now
-        * and fix this later */
-       phi = new_ir_node(dbgi, irg, block, op_Phi, mode, get_irn_arity(node),
-                         get_irn_in(node) + 1);
-       copy_node_attr(irg, node, phi);
-       be_duplicate_deps(node, phi);
-
-       arch_set_irn_register_req_out(phi, 0, req);
-
-       be_enqueue_preds(node);
-
-       return phi;
+       return be_transform_phi(node, req);
 }
 
-
 /**
  * Enters all transform functions into the generic pointer
  */