+/**
+ * Main compare routine
+ */
+void co_compare_solvers(be_chordal_env_t *chordal_env) {
+ copy_opt_t *co;
+ lc_timer_t *timer;
+ color_save_t saver;
+ int costs_inevit, costs_init, costs_heur, costs_ilp1, costs_ilp2, lower_bound;
+
+ phi_class_compute(chordal_env->irg);
+ copystat_collect_cls(chordal_env);
+
+ co = new_copy_opt(chordal_env, co_get_costs_loop_depth);
+ co_build_ou_structure(co);
+ co_build_graph_structure(co);
+ DBG((dbg, LEVEL_1, "----> CO: %s\n", co->name));
+
+ /* save colors */
+ saver.arch_env = chordal_env->birg->main_env->arch_env;
+ saver.chordal_env = chordal_env;
+ saver.saved_colors = pmap_create();
+ save_colors(&saver);
+ be_ra_chordal_check(co->cenv);
+
+ /* initial values */
+ costs_inevit = co_get_inevit_copy_costs(co);
+ lower_bound = co_get_lower_bound(co);
+ costs_init = co_get_copy_costs(co);
+
+ DBG((dbg, LEVEL_1, "Inevit Costs: %3d\n", costs_inevit));
+ DBG((dbg, LEVEL_1, "Lower Bound: %3d\n", lower_bound));
+ DBG((dbg, LEVEL_1, "Init costs: %3d\n", costs_init));
+
+ copystat_add_inevit_costs(costs_inevit);
+ copystat_add_init_costs(costs_init);
+ copystat_add_max_costs(co_get_max_copy_costs(co));
+
+
+#ifdef DO_HEUR
+ timer = lc_timer_register("heur", NULL);
+ lc_timer_reset_and_start(timer);
+
+ co_solve_heuristic(co);
+
+ lc_timer_stop(timer);
+
+ be_ra_chordal_check(co->cenv);
+ costs_heur = co_get_copy_costs(co);
+ DBG((dbg, LEVEL_1, "HEUR costs: %3d\n", costs_heur));
+ copystat_add_heur_time(lc_timer_elapsed_msec(timer));
+ copystat_add_heur_costs(costs_heur);
+ assert(lower_bound <= costs_heur);
+#endif /* DO_HEUR */
+
+
+#ifdef DO_ILP1
+ load_colors(&saver);
+
+ co_solve_ilp1(co, 60.0);
+
+ costs_ilp1 = co_get_copy_costs(co);
+ DBG((dbg, LEVEL_1, "ILP1 costs: %3d\n", costs_ilp1));
+ copystat_add_opt_costs(costs_ilp1); /*TODO ADAPT */
+ assert(lower_bound <= costs_ilp1);
+#endif /* DO_ILP1 */
+
+
+#ifdef DO_ILP2
+ load_colors(&saver);
+
+ co_solve_ilp2(co, 60.0);
+
+ be_ra_chordal_check(co->cenv);
+ costs_ilp2 = co_get_copy_costs(co);
+ DBG((dbg, LEVEL_1, "ILP2 costs: %3d\n", costs_ilp2));
+ copystat_add_opt_costs(costs_ilp2); /*TODO ADAPT */
+ assert(lower_bound <= costs_ilp2);
+#endif /* DO_ILP2 */
+
+ pmap_destroy(saver.saved_colors);
+ co_free_graph_structure(co);
+ co_free_ou_structure(co);
+ free_copy_opt(co);