#include "eset.h"
#include "irgwalk.h"
#include "irgmod.h"
+#include "typewalk.h"
#include "irvrfy.h"
#include "trvrfy.h"
#endif
}
+/**
+ * Add a graph to the set of live graphs.
+ *
+ * @param graph the graph to add
+ * @return non-zero if the graph was added, zero
+ * if it was already in the live set
+ */
static int add_graph (ir_graph *graph)
{
if (!eset_contains (_live_graphs, graph)) {
return (FALSE);
}
-static int add_class (type *clazz)
+/**
+ * Add a class to the set of live classes.
+ *
+ * @param clazz the class to add
+ * @return non-zero if the graph was added, zero
+ * if it was already in the live set
+ */
+static int add_class (ir_type *clazz)
{
if (!eset_contains (_live_classes, clazz)) {
if (verbose > 1) {
static void rta_act (ir_node *node, void *env)
{
int *change = (int*) env;
-
opcode op = get_irn_opcode (node);
if (iro_Call == op) { /* CALL */
}
} else if (iro_Alloc == op) { /* ALLOC */
- type *type = get_Alloc_type (node);
+ ir_type *type = get_Alloc_type (node);
*change |= add_class (type);
}
static int rta_fill_graph (ir_graph* graph)
{
int change = FALSE;
-
- current_ir_graph = graph;
-
irg_walk_graph (graph, rta_act, NULL, &change);
-
- return (change);
+ return change;
}
/** Traverse all graphs to collect method accesses and object allocations.
- *
- * @param rerun Whether to rely on is_alive in a second run
*/
static int rta_fill_incremental (void)
{
int rerun = TRUE;
int old_ip_view = get_interprocedural_view();
- set_interprocedural_view(false); /* save this for later */
+ set_interprocedural_view(0); /* save this for later */
/* init_tables has added main_irg to _live_graphs */
*/
static void init_tables (void)
{
- int i, n_globs = get_class_n_members(get_glob_type());
+ ir_type *tp;
+ int i, n;
_live_classes = eset_create ();
_live_graphs = eset_create ();
}
/* Find static allocated classes */
- for (i = 0; i < n_globs; ++i) {
- type *member_type = get_entity_type(get_class_member(get_glob_type(), i));
+ 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))
+ eset_insert(_live_classes, member_type);
+ }
+
+ 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))
eset_insert(_live_classes, member_type);
}
*/
void rta_init (int do_verbose)
{
- int i, n_runs = 0;
+ int i, n, n_runs = 0;
int rem_vpi = get_visit_pseudo_irgs();
set_visit_pseudo_irgs(1);
# ifdef DEBUG_libfirm
- for (i = 0; i < get_irp_n_irgs(); i++) {
+ n = get_irp_n_irgs();
+ for (i = 0; i < n; i++) {
irg_vrfy (get_irp_irg(i));
}
tr_vrfy ();
}
# ifdef DEBUG_libfirm
- for (i = 0; i < get_irp_n_irgs(); i++) {
+ for (i = 0; i < n; i++) {
irg_vrfy (get_irp_irg(i));
}
tr_vrfy ();
}
/* Say whether this class might be instantiated at any point in the program: */
-int rta_is_alive_class (type *clazz)
+int rta_is_alive_class (ir_type *clazz)
{
return (eset_contains (_live_classes, clazz));
}
int i;
for (i = 0; i < get_irp_n_types(); ++i) {
- type *tp = get_irp_type(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);
}
/*
* $Log$
+ * Revision 1.36 2006/06/05 15:58:12 beck
+ * added support for Thread local storage
+ * added more doxygen docu
+ *
+ * Revision 1.35 2006/01/13 21:51:59 beck
+ * renamed all types 'type' to 'ir_type'
+ *
+ * Revision 1.34 2006/01/02 15:01:16 beck
+ * missing include added
+ *
+ * Revision 1.33 2005/11/17 17:26:57 beck
+ * removed bool type and depency from stdbool.h (not C89)
+ *
* Revision 1.32 2005/01/05 14:24:52 beck
* renames all is_x*_type() functions to is_X*_type() to prevent name clash with EDG frontend
*