give Bad nodes a mode
[libfirm] / ir / ana / rta.c
index f87a109..ea0ae3f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -97,8 +97,8 @@ static bool add_class(ir_type *clazz)
 */
 static bool add_implementing_graphs(ir_entity *method)
 {
-       int i;
-       int n_over = get_entity_n_overwrittenby(method);
+       size_t i;
+       size_t n_over = get_entity_n_overwrittenby(method);
        ir_graph *graph = get_entity_irg(method);
        bool change = false;
 
@@ -129,7 +129,7 @@ static bool add_implementing_graphs(ir_entity *method)
 static void rta_act(ir_node *node, void *env)
 {
        bool *change = (bool*)env;
-       ir_opcode op = get_irn_opcode(node);
+       unsigned op = get_irn_opcode(node);
 
        if (iro_Call == op) {         /* CALL */
                ir_entity *ent = NULL;
@@ -185,7 +185,7 @@ static bool rta_fill_graph(ir_graph* graph)
  */
 static int rta_fill_incremental(void)
 {
-       int  i;
+       size_t i, n;
        int  n_runs = 0;
        bool rerun  = true;
 
@@ -193,15 +193,13 @@ static int rta_fill_incremental(void)
 
        /* Need to take care of graphs that are externally
           visible or sticky. Pretend that they are called: */
-       for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+       for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
                ir_graph *graph = get_irp_irg(i);
                ir_entity *ent = get_irg_entity(graph);
                ir_linkage linkage = get_entity_linkage(ent);
 
-               if (entity_is_externally_visible(ent)
-                               || (linkage & IR_LINKAGE_HIDDEN_USER)) {
+               if ((linkage & IR_LINKAGE_HIDDEN_USER) || entity_is_externally_visible(ent))
                        pset_new_insert(_live_graphs, graph);
-               }
        }
 
        while (rerun) {
@@ -216,12 +214,12 @@ static int rta_fill_incremental(void)
                DB((dbg, LEVEL_2, "RTA: RUN %i\n", n_runs));
 
                /* collect what we have found previously */
-               foreach_pset_new(live_graphs, graph, iter) {
+               foreach_pset_new(live_graphs, ir_graph*, graph, iter) {
                        pset_new_insert(_live_graphs, graph);
                }
 
                rerun = false;
-               foreach_pset_new(live_graphs, graph, iter) {
+               foreach_pset_new(live_graphs, ir_graph*, graph, iter) {
                        DB((dbg, LEVEL_2, "RTA: RUN %i: considering graph of %+F\n", n_runs, graph));
                        rerun |= rta_fill_graph(graph);
                }
@@ -237,12 +235,12 @@ static int rta_fill_incremental(void)
 /**
  * Count the number of graphs that we have found to be live.
  */
-static int stats(void)
+static size_t stats(void)
 {
-       int i;
-       int n_live_graphs = 0;
+       size_t i, n;
+       size_t n_live_graphs = 0;
 
-       for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+       for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
                ir_graph *graph = get_irp_irg(i);
 
                if (rta_is_alive_graph(graph))
@@ -265,9 +263,8 @@ static int stats(void)
 */
 static void init_tables(void)
 {
-       ir_type  *tp;
-       int      i, n;
-       ir_graph *irg;
+       ir_graph     *irg;
+       ir_segment_t segment;
 
        _live_classes = XMALLOC(pset_new_t);
        pset_new_init(_live_classes);
@@ -280,24 +277,18 @@ static void init_tables(void)
                pset_new_insert(_live_graphs, irg);
        }
 
-       /* Find static allocated classes */
-       tp = get_glob_type();
-       n  = get_class_n_members(tp);
-       for (i = 0; i < n; ++i) {
-               ir_type *member_type = get_entity_type(get_class_member(tp, i));
-               if (is_Class_type(member_type))
-                       pset_new_insert(_live_classes, member_type);
-       }
+       /* Find static allocated classes in all segments */
+       for (segment = IR_SEGMENT_FIRST; segment <= IR_SEGMENT_LAST; ++segment) {
+               ir_type *tp = get_segment_type(segment);
+               size_t  n   = get_compound_n_members(tp);
+               size_t  i;
 
-       tp = get_tls_type();
-       n  = get_struct_n_members(tp);
-       for (i = 0; i < n; ++i) {
-               ir_type *member_type = get_entity_type(get_struct_member(tp, i));
-               if (is_Class_type(member_type))
-                       pset_new_insert(_live_classes, member_type);
+               for (i = 0; i < n; ++i) {
+                       ir_type *member_type = get_entity_type(get_compound_member(tp, i));
+                       if (is_Class_type(member_type))
+                               pset_new_insert(_live_classes, member_type);
+               }
        }
-
-       /** @FIXME: add constructors/destructors */
 }
 
 /*
@@ -311,9 +302,9 @@ void rta_init(void)
 
 # ifdef DEBUG_libfirm
        {
-               int i;
-               for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
-                       irg_verify(get_irp_irg(i), 0);
+               size_t i;
+               for (i = get_irp_n_irgs(); i > 0;) {
+                       irg_verify(get_irp_irg(--i), 0);
                }
                tr_verify();
        }
@@ -323,16 +314,16 @@ void rta_init(void)
 
        n_runs = rta_fill_incremental();
 
-       DB((dbg, LEVEL_1, "RTA: n_graphs      = %i\n", get_irp_n_irgs()));
-       DB((dbg, LEVEL_1, "RTA: n_live_graphs = %i\n", stats()));
+       DB((dbg, LEVEL_1, "RTA: n_graphs      = %zu\n", get_irp_n_irgs()));
+       DB((dbg, LEVEL_1, "RTA: n_live_graphs = %zu\n", stats()));
        DB((dbg, LEVEL_1, "RTA: n_runs        = %i\n", n_runs));
 
 # ifdef DEBUG_libfirm
        {
-               int i;
+               size_t i;
 
-               for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
-                       irg_verify(get_irp_irg(i), 0);
+               for (i = get_irp_n_irgs(); i > 0;) {
+                       irg_verify(get_irp_irg(--i), 0);
                }
                tr_verify();
        }
@@ -367,15 +358,15 @@ static void make_entity_to_description(type_or_ent tore, void *env)
 */
 void rta_delete_dead_graphs(void)
 {
-       int      i, n_dead_irgs, n_graphs = get_irp_n_irgs();
+       size_t   i, n_dead_irgs, n_graphs = get_irp_n_irgs();
        ir_graph *irg, *next_irg, *dead_irgs;
 
        irp_reserve_resources(irp, IR_RESOURCE_IRG_LINK);
 
        n_dead_irgs = 0;
        dead_irgs = NULL;
-       for (i = n_graphs - 1; i >= 0; --i) {
-               irg = get_irp_irg(i);
+       for (i = n_graphs; i > 0;) {
+               irg = get_irp_irg(--i);
 
                if (! rta_is_alive_graph(irg)) {
                        set_irg_link(irg, dead_irgs);
@@ -387,11 +378,11 @@ void rta_delete_dead_graphs(void)
        /* Hmm, probably we need to run this only if dead_irgs is non-NULL */
        type_walk(make_entity_to_description, NULL, NULL);
        for (irg = dead_irgs; irg != NULL; irg = next_irg) {
-               next_irg = get_irg_link(irg);
+               next_irg = (ir_graph*) get_irg_link(irg);
                remove_irp_irg(irg);
        }
 
-       DB((dbg, LEVEL_1, "RTA: dead methods = %i\n", n_dead_irgs));
+       DB((dbg, LEVEL_1, "RTA: dead methods = %zu\n", n_dead_irgs));
 
        irp_free_resources(irp, IR_RESOURCE_IRG_LINK);
 }
@@ -400,9 +391,9 @@ void rta_delete_dead_graphs(void)
 void rta_cleanup(void)
 {
 # ifdef DEBUG_libfirm
-       int i;
-       for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
-               irg_verify(get_irp_irg(i), 0);
+       size_t i;
+       for (i = get_irp_n_irgs(); i > 0;) {
+               irg_verify(get_irp_irg(--i), 0);
        }
        tr_verify();
 # endif /* defined DEBUG_libfirm */
@@ -435,7 +426,7 @@ int rta_is_alive_graph(ir_graph *graph)
 /* dump our opinion */
 void rta_report(void)
 {
-       int i, n;
+       size_t i, n;
 
        n = get_irp_n_types();
        for (i = 0; i < n; ++i) {