default_initialize_local_variable_func_t callback function added.
[libfirm] / ir / ir / ircgcons.c
index 0abe066..dcc793f 100644 (file)
@@ -8,6 +8,7 @@
  * ---------------------------------------------------------------- */
 
 
+#include <string.h>
 #include "ircgcons.h"
 
 #include "array.h"
@@ -65,17 +66,17 @@ static void caller_init(int arr_length, entity ** free_methods) {
 }
 
 
-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
@@ -131,7 +132,7 @@ static void collect_phicallproj(void) {
     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);
   }
 }
 
@@ -251,7 +252,7 @@ static void prepare_irg_end(ir_graph * irg, irg_data_t * data) {
     }
   }
   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) {
@@ -280,8 +281,10 @@ static void prepare_irg_end(ir_graph * irg, irg_data_t * data) {
        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);
   }
@@ -522,7 +525,8 @@ static void construct_call(ir_node * call) {
   /* 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. */