#include "irgopt.h"
#include "irtools.h"
#include "irprintf.h"
+#include "iredges.h"
#include "beutil.h"
#include "besched_t.h"
* Sets all node inputs to BAD node.
*/
void be_kill_node(ir_node *irn) {
- int i;
+ int i, first;
ir_graph *irg;
- if (is_Bad(irn))
- return;
+ assert(!is_Bad(irn));
- irg = get_irn_irg(irn);
+DEBUG_ONLY(
+ irg = get_irn_irg(irn);
+ first = 0 - ! is_Block(irn);
- for (i = get_irn_arity(irn) - 1; i >= 0; --i) {
+ for (i = get_irn_arity(irn) - 1; i >= first; --i) {
set_irn_n(irn, i, get_irg_bad(irg));
}
+)
+ edges_node_deleted(irn, irg);
}
/* FIXME: not used. can be deleted? */
else
return NULL; /* this was the start block and we did not find an acceptable irn */
}
+
+/**
+ * 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;
+}