* @file bespillilp.c
* @date 15.07.2005
* @author Sebastian Hack
+ * @cvsid $Id$
*
* ILP based spilling
*
#include "config.h"
#endif
+#ifdef WITH_ILP
+
#include <math.h>
#include "hashptr.h"
#include "irnode_t.h"
#include "ircons_t.h"
#include "irloop_t.h"
+#include "irtools.h"
#include <lpp/lpp.h>
#include <lpp/lpp_net.h>
#define BIGM 100000.0
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-
#define DBG_LEVEL SET_LEVEL_0 // 3
#define DUMP_SOLUTION
spill_stat_t stats;
const arch_register_class_t *cls;
const be_chordal_env_t *chordal_env;
- firm_dbg_module_t *dbg;
lpp_t *lpp;
set *irn_use_heads;
set *live_ranges;
struct obstack *obst;
int enable_store : 1;
int enable_remat : 1;
+ DEBUG_ONLY(firm_dbg_module_t *dbg;)
} spill_ilp_t;
typedef struct _live_range_t live_range_t;
}
}
- be_insert_spills_reloads(si->senv, NULL);
+ be_insert_spills_reloads(si->senv);
}
void be_spill_ilp(const be_chordal_env_t *chordal_env)
memset(&si.stats, 0, sizeof(si.stats));
si.chordal_env = chordal_env;
si.obst = &obst;
- si.dbg = firm_dbg_register("be.ra.spillilp");
- si.senv = be_new_spill_env(si.dbg, chordal_env, is_mem_phi, &si);
+ si.senv = be_new_spill_env(chordal_env);
+// DEBUG_ONLY(si.senv->dbg = si.dbg;)
si.cls = chordal_env->cls;
si.lpp = new_lpp(problem_name, lpp_minimize);
si.irn_use_heads = new_set(cmp_irn_use_head, 4096);
si.edges = NULL;
si.enable_remat = 0;
si.enable_store = 1;
+ FIRM_DBG_REGISTER(si.dbg, "firm.be.ra.spillilp");
- firm_dbg_set_mask(si.dbg, DBG_LEVEL);
irg_block_walk_graph(chordal_env->irg, process_block, NULL, &si);
if(si.enable_store)
add_store_costs(&si);
#endif
writeback_results(&si);
+ be_remove_dead_nodes_from_schedule(chordal_env->irg);
#ifdef DUMP_STATS
{
free_lpp(si.lpp);
obstack_free(&obst, NULL);
}
+
+#else /* WITH_ILP */
+
+static void only_that_you_can_compile_without_WITH_ILP_defined(void) {
+}
+
+#endif /* WITH_ILP */