/*
- * 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.
*
#include "bestat.h"
#include "beirg_t.h"
-#include <libcore/lc_opts.h>
-#include <libcore/lc_opts_enum.h>
+#include "lc_opts.h"
+#include "lc_opts_enum.h"
DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL);
} list_sched_options_t;
static list_sched_options_t list_sched_options = {
- BE_SCHED_SELECT_HEUR, /* mueller heuristic selector */
+ BE_SCHED_SELECT_NORMAL, /* mueller heuristic selector */
BE_SCHED_PREP_NONE, /* no scheduling preparation */
};
/* if irn is an End we have keep-alives and op might be a block, skip that */
if (is_Block(op)) {
- assert(get_irn_op(irn) == op_End);
+ assert(is_End(irn));
continue;
}
/* Then one can add all nodes are ready to the set. */
foreach_out_edge(block, edge) {
- ir_node *irn = get_edge_src_irn(edge);
+ ir_node *irn = get_edge_src_irn(edge);
+ ir_opcode code = get_irn_opcode(irn);
int users;
- /* Skip the end node because of keepalive edges. */
- if (get_irn_opcode(irn) == iro_End)
+ if (code == iro_End) {
+ /* Skip the end node because of keep-alive edges. */
continue;
+ } else if (code == iro_Block) {
+ /* A Block-Block edge. This should be the MacroBlock
+ * edge, ignore it. */
+ assert(get_Block_MacroBlock(irn) == block && "Block-Block edge found");
+ continue;
+ }
users = get_irn_n_edges(irn);
if (users == 0)
else if (irn == start_node) {
/* The start block will be scheduled as the first node */
add_to_sched(&be, irn);
-#ifdef SCHEDULE_PROJS
- add_tuple_projs(&be, irn);
-#endif
}
else {
/* Other nodes must have all operands in other blocks to be made
- * ready */
+ * ready */
int ready = 1;
/* Check, if the operands of a node are not local to this block */
/* Iterate over all remaining nodes */
while (ir_nodeset_size(&be.cands) > 0) {
ir_nodeset_iterator_t iter;
- /* collect statistics about amount of ready nodes */
- be_do_stat_sched_ready(block, &be.cands);
/* Keeps must be scheduled immediately */
foreach_ir_nodeset(&be.cands, irn, iter) {
/* initialize environment for list scheduler */
memset(&env, 0, sizeof(env));
- env.selector = arch_env->isa->impl->get_list_sched_selector(arch_env->isa, &sel);
+ env.selector = arch_env_get_list_sched_selector(arch_env, &sel);
env.arch_env = arch_env;
env.irg = irg;
env.sched_info = NEW_ARR_F(sched_irn_t, num_nodes);
/* initialize environment for list scheduler */
memset(&env, 0, sizeof(env));
- env.selector = arch_env->isa->impl->get_list_sched_selector(arch_env->isa, &sel);
+ env.selector = arch_env_get_list_sched_selector(arch_env, &sel);
env.arch_env = arch_env;
env.irg = irg;
env.sched_info = NEW_ARR_F(sched_irn_t, num_nodes);