/*
- * 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"
#define SCHED_INITIAL_GRANULARITY (1 << 14)
-static void sched_renumber(const ir_node *block)
+static void sched_renumber(ir_node *const block)
{
sched_info_t *inf;
sched_timestep_t step = SCHED_INITIAL_GRANULARITY;
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;