#include "array.h"
#include "irprog.h"
#include "irgwalk.h"
-
+#include "irloop.h"
+#include "irflag_t.h"
static void clear_link(ir_node * node, void * env) {
set_irn_link(node, NULL);
void * MARK = &MARK;
int i;
+ if (!get_opt_dead_method_elimination()) return;
+
/* mark */
if (n_keep > 0) {
entity ** marked = NEW_ARR_F(entity *, n_keep);
for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_graph * irg = get_irp_irg(i);
entity * ent = get_irg_ent(irg);
+ /* Removing any graph invalidates all interprocedural loop trees. */
+ if (get_irg_loopinfo_state(irg) == loopinfo_ip_consistent ||
+ get_irg_loopinfo_state(irg) == loopinfo_ip_inconsistent)
+ free_loop_information(irg);
if (get_entity_link(ent) != MARK) {
remove_irp_irg(irg);
set_entity_peculiarity(ent, peculiarity_description);
+ if (get_opt_dead_method_elimination_verbose())
+ printf("dead method elimination: freeing method %s\n", get_entity_ld_name(ent));
}
set_entity_link(ent, NULL);
}