+ be_dump(irg, suffix, dump_func);
+ }
+}
+
+static void put_ignore_colors(be_chordal_env_t *chordal_env)
+{
+ int n_colors = chordal_env->cls->n_regs;
+ int i;
+
+ bitset_clear_all(chordal_env->ignore_colors);
+ be_abi_put_ignore_regs(chordal_env->birg->abi, chordal_env->cls, chordal_env->ignore_colors);
+ for(i = 0; i < n_colors; ++i)
+ if(arch_register_type_is(&chordal_env->cls->regs[i], ignore))
+ bitset_set(chordal_env->ignore_colors, i);
+}
+
+FILE *be_chordal_open(const be_chordal_env_t *env, const char *prefix, const char *suffix)
+{
+ char buf[1024];
+
+ ir_snprintf(buf, sizeof(buf), "%s%F_%s%s", prefix, env->irg, env->cls->name, suffix);
+ return fopen(buf, "wt");
+}
+
+void check_ifg_implementations(be_chordal_env_t *chordal_env)
+{
+ FILE *f;
+
+ f = be_chordal_open(chordal_env, "std", ".log");
+ chordal_env->ifg = be_ifg_std_new(chordal_env);
+ be_ifg_check_sorted_to_file(chordal_env->ifg, f);
+ fclose(f);
+
+ f = be_chordal_open(chordal_env, "list", ".log");
+ be_ifg_free(chordal_env->ifg);
+ chordal_env->ifg = be_ifg_list_new(chordal_env);
+ be_ifg_check_sorted_to_file(chordal_env->ifg, f);
+ fclose(f);
+
+ f = be_chordal_open(chordal_env, "clique", ".log");
+ be_ifg_free(chordal_env->ifg);
+ chordal_env->ifg = be_ifg_clique_new(chordal_env);
+ be_ifg_check_sorted_to_file(chordal_env->ifg, f);
+ fclose(f);
+
+ f = be_chordal_open(chordal_env, "pointer", ".log");
+ be_ifg_free(chordal_env->ifg);
+ chordal_env->ifg = be_ifg_pointer_new(chordal_env);
+ be_ifg_check_sorted_to_file(chordal_env->ifg, f);
+ fclose(f);
+
+ chordal_env->ifg = NULL;
+};
+
+/**
+ * Checks for every reload if it's user can perform the load on itself.
+ */
+static void memory_operand_walker(ir_node *irn, void *env) {
+ be_chordal_env_t *cenv = env;
+ const arch_env_t *aenv = cenv->birg->main_env->arch_env;
+ const ir_edge_t *edge, *ne;
+ ir_node *block;
+
+ if (! be_is_Reload(irn))
+ return;
+
+ block = get_nodes_block(irn);
+
+ foreach_out_edge_safe(irn, edge, ne) {
+ ir_node *src = get_edge_src_irn(edge);
+ int pos = get_edge_src_pos(edge);
+
+ if (! src)
+ continue;
+
+ if (get_nodes_block(src) == block && arch_possible_memory_operand(aenv, src, pos)) {
+ DBG((cenv->dbg, LEVEL_3, "performing memory operand %+F at %+F\n", irn, src));
+ arch_perform_memory_operand(aenv, src, irn, pos);
+ }
+ }
+
+ /* kill the Reload */
+ if (get_irn_n_edges(irn) == 0) {
+ sched_remove(irn);
+ set_irn_n(irn, 0, new_Bad());
+ set_irn_n(irn, 1, new_Bad());