* Licence: This file is protected by GPL - GNU GENERAL PUBLIC LICENSE.
*/
-/**
- * Intraprozedurale Analyse zur Abschätzung der Aufrufrelation. Es wird
- * die Menge der instantiierten Klassen bestimmt, und daraus eine Abschätzung
- * der aufgerufenen Methoden.
- *
- * Voraussetzung ist, dass das Programm keine Methodenzeiger handhaben kann.
- * In diesem Fall koennten Methoden verloren gehen. Oder wir muessen nach
- * allen "freien" Methoden suchen (siehe cgana).
- *
- * @@@ Die Analyse sollte wissen, von welchen Klassen Instanzen ausserhalb
- * der Uebersetzungseinheit alloziert werden koennen. Diese muessen in
- * die initiale Menge allozierter Klassen aufgenommern werden.
- */
#ifdef HAVE_CONFIG_H
-# include <config.h>
+# include "config.h"
#endif
#include "rta.h"
#include "irnode_t.h"
#include "irprog_t.h"
+#include "irgraph_t.h"
#include "eset.h"
#include "irgwalk.h"
/* it's an external allocated thing. */
}
} else if (get_SymConst_kind(ptr) == symconst_addr_name) {
- /* If this SymConst refers to a method the method is external_visible
- and therefore must be considered live anyways. */
- if (get_SymConst_name(ptr) != new_id_from_str("iro_Catch"))
- assert (ent && "couldn't determine entity of call to symConst");
+ /* Entities of kind addr_name may not be allocated in this compilation unit.
+ If so, the frontend built faulty Firm. So just ignore. */
+ /* if (get_SymConst_name(ptr) != new_id_from_str("iro_Catch"))
+ assert (ent && "couldn't determine entity of call to SymConst of kind addr_name."); */
} else {
/* other symconst. */
assert(0 && "This SymConst can not be an address for a method call.");
int i;
int n_runs = 0;
int rerun = TRUE;
- int old_ip_view = interprocedural_view;
+ int old_ip_view = get_interprocedural_view();
- interprocedural_view = 0; /* save this for later */
+ set_interprocedural_view(false); /* save this for later */
/* init_tables has added main_irg to _live_graphs */
n_runs ++;
}
- interprocedural_view = old_ip_view; /* cover up our traces */
+ set_interprocedural_view(old_ip_view); /* cover up our traces */
return (n_runs);
}
{
int n_runs = 0;
+ int rem_vpi = get_visit_pseudo_irgs();
+ set_visit_pseudo_irgs(1);
+
# ifdef DEBUG_libfirm
int i;
for (i = 0; i < get_irp_n_irgs(); i++) {
}
tr_vrfy ();
# endif /* defined DEBUG_libfirm */
+
+ set_visit_pseudo_irgs(rem_vpi);
}
/**
ir_graph *graph = NULL;
int n_dead_graphs = 0;
+ int rem_vpi = get_visit_pseudo_irgs();
+ set_visit_pseudo_irgs(1);
+
if (!get_optimize() || !get_opt_dead_method_elimination()) return;
ir_graph *dead_graphs[get_irp_n_irgs()];
if (verbose) {
printf ("RTA: n_dead_graphs = %i\n", n_dead_graphs);
}
+
+ set_visit_pseudo_irgs(rem_vpi);
}
/* Clean up the RTA data structures. Call this after calling rta_init */
/*
* $Log$
+ * Revision 1.30 2004/12/02 16:16:11 beck
+ * fixed config.h include
+ * used xmalloc instead of malloc
+ *
+ * Revision 1.29 2004/11/11 13:28:08 goetz
+ * made pseudo irg aware
+ *
+ * Revision 1.28 2004/11/03 14:47:18 beck
+ * removed gloval intraprocedural_view variable and replaced by get_*() set_*() functions
+ *
+ * Revision 1.27 2004/10/21 07:23:34 goetz
+ * comments
+ *
* Revision 1.26 2004/10/20 14:59:27 liekweg
* Removed ecg
*