X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbearch.c;h=e64ca431c2a0bdbc98953996a1efc9f877da0b78;hb=939b0af78227f2d14a4362a1b5518fd9e05b1053;hp=ec4aee0189b0856be3f0859b2d6fb113aebe6d87;hpb=1a26f4853c07d1ecd68a097409dd602edfe29eff;p=libfirm diff --git a/ir/be/bearch.c b/ir/be/bearch.c index ec4aee018..e64ca431c 100644 --- a/ir/be/bearch.c +++ b/ir/be/bearch.c @@ -72,16 +72,16 @@ static inline const arch_irn_ops_t *get_irn_ops(const ir_node *irn) const arch_register_req_t *arch_get_register_req(const ir_node *irn, int pos) { if (is_Proj(irn)) { + ir_node *pred = get_Proj_pred(irn); + long pn = get_Proj_proj(irn); assert(pos == -1); - pos = -1-get_Proj_proj(irn); - irn = get_Proj_pred(irn); + return arch_get_out_register_req(pred, pn); } if (pos < 0) { return arch_get_out_register_req(irn, -pos-1); } else { - const arch_irn_ops_t *ops = get_irn_ops_simple(irn); - return ops->get_irn_reg_req_in(irn, pos); + return arch_get_in_register_req(irn, pos); } } @@ -97,12 +97,6 @@ ir_entity *arch_get_frame_entity(const ir_node *irn) return ops->get_frame_entity(irn); } -void arch_set_frame_entity(ir_node *irn, ir_entity *ent) -{ - const arch_irn_ops_t *ops = get_irn_ops(irn); - ops->set_frame_entity(irn, ent); -} - int arch_get_sp_bias(ir_node *irn) { const arch_irn_ops_t *ops = get_irn_ops(irn); @@ -153,16 +147,6 @@ int arch_get_op_estimated_cost(const ir_node *irn) } } -void arch_put_non_ignore_regs(const arch_register_class_t *cls, bitset_t *bs) -{ - unsigned i; - - for (i = 0; i < cls->n_regs; ++i) { - if (!arch_register_type_is(&cls->regs[i], ignore)) - bitset_set(bs, i); - } -} - int arch_reg_is_allocatable(const ir_node *irn, int pos, const arch_register_t *reg) { @@ -191,7 +175,7 @@ const arch_register_class_t *arch_get_irn_reg_class(const ir_node *irn, int pos) static inline reg_out_info_t *get_out_info(const ir_node *node) { - int pos = 0; + size_t pos = 0; const backend_info_t *info; assert(get_irn_mode(node) != mode_T); @@ -201,7 +185,7 @@ static inline reg_out_info_t *get_out_info(const ir_node *node) } info = be_get_info(node); - assert(pos >= 0 && pos < ARR_LEN(info->out_infos)); + assert(pos < ARR_LEN(info->out_infos)); return &info->out_infos[pos]; } @@ -210,7 +194,7 @@ static inline reg_out_info_t *get_out_info_n(const ir_node *node, int pos) { const backend_info_t *info = be_get_info(node); assert(!is_Proj(node)); - assert(pos >= 0 && pos < ARR_LEN(info->out_infos)); + assert(pos >= 0 && pos < (int)ARR_LEN(info->out_infos)); return &info->out_infos[pos]; } @@ -310,6 +294,12 @@ void arch_dump_register_req(FILE *F, const arch_register_req_t *req, } } + if (req->width != 1) { + fprintf(F, " width:%u", req->width); + } + if (arch_register_req_is(req, aligned)) { + fprintf(F, " aligned"); + } if (arch_register_req_is(req, ignore)) { fprintf(F, " ignore"); } @@ -358,6 +348,12 @@ void arch_dump_reqs_and_registers(FILE *F, const ir_node *node) if (flags & arch_irn_flags_modify_flags) { fprintf(F, " modify_flags"); } + if (flags & arch_irn_flags_simple_jump) { + fprintf(F, " simple_jump"); + } + if (flags & arch_irn_flags_not_scheduled) { + fprintf(F, " not_scheduled"); + } } fprintf(F, " (%d)\n", flags); } @@ -367,6 +363,7 @@ static const arch_register_req_t no_requirement = { NULL, NULL, 0, + 0, 0 }; const arch_register_req_t *arch_no_register_req = &no_requirement;