}
n_preds++;
}
- /* The Phi_pred node is replaced now if it is a Phi. Remove it so
- that it is removed from keep_alives. */
- if (get_nodes_Block(phi_pred) == pred)
- exchange (phi_pred, new_Bad());
-#if 0
- /* @@@ hier brauche ich Schleifeninformation!!! Wenn keine Rueckwaertskante
- dann darfs auch keine Verwendung geben. */
+ /* The Phi_pred node is replaced now if it is a Phi.
+ In Schleifen kann offenbar der entfernte Phi Knoten legal verwendet werden.
+ Daher muss der Phiknoten durch den neuen ersetzt werden.
+ Weiter muss der alte Phiknoten entfernt werden (durch ersetzen oder
+ durch einen Bad) damit er aus den keep_alive verschwinden kann.
+ Man sollte also, falls keine Schleife vorliegt, exchange mit new_Bad
+ aufrufen. */
if (get_nodes_Block(phi_pred) == pred) {
/* remove the Phi as it might be kept alive. Further there
might be other users. */
- exchange(phi_pred, phi); /* geht, ist aber doch semantisch falsch! */
+ exchange(phi_pred, phi); /* geht, ist aber doch semantisch falsch! Warum?? */
}
-#endif
} else {
in[n_preds] = get_Phi_pred(phi, i);
n_preds ++;
}
/* Fix the node */
set_irn_in(phi, n_preds, in);
- //clear_backedges (phi);
phi = get_irn_link(phi);
}
/* and propagates dead control flow by calling equivalent_node. */
/* Independent of compiler flag it removes Tuples from cf edges, */
/* Bad predecessors form blocks and unnecessary predecessors of End.*/
+/* @@@ So far destroys backedge information. */
/********************************************************************/
void optimize_cf(ir_graph *irg);
#define DDMNB(X) xprintf("%I%I: %ld (in block %ld)\n", get_irn_opident(X), get_irn_modeident(X), get_irn_node_nr(X), get_irn_node_nr(get_nodes_Block(X)))
#define DDMT(X) xprintf("%s(l.%i) %I %I: %p\n", __FUNCTION__, __LINE__, get_type_tpop_nameid(X), get_type_ident(X), (X))
#define DDME(X) xprintf("%s(l.%i) %I: %p\n", __FUNCTION__, __LINE__, get_entity_ident(X), (X))
+#define DDMG(X) xprintf("%s(l.%i) %I: %p\n", __FUNCTION__, __LINE__, get_irg_ent(get_entity_ident(X)), (X))
# endif /* _IRNODE_H_ */