Do not mark the transformed as visited. It makes no sense at all.
[libfirm] / ir / be / beutil.c
index d800315..8754f4d 100644 (file)
@@ -196,9 +196,9 @@ static void collect_phis(ir_node *irn, void *data)
 
 void be_clear_links(ir_graph *irg)
 {
-       set_using_irn_link(irg);
+       ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
        irg_walk_graph(irg, firm_clear_link, NULL, NULL);
-       clear_using_irn_link(irg);
+       ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
 }
 
 void be_collect_phis(ir_graph *irg)
@@ -230,7 +230,7 @@ ir_node *be_get_Proj_for_pn(const ir_node *irn, long pn) {
        foreach_out_edge(irn, edge) {
                proj = get_edge_src_irn(edge);
 
-               if (get_Proj_proj(proj) == pn)
+               if (is_Proj(proj) && get_Proj_proj(proj) == pn)
                        return proj;
        }