X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbearch.c;h=89257c4ffcf81cceb7ed31b2490bfb124cd28407;hb=da0e1dafc4933d6cd5339b1e8688453273dfebef;hp=2bcc059453bb312ff8c4f01f894163494cffeb46;hpb=ad04ca468b29491e0e82bf0b11dda4f8114468a2;p=libfirm diff --git a/ir/be/bearch.c b/ir/be/bearch.c index 2bcc05945..89257c4ff 100644 --- a/ir/be/bearch.c +++ b/ir/be/bearch.c @@ -1,20 +1,6 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. - * * This file is part of libFirm. - * - * This file may be distributed and/or modified under the terms of the - * GNU General Public License version 2 as published by the Free Software - * Foundation and appearing in the file LICENSE.GPL included in the - * packaging of this file. - * - * Licensees holding valid libFirm Professional Edition licenses may use - * this file in accordance with the libFirm Commercial License. - * Agreement provided with the Software. - * - * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE. + * Copyright (C) 2012 University of Karlsruhe. */ /** @@ -48,15 +34,6 @@ arch_register_req_t const arch_no_requirement = { 0 }; -/* Initialize the architecture environment struct. */ -arch_env_t *arch_env_begin_codegeneration(const arch_isa_if_t *isa_if, - be_main_env_t *main_env) -{ - arch_env_t *arch_env = isa_if->begin_codegeneration(main_env); - arch_env->main_env = main_env; - return arch_env; -} - /** * Get the isa responsible for a node. * @param irn The node to get the responsible isa for. @@ -107,12 +84,7 @@ int arch_possible_memory_operand(const ir_node *irn, unsigned int i) void arch_perform_memory_operand(ir_node *irn, ir_node *spill, unsigned int i) { const arch_irn_ops_t *ops = get_irn_ops(irn); - - if (ops->perform_memory_operand) { - ops->perform_memory_operand(irn, spill, i); - } else { - return; - } + ops->perform_memory_operand(irn, spill, i); } int arch_get_op_estimated_cost(const ir_node *irn) @@ -186,12 +158,17 @@ bool arch_reg_is_allocatable(const arch_register_req_t *req, return false; if (reg->type & arch_register_type_virtual) return true; - if (req->type & arch_register_req_type_limited) + if (arch_register_req_is(req, limited)) return rbitset_is_set(req->limited, reg->index); return true; } -void arch_dump_register_req(FILE *F, const arch_register_req_t *req, +/** + * Print information about a register requirement in human readable form + * @param F output stream/file + * @param req The requirements structure to format. + */ +static void arch_dump_register_req(FILE *F, const arch_register_req_t *req, const ir_node *node) { if (req == NULL || req->type == arch_register_req_type_none) { @@ -221,7 +198,7 @@ void arch_dump_register_req(FILE *F, const arch_register_req_t *req, fprintf(F, " same as"); for (i = 0; 1U << i <= other; ++i) { if (other & (1U << i)) { - ir_fprintf(F, " %+F", get_irn_n(skip_Proj_const(node), i)); + ir_fprintf(F, " #%d (%+F)", i, get_irn_n(skip_Proj_const(node), i)); } } } @@ -233,7 +210,7 @@ void arch_dump_register_req(FILE *F, const arch_register_req_t *req, fprintf(F, " different from"); for (i = 0; 1U << i <= other; ++i) { if (other & (1U << i)) { - ir_fprintf(F, " %+F", get_irn_n(skip_Proj_const(node), i)); + ir_fprintf(F, " #%d (%+F)", i, get_irn_n(skip_Proj_const(node), i)); } } } @@ -254,30 +231,26 @@ void arch_dump_register_req(FILE *F, const arch_register_req_t *req, void arch_dump_reqs_and_registers(FILE *F, const ir_node *node) { - backend_info_t *info = be_get_info(node); + backend_info_t *const info = be_get_info(node); + int const n_ins = get_irn_arity(node); /* don't fail on invalid graphs */ - if (info == NULL || info->in_reqs == NULL || info->out_infos == NULL) { + if (!info || (!info->in_reqs && n_ins != 0) || !info->out_infos) { fprintf(F, "invalid register requirements!!!\n"); return; } - int n_ins = get_irn_arity(node); for (int i = 0; i < n_ins; ++i) { const arch_register_req_t *req = arch_get_irn_register_req_in(node, i); fprintf(F, "inreq #%d = ", i); arch_dump_register_req(F, req, node); fputs("\n", F); } - unsigned n_outs = arch_get_irn_n_outs(node); - for (unsigned o = 0; o < n_outs; ++o) { + be_foreach_out(node, o) { const arch_register_req_t *req = arch_get_irn_register_req_out(node, o); fprintf(F, "outreq #%u = ", o); arch_dump_register_req(F, req, node); - fputs("\n", F); - } - for (unsigned o = 0; o < n_outs; ++o) { const arch_register_t *reg = arch_get_irn_register_out(node, o); - fprintf(F, "reg #%u = %s\n", o, reg != NULL ? reg->name : "n/a"); + fprintf(F, " [%s]\n", reg != NULL ? reg->name : "n/a"); } fprintf(F, "flags =");