becopyheur4: Clean up co_mst_irn_init().
[libfirm] / ir / be / besched.c
index 32650cc..c156d73 100644 (file)
@@ -1,20 +1,6 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
- *
  * This file is part of libFirm.
- *
- * This file may be distributed and/or modified under the terms of the
- * GNU General Public License version 2 as published by the Free Software
- * Foundation and appearing in the file LICENSE.GPL included in the
- * packaging of this file.
- *
- * Licensees holding valid libFirm Professional Edition licenses may use
- * this file in accordance with the libFirm Commercial License.
- * Agreement provided with the Software.
- *
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
+ * Copyright (C) 2012 University of Karlsruhe.
  */
 
 /**
 
 #include <stdlib.h>
 
-#include "irprintf.h"
-#include "irgwalk.h"
 #include "firm_types.h"
-#include "irgraph_t.h"
 #include "iredges_t.h"
 #include "ircons.h"
 #include "irgmod.h"
@@ -48,9 +31,8 @@
 
 #define SCHED_INITIAL_GRANULARITY (1 << 14)
 
-static void sched_renumber(const ir_node *block)
+static void sched_renumber(ir_node *const block)
 {
-       ir_node *irn;
        sched_info_t *inf;
        sched_timestep_t step = SCHED_INITIAL_GRANULARITY;
 
@@ -147,7 +129,23 @@ void sched_remove(ir_node *irn)
        info->prev      = NULL;
 }
 
+void sched_replace(ir_node *const old, ir_node *const irn)
+{
+       assert(sched_is_scheduled(old));
+       assert(!sched_is_scheduled(irn));
+
+       sched_info_t *const old_info = get_irn_sched_info(old);
+       sched_info_t *const irn_info = get_irn_sched_info(irn);
+       *irn_info = *old_info;
 
+       old_info->prev = NULL;
+       old_info->next = NULL;
+
+       ir_node *const prev = irn_info->prev;
+       ir_node *const next = irn_info->next;
+       get_irn_sched_info(prev)->next = irn;
+       get_irn_sched_info(next)->prev = irn;
+}
 
 static be_module_list_entry_t *schedulers;
 static schedule_func           scheduler;
@@ -156,7 +154,7 @@ void be_register_scheduler(const char *name, schedule_func func)
 {
        if (scheduler == NULL)
                scheduler = func;
-       be_add_module_to_list(&schedulers, name, func);
+       be_add_module_to_list(&schedulers, name, (void*)func);
 }
 
 void be_schedule_graph(ir_graph *irg)