Remove the unused parameter const arch_env_t *env from arch_irn_get_flags(), arch_irn...
[libfirm] / ir / be / arm / arm_transform.c
index 2be1c7b..0921fd0 100644 (file)
@@ -89,8 +89,7 @@ static ir_node *create_mov_node(dbg_info *dbg, ir_node *block, long value) {
        if (mode_needs_gp_reg(mode))
                mode = mode_Iu;
        res = new_rd_arm_Mov_i(dbg, irg, block, mode, value);
-       /* ensure the const is scheduled AFTER the stack frame */
-       add_irn_dep(res, get_irg_frame(irg));
+       be_dep_on_frame(res);
        return res;
 }
 
@@ -105,8 +104,7 @@ static ir_node *create_mvn_node(dbg_info *dbg, ir_node *block, long value) {
        if (mode_needs_gp_reg(mode))
                mode = mode_Iu;
        res = new_rd_arm_Mvn_i(dbg, irg, block, mode, value);
-       /* ensure the const is scheduled AFTER the stack frame */
-       add_irn_dep(res, get_irg_frame(irg));
+       be_dep_on_frame(res);
        return res;
 }
 
@@ -224,11 +222,11 @@ static ir_node *gen_Conv(ir_node *node) {
                        }
                }
                else if (USE_VFP(env_cg->isa)) {
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                        return NULL;
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                        return NULL;
                }
        }
@@ -264,7 +262,7 @@ static ir_node *gen_Conv(ir_node *node) {
                                return gen_zero_extension(dbg, block, new_op, min_bits);
                        }
                } else {
-                       panic("Cannot handle Conv %+F->%+F with %d->%d bits\n", src_mode, dst_mode,
+                       panic("Cannot handle Conv %+F->%+F with %d->%d bits", src_mode, dst_mode,
                                src_bits, dst_bits);
                        return NULL;
                }
@@ -317,11 +315,11 @@ static ir_node *gen_Add(ir_node *node) {
                        return new_rd_arm_fpaAdf(dbg, irg, block, new_op1, new_op2, mode);
                } else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                        return NULL;
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                        return NULL;
                }
        } else {
@@ -393,11 +391,11 @@ static ir_node *gen_Mul(ir_node *node) {
                }
                else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                        return NULL;
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                        return NULL;
                }
        }
@@ -432,10 +430,10 @@ static ir_node *gen_Quot(ir_node *node) {
                return new_rd_arm_fpaDvf(dbg, current_ir_graph, block, new_op1, new_op2, mode);
        } else if (USE_VFP(env_cg->isa)) {
                assert(mode != mode_E && "IEEE Extended FP not supported");
-               panic("VFP not supported yet\n");
+               panic("VFP not supported yet");
        }
        else {
-               panic("Softfloat not supported yet\n");
+               panic("Softfloat not supported yet");
                return NULL;
        }
 }
@@ -526,11 +524,11 @@ static ir_node *gen_Sub(ir_node *node) {
                        return new_rd_arm_fpaSuf(dbg, irg, block, new_op1, new_op2, mode);
                } else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                        return NULL;
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                        return NULL;
                }
        }
@@ -759,10 +757,10 @@ static ir_node *gen_Abs(ir_node *node) {
                        return new_rd_arm_fpaAbs(dbg, current_ir_graph, block, new_op, mode);
                else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                }
        }
        assert(mode_is_data(mode));
@@ -788,10 +786,10 @@ static ir_node *gen_Minus(ir_node *node) {
                        return new_rd_arm_fpaMvf(dbg, current_ir_graph, block, op, mode);
                else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                }
        }
        assert(mode_is_data(mode));
@@ -821,10 +819,10 @@ static ir_node *gen_Load(ir_node *node) {
                        new_load = new_rd_arm_fpaLdf(dbg, irg, block, new_ptr, new_mem, mode);
                else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                }
        }
        else {
@@ -843,7 +841,7 @@ static ir_node *gen_Load(ir_node *node) {
                                new_load = new_rd_arm_Load(dbg, irg, block, new_ptr, new_mem);
                                break;
                        default:
-                               panic("mode size not supported\n");
+                               panic("mode size not supported");
                        }
                } else {
                        /* zero extended loads */
@@ -858,7 +856,7 @@ static ir_node *gen_Load(ir_node *node) {
                                new_load = new_rd_arm_Load(dbg, irg, block, new_ptr, new_mem);
                                break;
                        default:
-                               panic("mode size not supported\n");
+                               panic("mode size not supported");
                        }
                }
        }
@@ -868,7 +866,7 @@ static ir_node *gen_Load(ir_node *node) {
        if (be_get_Proj_for_pn(node, pn_Load_res) == NULL) {
                /* add a result proj and a Keep to produce a pseudo use */
                ir_node *proj = new_r_Proj(irg, block, new_load, mode_Iu, pn_arm_Load_res);
-               be_new_Keep(arch_get_irn_reg_class(env_cg->arch_env, proj, -1), irg, block, 1, &proj);
+               be_new_Keep(arch_get_irn_reg_class(proj, -1), irg, block, 1, &proj);
        }
 
        return new_load;
@@ -898,9 +896,9 @@ static ir_node *gen_Store(ir_node *node) {
                        new_store = new_rd_arm_fpaStf(dbg, irg, block, new_ptr, new_val, new_mem, mode);
                else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                } else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                }
        } else {
                assert(mode_is_data(mode) && "unsupported mode for Store");
@@ -935,9 +933,9 @@ static ir_node *gen_Cond(ir_node *node) {
                ir_node *op1      = get_Cmp_left(cmp_node);
                ir_node *new_op1  = be_transform_node(op1);
                ir_node *op2      = get_Cmp_right(cmp_node);
-               ir_node *new_op2  = be_transform_node(op2);
 
                if (mode_is_float(get_irn_mode(op1))) {
+                       ir_node *new_op2  = be_transform_node(op2);
                        /* floating point compare */
                        pn_Cmp pnc = get_Proj_proj(selector);
 
@@ -947,8 +945,12 @@ static ir_node *gen_Cond(ir_node *node) {
                        }
                        /* Hmm: use need cmfe */
                        return new_rd_arm_fpaCmfeBra(dbg, irg, block, new_op1, new_op2, pnc);
+               } else if (is_Const(op2) && tarval_is_null(get_Const_tarval(op2))) {
+                       /* compare with 0 */
+                       return new_rd_arm_TstBra(dbg, irg, block, new_op1, new_op1, get_Proj_proj(selector));
                } else {
                        /* integer compare */
+                       ir_node *new_op2  = be_transform_node(op2);
                        return new_rd_arm_CmpBra(dbg, irg, block, new_op1, new_op2, get_Proj_proj(selector));
                }
        } else {
@@ -1073,16 +1075,15 @@ static ir_node *gen_Const(ir_node *node) {
                        } else {
                                node = new_rd_arm_fpaConst(dbg, irg, block, tv);
                        }
-                       /* ensure the const is scheduled AFTER the stack frame */
-                       add_irn_dep(node, get_irg_frame(irg));
+                       be_dep_on_frame(node);
                        return node;
                }
                else if (USE_VFP(env_cg->isa)) {
                        assert(mode != mode_E && "IEEE Extended FP not supported");
-                       panic("VFP not supported yet\n");
+                       panic("VFP not supported yet");
                }
                else {
-                       panic("Softfloat not supported yet\n");
+                       panic("Softfloat not supported yet");
                }
        }
        return create_const_graph(node, block);
@@ -1101,8 +1102,7 @@ static ir_node *gen_SymConst(ir_node *node) {
        ir_node  *res;
 
        res = new_rd_arm_SymConst(dbg, irg, block, mode, get_sc_ident(node));
-       /* ensure the const is scheduled AFTER the stack frame */
-       add_irn_dep(res, get_irg_frame(irg));
+       be_dep_on_frame(res);
        return res;
 }
 
@@ -1319,8 +1319,7 @@ static ir_node *gen_Proj_Load(ir_node *node) {
        default:
                break;
        }
-       assert(0);
-       return new_rd_Unknown(irg, get_irn_mode(node));
+       panic("Unsupported Proj from Load");
 }
 
 /**
@@ -1332,7 +1331,6 @@ static ir_node *gen_Proj_CopyB(ir_node *node) {
        ir_node  *new_pred = be_transform_node(pred);
        ir_graph *irg      = current_ir_graph;
        dbg_info *dbgi     = get_irn_dbg_info(node);
-       ir_mode  *mode     = get_irn_mode(node);
        long     proj      = get_Proj_proj(node);
 
        switch(proj) {
@@ -1344,8 +1342,7 @@ static ir_node *gen_Proj_CopyB(ir_node *node) {
        default:
                break;
        }
-       assert(0);
-       return new_rd_Unknown(irg, mode);
+       panic("Unsupported Proj from CopyB");
 }
 
 /**
@@ -1386,8 +1383,7 @@ static ir_node *gen_Proj_Quot(ir_node *node) {
        default:
                break;
        }
-       assert(0);
-       return new_rd_Unknown(irg, mode);
+       panic("Unsupported Proj from Quot");
 }
 
 /**
@@ -1404,7 +1400,7 @@ static ir_node *gen_Proj_be_AddSP(ir_node *node) {
        if (proj == pn_be_AddSP_sp) {
                ir_node *res = new_rd_Proj(dbgi, irg, block, new_pred, mode_Iu,
                                           pn_arm_SubSPandCopy_stack);
-               arch_set_irn_register(env_cg->arch_env, res, &arm_gp_regs[REG_SP]);
+               arch_set_irn_register(res, &arm_gp_regs[REG_SP]);
                return res;
        } else if(proj == pn_be_AddSP_res) {
                return new_rd_Proj(dbgi, irg, block, new_pred, mode_Iu,
@@ -1412,9 +1408,7 @@ static ir_node *gen_Proj_be_AddSP(ir_node *node) {
        } else if (proj == pn_be_AddSP_M) {
                return new_rd_Proj(dbgi, irg, block, new_pred, mode_M, pn_arm_SubSPandCopy_M);
        }
-
-       assert(0);
-       return new_rd_Unknown(irg, get_irn_mode(node));
+       panic("Unsupported Proj from AddSP");
 }
 
 /**
@@ -1431,14 +1425,12 @@ static ir_node *gen_Proj_be_SubSP(ir_node *node) {
        if (proj == pn_be_SubSP_sp) {
                ir_node *res = new_rd_Proj(dbgi, irg, block, new_pred, mode_Iu,
                                           pn_arm_AddSP_stack);
-               arch_set_irn_register(env_cg->arch_env, res, &arm_gp_regs[REG_SP]);
+               arch_set_irn_register(res, &arm_gp_regs[REG_SP]);
                return res;
        } else if (proj == pn_be_SubSP_M) {
                return new_rd_Proj(dbgi, irg, block, new_pred, mode_M, pn_arm_AddSP_M);
        }
-
-       assert(0);
-       return new_rd_Unknown(irg, get_irn_mode(node));
+       panic("Unsupported Proj from SubSP");
 }
 
 /**
@@ -1446,7 +1438,7 @@ static ir_node *gen_Proj_be_SubSP(ir_node *node) {
  */
 static ir_node *gen_Proj_Cmp(ir_node *node) {
        (void) node;
-       panic("Psi NYI\n");
+       panic("Mux NYI");
 }
 
 
@@ -1474,8 +1466,7 @@ static ir_node *gen_Proj(ir_node *node) {
                if (proj == pn_Store_M) {
                        return be_transform_node(pred);
                } else {
-                       assert(0);
-                       return new_r_Bad(irg);
+                       panic("Unsupported Proj from Store");
                }
        } else if (is_Load(pred)) {
                return gen_Proj_Load(node);
@@ -1489,7 +1480,7 @@ static ir_node *gen_Proj(ir_node *node) {
                return gen_Proj_be_AddSP(node);
        } else if (is_Cmp(pred)) {
                return gen_Proj_Cmp(node);
-       } else if (get_irn_op(pred) == op_Start) {
+       } else if (is_Start(pred)) {
                if (proj == pn_Start_X_initial_exec) {
                        ir_node *block = get_nodes_block(pred);
                        ir_node *jump;
@@ -1532,7 +1523,7 @@ static INLINE ir_node *create_const(ir_node **place,
 
        block = get_irg_start_block(env_cg->irg);
        res = func(NULL, env_cg->irg, block);
-       arch_set_irn_register(env_cg->arch_env, res, reg);
+       arch_set_irn_register(res, reg);
        *place = res;
 
        add_irn_dep(get_irg_end(env_cg->irg), res);
@@ -1595,7 +1586,6 @@ static ir_node *gen_Phi(ir_node *node) {
        copy_node_attr(node, phi);
        be_duplicate_deps(node, phi);
 
-       be_set_transformed_node(node, phi);
        be_enqueue_preds(node);
 
        return phi;
@@ -1615,7 +1605,7 @@ static ir_node *gen_Phi(ir_node *node) {
  * the BAD transformer.
  */
 static ir_node *bad_transform(ir_node *irn) {
-       panic("ARM backend: Not implemented: %+F\n", irn);
+       panic("ARM backend: Not implemented: %+F", irn);
        return irn;
 }
 
@@ -1668,8 +1658,7 @@ static void arm_register_transformers(void) {
 
        BAD(ASM);       /* unsupported yet */
        GEN(CopyB);
-       BAD(Mux);
-       BAD(Psi);       /* unsupported yet */
+       BAD(Mux);       /* unsupported yet */
        GEN(Proj);
        GEN(Phi);
 
@@ -1719,8 +1708,9 @@ static void arm_register_transformers(void) {
 /**
  * Pre-transform all unknown nodes.
  */
-static void arm_pretransform_node(void *arch_cg) {
-       arm_code_gen_t *cg = arch_cg;
+static void arm_pretransform_node(void)
+{
+       arm_code_gen_t *cg = env_cg;
 
        cg->unknown_gp  = be_pre_transform_node(cg->unknown_gp);
        cg->unknown_fpa = be_pre_transform_node(cg->unknown_fpa);
@@ -1771,7 +1761,7 @@ void arm_transform_graph(arm_code_gen_t *cg) {
        }
        arm_register_transformers();
        env_cg = cg;
-       be_transform_graph(cg->birg, arm_pretransform_node, cg);
+       be_transform_graph(cg->birg, arm_pretransform_node);
 }
 
 void arm_init_transform(void) {