/*
- * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
* @author Matthias Braun, Mehdi
* @version $Id$
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
#include "mips_scheduler.h"
-#include "../besched_t.h"
-#include "../be.h"
+#include "../besched.h"
+#include "be.h"
#include "../beabi.h"
+#include "../belistsched.h"
#include "iredges.h"
#include "ircons.h"
#include "gen_mips_regalloc_if.h"
list_sched_selector_t mips_sched_selector;
typedef struct {
- const arch_env_t* arch_env;
pset *div_set;
/**
* This array holds an entry for each register that specifies how much cycles
/* Matze: deprecated and totally broken */
#if 0
-static void *mips_scheduler_init_graph(const list_sched_selector_t *vtab, const arch_env_t *arch_env, ir_graph *irg)
+static void *mips_scheduler_init_graph(const list_sched_selector_t *vtab, ir_graph *irg)
{
- mips_sched_env_t *sched_env = xmalloc(sizeof(sched_env[0]));
- memset(sched_env, 0, sizeof(sched_env[0]));
+ mips_sched_env_t *sched_env = XMALLOCZ(mips_sched_env_t);
- sched_env->arch_env = arch_env;
sched_env->div_set = new_pset(pset_default_ptr_cmp, 4);
return sched_env;
static ir_node *mips_scheduler_select(void *block_env, nodeset *ready_set, nodeset *live_set)
{
mips_sched_env_t *sched_env = (mips_sched_env_t*) block_env;
- const arch_env_t *arch_env = (const arch_env_t*) sched_env->arch_env;
ir_node *node = NULL;
ir_node *block = sched_env->block;
ir_node *condjmp = NULL;
// test all nodes in the ready set and take the first non-branch that
// is allowed
for (node = nodeset_first(ready_set); node != NULL; node = nodeset_next(ready_set)) {
- if (arch_irn_class_is(arch_env, node, branch)) {
+ if (arch_irn_class_is(node, branch)) {
if (is_irn_forking(node))
condjmp = node;
continue;
return condjmp;
}
node = nodeset_first(ready_set);
- assert(arch_irn_class_is(arch_env, node, branch));
+ assert(arch_irn_class_is(node, branch));
nodeset_break(ready_set);
return node;
}
static
int mips_to_appear_in_schedule(void *block_env, const ir_node *node)
{
- ir_fprintf(stderr, "check %+F\n", node);
+ (void) block_env;
+
if(!is_mips_irn(node))
return -1;
-
- if(is_mips_zero(node))
+ if(is_mips_zero(node) || is_mips_Immediate(node))
return 0;
- ir_fprintf(stderr, "Sched: %+F\n", node);
return 1;
}
/**
* Returns the reg_pressure scheduler with to_appear_in_schedule() overloaded
*/
-const list_sched_selector_t *mips_get_list_sched_selector(const void *self, list_sched_selector_t *selector)
+const list_sched_selector_t *mips_get_list_sched_selector(const void *self,
+ list_sched_selector_t *selector)
{
+ (void) self;
#if 0
memset(&mips_sched_selector, 0, sizeof(mips_sched_selector));
mips_sched_selector.init_graph = mips_scheduler_init_graph;
return &mips_selector;
}
-const ilp_sched_selector_t *mips_get_ilp_sched_selector(const void *self) {
+const ilp_sched_selector_t *mips_get_ilp_sched_selector(const void *self)
+{
+ (void) self;
return NULL;
}