X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fberaextern.c;h=74a2b54a8e3101310760642456b8defe269eae10;hb=89dc24503c04139bb05504059b291d6d89f99661;hp=8ba6c2493abd2bc3812756b79d152bde73e8dd0d;hpb=205396c4f4f5abe7abd6dc2350c8c398a7623afc;p=libfirm diff --git a/ir/be/beraextern.c b/ir/be/beraextern.c index 8ba6c2493..74a2b54a8 100644 --- a/ir/be/beraextern.c +++ b/ir/be/beraextern.c @@ -1,10 +1,28 @@ -/** - * Author: Daniel Grund - * Date: 17.01.2006 - * Copyright: (c) Universitaet Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. +/* + * 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. * - * Implementation of the RA-Interface for an external, (non-SSA) register allocator. + * 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. + */ + +/** + * @file + * @brief Implementation of the RA-Interface for an external, (non-SSA) register allocator. + * @author Daniel Grund + * @date 17.01.2006 + * @version $Id$ * * The external register allocator is a program: * PROG -i INPUTFILE -o OUTPUTFILE @@ -51,8 +69,7 @@ allocs ::= 'allocs' alloc* . alloc ::= node-nr reg-nr . - -******** End of file format docu ********/ +*/ #ifdef NOT_PORTED #ifdef HAVE_CONFIG_H #include "config.h" @@ -61,8 +78,8 @@ alloc ::= node-nr reg-nr . #include #include #include -#include -#include +#include "lc_opts.h" +#include "lc_opts_enum.h" #include "set.h" #include "pset.h" @@ -80,7 +97,6 @@ alloc ::= node-nr reg-nr . #include "phiclass.h" #include "bemodule.h" -#include "beraextern.h" #include "beabi.h" #include "bearch_t.h" #include "benode_t.h" @@ -411,13 +427,18 @@ static void dump_affinities_walker(ir_node *irn, void *env) { /* should_be_equal constraints are affinites */ for (pos = 0, max = get_irn_arity(irn); posaenv, irn, pos); - if (arch_register_req_is(req, should_be_same)) { - ir_node *other = get_irn_n(irn, req->other_same); - if(arch_irn_is(raenv->aenv, other, ignore)) { - vi2 = be_get_var_info(other); + const int* i; + for (i = req->other_same; i != ENDOF(req->other_same); ++i) { + ir_node *other; - fprintf(raenv->f, "(%d, %d, %d)\n", vi1->var_nr, vi2->var_nr, get_affinity_weight(irn)); + if (*i == -1) break; + + other = get_irn_n(skip_Proj(irn), *i); + if(arch_irn_is(raenv->aenv, other, ignore)) { + vi2 = be_get_var_info(other); + fprintf(raenv->f, "(%d, %d, %d)\n", vi1->var_nr, vi2->var_nr, get_affinity_weight(irn)); + } } } } @@ -767,7 +788,7 @@ static void be_ra_extern_main(be_irg_t *birg) { /* Clean up */ free_ssa_destr_simple(raenv.vars); - be_invalidate_liveness(birg); + be_liveness_invalidate(be_get_birg_liveness(birg)); } /****************************************************************************** @@ -813,4 +834,4 @@ void be_init_raextern(void) { } BE_REGISTER_MODULE_CONSTRUCTOR(be_init_raextern); -#endif +#endif /* NOT_PORTED */