+ (void) data;
+ if(is_Phi(irn)) {
+ ir_node *bl = get_nodes_block(irn);
+ set_irn_link(irn, get_irn_link(bl));
+ set_irn_link(bl, irn);
+ }
+}
+
+void be_clear_links(ir_graph *irg)
+{
+ ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
+ irg_walk_graph(irg, firm_clear_link, NULL, NULL);
+ ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
+}
+
+void be_collect_phis(ir_graph *irg)
+{
+ irg_walk_graph(irg, collect_phis, NULL, NULL);
+}
+
+static void count_num_reachable_nodes(ir_node *irn, void *env)
+{
+ int *num = env;
+ (*num)++;
+ (void) irn;
+}
+
+unsigned get_num_reachable_nodes(ir_graph *irg) {
+ int num = 0;
+ irg_walk_graph(irg, count_num_reachable_nodes, NULL, &num);
+ return num;
+}
+
+/**
+ * Gets the Proj with number pn from irn.
+ */
+ir_node *be_get_Proj_for_pn(const ir_node *irn, long pn) {
+ const ir_edge_t *edge;
+ ir_node *proj;
+ assert(get_irn_mode(irn) == mode_T && "need mode_T");
+
+ foreach_out_edge(irn, edge) {
+ proj = get_edge_src_irn(edge);
+
+ if (get_Proj_proj(proj) == pn)
+ return proj;
+ }
+
+ return NULL;
+}
+
+FILE *be_ffopen(const char *base, const char *ext, const char *mode) {
+ FILE *out;
+ char buf[1024];
+
+ snprintf(buf, sizeof(buf), "%s.%s", base, ext);
+ buf[sizeof(buf) - 1] = '\0';
+ if (! (out = fopen(buf, mode))) {
+ fprintf(stderr, "Cannot open file %s in mode %s\n", buf, mode);
+ return NULL;
+ }
+ return out;