Fixed small copy & paste error in the "foreach" defines and added additional defines...
[libfirm] / ir / be / benode.c
index 072c6ed..84d69c0 100644 (file)
@@ -8,6 +8,9 @@
  * Copyright (C) 2005 Universitaet Karlsruhe
  * Released under the GPL
  */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 
 #include <stdlib.h>
 
@@ -316,20 +319,17 @@ be_node_factory_t *be_node_factory_init(be_node_factory_t *factory,
   return factory;
 }
 
-void insert_Perm_after(const be_main_session_env_t *env,
+ir_node *insert_Perm_after(const be_main_session_env_t *env,
     const arch_register_class_t *cls, ir_node *pos)
 {
   const arch_env_t *arch_env = env->main_env->arch_env;
   ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos);
   ir_graph *irg = get_irn_irg(bl);
-  pset *live_end = get_live_end(bl);
-  pset *live = pset_new_ptr_default();
+  pset *live = put_live_end(bl, pset_new_ptr_default());
   ir_node *curr, *irn, *perm, **nodes;
   int i, n;
 
-  /* put all live ends in the live set. */
-  for(irn = pset_first(live_end); irn; irn = pset_next(live_end))
-    pset_insert_ptr(live, irn);
+  ir_printf("Insert Perm after: %+F\n", pos);
 
   sched_foreach_reverse(bl, irn) {
 
@@ -353,10 +353,11 @@ void insert_Perm_after(const be_main_session_env_t *env,
   for(irn = pset_first(live), i = 0; irn; irn = pset_next(live), i++)
     nodes[i] = irn;
 
-  curr = perm = new_Perm(env->main_env->node_factory, cls, irg, bl, n, nodes);
+  perm = new_Perm(env->main_env->node_factory, cls, irg, bl, n, nodes);
   sched_add_after(pos, perm);
   free(nodes);
 
+  curr = perm;
   for(i = 0; i < n; ++i) {
     ir_node *copies[1];
     ir_node *perm_op = get_irn_n(perm, i);
@@ -369,4 +370,5 @@ void insert_Perm_after(const be_main_session_env_t *env,
     copies[0] = proj;
     be_introduce_copies(env->dom_front, perm_op, array_size(copies), copies);
   }
+  return perm;
 }