* ---------------------------------------------------------------- */
+#include <string.h>
#include "ircgcons.h"
#include "array.h"
}
-static void clear_link(ir_node * node, void * env) {
+static INLINE void clear_link(ir_node * node, void * env) {
set_irn_link(node, NULL);
}
-
-static inline ir_node * tail(ir_node * node) {
+/*
+static INLINE ir_node * tail(ir_node * node) {
ir_node * link;
for (; (link = get_irn_link(node)); node = link) ;
return node;
}
-
+*/
/* Call-Operationen an die "link"-Liste von "call_tail" anhängen (und
* "call_tail" aktualisieren), Proj-Operationen in die Liste ihrer Definition
link(start, get_irg_frame(irg));
link(start, get_irg_globals(irg));
/* walk */
- irg_walk_graph(irg, clear_link, (irg_walk_func) collect_phicallproj_walker, &end);
+ irg_walk_graph(irg, clear_link, (irg_walk_func *) collect_phicallproj_walker, &end);
}
}
}
}
if (n_ret > 0) {
- int n_res = get_method_n_res(get_entity_type(get_irg_ent(irg)));
+ int n_res = get_method_n_ress(get_entity_type(get_irg_ent(irg)));
ir_node ** in = NEW_ARR_F(ir_node *, n_ret);
/* block */
for (i = n_ret - 1; i >= 0; --i) {
if (!mode && get_irn_mode(in[i]) != mode_T)
mode = get_irn_mode(in[i]);
}
- assert(mode); /* @@@ else we must create a Bad node */
- data->res[j] = new_Phi(n_ret, in, mode);
+ if (mode)
+ data->res[j] = new_Phi(n_ret, in, mode);
+ else /* All preds are Bad */
+ data->res[j] = new_Bad();
}
DEL_ARR_F(in);
}
/* Operationen verschieben */
move_phis(post_block, pre_block);
move_nodes(post_block, pre_block, call);
- /* @@@ GL Wer setzt die Laenge des PostBlock cgfpred array auf 1? */
+ /* @@@ GL Wer setzt die Laenge des PostBlock cgfpred array auf 1?
+ GL: na, dieser Befehl... generiert neuen array. */
set_irn_in(post_block, 1, &jmp);
/* Wiederverwendete Daten initialisieren. */