X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Frta.c;h=ebac2a2215b377bc8715c71397fcbbccf6f9eab5;hb=c046a33ef59e5ff97d868b22cec60f44f5e8eff6;hp=1e5fda8c8ab7839d05d1bc18370b02a45876ff75;hpb=db6c8eb1cf5cf224bebd62d38997902197c5c6a5;p=libfirm diff --git a/ir/ana/rta.c b/ir/ana/rta.c index 1e5fda8c8..ebac2a221 100644 --- a/ir/ana/rta.c +++ b/ir/ana/rta.c @@ -1,18 +1,29 @@ -/* -*- c -*- */ - /* - * Project: libFIRM - * File name: ir/ana/rta.c - * Purpose: Interprocedural analysis to improve the call graph estimate. - * Author: Florian - * Modified by: - * Created: 09.06.2002 - * CVS-ID: $Id$ - * Copyright: (c) 1999-2004 Universität Karlsruhe - * Licence: This file is protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2007 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. */ - +/** + * @file + * @brief Interprocedural analysis to improve the call graph estimate. + * @author Florian + * @version 09.06.2002 + * @version $Id$ + */ #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -28,9 +39,8 @@ #include "eset.h" #include "irgwalk.h" #include "irgmod.h" -#include "typewalk.h" #include "irvrfy.h" -#include "trvrfy.h" +#include "irprintf.h" # ifndef TRUE # define TRUE 1 @@ -50,19 +60,19 @@ static eset *_live_graphs = NULL; /** Given a method, find the firm graph that implements that method. */ -static ir_graph *get_implementing_graph (entity *method) +static ir_graph *get_implementing_graph (ir_entity *method) { #if 0 - ir_graph *graph = get_entity_irg ((entity*) method); + ir_graph *graph = get_entity_irg ((ir_entity*) method); /* Search upwards in the overwrites graph. */ /* GL: this will not work for multiple inheritance */ if (NULL == graph) { int i; - int n_over = get_entity_n_overwrites ((entity*) method); + int n_over = get_entity_n_overwrites ((ir_entity*) method); for (i = 0; (NULL == graph) && (i < n_over); i ++) { - entity *over = get_entity_overwrites ((entity*) method, i); + ir_entity *over = get_entity_overwrites ((ir_entity*) method, i); graph = get_implementing_graph (over); } } @@ -97,8 +107,7 @@ static int add_graph (ir_graph *graph) { if (!eset_contains (_live_graphs, graph)) { if (verbose > 1) { - fprintf(stdout, "RTA: new graph of "); - DDMEO(get_irg_entity (graph)); + ir_fprintf(stdout, "RTA: new graph of %+F\n", graph); } eset_insert (_live_graphs, graph); @@ -119,8 +128,7 @@ static int add_class (ir_type *clazz) { if (!eset_contains (_live_classes, clazz)) { if (verbose > 1) { - fprintf(stdout, "RTA: new class: "); - DDMT(clazz); + ir_fprintf(stdout, "RTA: new class: %+F\n", clazz); } eset_insert (_live_classes, clazz); @@ -135,7 +143,7 @@ static int add_class (ir_type *clazz) * * Iff additions occurred, return TRUE, else FALSE. */ -static int add_implementing_graphs (entity *method) +static int add_implementing_graphs (ir_entity *method) { int i; int n_over = get_entity_n_overwrittenby (method); @@ -147,8 +155,7 @@ static int add_implementing_graphs (entity *method) } if (verbose > 1) { - fprintf(stdout, "RTA: new call to "); - DDMEO(method); + ir_fprintf(stdout, "RTA: new call to %+F\n", method); } if (rta_is_alive_class (get_entity_owner (method))) { @@ -158,7 +165,7 @@ static int add_implementing_graphs (entity *method) } for (i = 0; i < n_over; i ++) { - entity *over = get_entity_overwrittenby (method, i); + ir_entity *over = get_entity_overwrittenby (method, i); change |= add_implementing_graphs (over); } @@ -173,10 +180,10 @@ static int add_implementing_graphs (entity *method) static void rta_act (ir_node *node, void *env) { int *change = (int*) env; - opcode op = get_irn_opcode (node); + ir_opcode op = get_irn_opcode (node); if (iro_Call == op) { /* CALL */ - entity *ent = NULL; + ir_entity *ent = NULL; ir_node *ptr = get_Call_ptr (node); @@ -209,7 +216,6 @@ static void rta_act (ir_node *node, void *env) /* STRANGE */ } else { - DDMN(ptr); assert(0 && "Unexpected address expression: can not analyse, therefore can not do correct rta!"); } @@ -249,7 +255,7 @@ static int rta_fill_incremental (void) for (i = 0; i < get_irp_n_irgs(); i++) { ir_graph *graph = get_irp_irg (i); - entity *ent = get_irg_entity (graph); + ir_entity *ent = get_irg_entity (graph); if ((visibility_external_visible == get_entity_visibility (ent)) || (stickyness_sticky == get_entity_stickyness (ent))) { @@ -278,8 +284,8 @@ static int rta_fill_incremental (void) graph = eset_next (live_graphs)) { if (verbose > 1) { - fprintf(stdout, "RTA: RUN %i: considering graph of ", n_runs); - DDMEO(get_irg_entity (graph)); + ir_fprintf(stdout, "RTA: RUN %i: considering graph of %+F\n", n_runs, + graph); } rerun |= rta_fill_graph (graph); @@ -322,18 +328,18 @@ static int stats (void) entity that used to inherit this entity's graph is now abstract. */ /* Since we *know* that this entity will not be called, this is OK. */ -static void force_description (entity *ent, entity *addr) +static void force_description (ir_entity *ent, ir_entity *addr) { int i, n_over = get_entity_n_overwrittenby (ent); set_entity_peculiarity (ent, peculiarity_description); for (i = 0; i < n_over; i ++) { - entity *over = get_entity_overwrittenby (ent, i); + ir_entity *over = get_entity_overwrittenby (ent, i); if (peculiarity_inherited == get_entity_peculiarity (over)) { /* We rely on the fact that cse is performed on the const_code_irg. */ - entity *my_addr = get_SymConst_entity(get_atomic_ent_value(over)); + ir_entity *my_addr = get_SymConst_entity(get_atomic_ent_value(over)); if (addr == my_addr) { force_description (over, addr); @@ -341,7 +347,7 @@ static void force_description (entity *ent, entity *addr) } else if (peculiarity_existent == get_entity_peculiarity (over)) { /* check whether 'over' forces 'inheritance' of *our* graph: */ ir_node *f_addr = get_atomic_ent_value (over); - entity *impl_ent = get_SymConst_entity (f_addr); + ir_entity *impl_ent = get_SymConst_entity (f_addr); assert ((get_irn_op(f_addr) == op_SymConst) && "can't do complex addrs"); if (impl_ent == addr) { @@ -391,17 +397,20 @@ static void init_tables (void) */ void rta_init (int do_verbose) { - int i, n, n_runs = 0; + int n_runs = 0; int rem_vpi = get_visit_pseudo_irgs(); set_visit_pseudo_irgs(1); # ifdef DEBUG_libfirm - n = get_irp_n_irgs(); - for (i = 0; i < n; i++) { - irg_vrfy (get_irp_irg(i)); + { + int i, n; + n = get_irp_n_irgs(); + for (i = 0; i < n; i++) { + irg_vrfy (get_irp_irg(i)); + } + tr_vrfy (); } - tr_vrfy (); # endif /* defined DEBUG_libfirm */ verbose = do_verbose; @@ -419,10 +428,14 @@ void rta_init (int do_verbose) } # ifdef DEBUG_libfirm - for (i = 0; i < n; i++) { - irg_vrfy (get_irp_irg(i)); + { + int i, n; + n = get_irp_n_irgs(); + for (i = 0; i < n; i++) { + irg_vrfy (get_irp_irg(i)); + } + tr_vrfy (); } - tr_vrfy (); # endif /* defined DEBUG_libfirm */ set_visit_pseudo_irgs(rem_vpi); @@ -435,8 +448,9 @@ void rta_init (int do_verbose) * dead graphs to peculiarity_description. */ static void make_entity_to_description(type_or_ent *tore, void *env) { + (void) env; if (get_kind(tore) == k_entity) { - entity *ent = (entity *)tore; + ir_entity *ent = (ir_entity *)tore; if ((is_Method_type(get_entity_type(ent))) && (get_entity_peculiarity(ent) != peculiarity_description) && @@ -474,10 +488,10 @@ void rta_delete_dead_graphs (void) if (rta_is_alive_graph (graph)) { /* do nothing (except some debugging fprintf`s :-) */ } else { -# ifdef DEBUG_libfirm - entity *ent = get_irg_entity (graph); +#ifndef NDEBUG + ir_entity *ent = get_irg_entity (graph); assert (visibility_external_visible != get_entity_visibility (ent)); -# endif /* defined DEBUG_libfirm */ +#endif dead_graphs[n_dead_graphs] = graph; n_dead_graphs ++; @@ -540,14 +554,13 @@ void rta_report (void) for (i = 0; i < get_irp_n_types(); ++i) { ir_type *tp = get_irp_type(i); if (is_Class_type(tp) && rta_is_alive_class(tp)) { - fprintf(stdout, "RTA: considered allocated: "); DDMT(tp); + ir_fprintf(stdout, "RTA: considered allocated: %+F\n", tp); } } for (i = 0; i < get_irp_n_irgs(); i++) { if (rta_is_alive_graph (get_irp_irg(i))) { - fprintf(stdout, "RTA: considered called: graph of "); - DDMEO(get_irg_entity (get_irp_irg(i))); + ir_fprintf(stdout, "RTA: considered called: graph of %+F\n", get_irp_irg(i)); } } } @@ -555,6 +568,23 @@ void rta_report (void) /* * $Log$ + * Revision 1.41 2007/03/22 10:39:33 matze + * a bunch of fixes to make firm work with NDEBUG and without DEBUG_libfirm + * + * Revision 1.40 2007/01/16 15:45:15 beck + * renamed type opcode to ir_opcode + * + * Revision 1.39 2006/12/13 13:15:12 beck + * renamed entity -> ir_entity + * + * Revision 1.38 2006/12/12 16:12:05 beck + * Fixed missing initialization + * + * Revision 1.37 2006/12/11 15:28:48 matze + * - Several warning fixes + * - Fixes for compilation without DEBUG_libfirm + * - Fixed for compilation without WITH_LIBCORE (but it's still broken) + * * Revision 1.36 2006/06/05 15:58:12 beck * added support for Thread local storage * added more doxygen docu