projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make verifier a bit less strict about keeps
[libfirm]
/
ir
/
be
/
belistsched.c
diff --git
a/ir/be/belistsched.c
b/ir/be/belistsched.c
index
09ea4e1
..
8d2d599
100644
(file)
--- a/
ir/be/belistsched.c
+++ b/
ir/be/belistsched.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (C) 1995-200
7
University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-200
8
University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*
* This file is part of libFirm.
*
@@
-61,8
+61,8
@@
#include "bestat.h"
#include "beirg_t.h"
#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);
DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL);
@@
-452,12
+452,19
@@
static void list_sched_block(ir_node *block, void *env_ptr)
/* Then one can add all nodes are ready to the set. */
foreach_out_edge(block, edge) {
/* 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;
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;
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)
users = get_irn_n_edges(irn);
if (users == 0)
@@
-485,7
+492,7
@@
static void list_sched_block(ir_node *block, void *env_ptr)
}
else {
/* Other nodes must have all operands in other blocks to be made
}
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 */
int ready = 1;
/* Check, if the operands of a node are not local to this block */
@@
-594,7
+601,7
@@
void list_sched(be_irg_t *birg, be_options_t *be_opts)
/* initialize environment for list scheduler */
memset(&env, 0, sizeof(env));
/* 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);
env.arch_env = arch_env;
env.irg = irg;
env.sched_info = NEW_ARR_F(sched_irn_t, num_nodes);
@@
-649,7
+656,7
@@
void list_sched_single_block(const be_irg_t *birg, ir_node *block,
/* initialize environment for list scheduler */
memset(&env, 0, sizeof(env));
/* 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);
env.arch_env = arch_env;
env.irg = irg;
env.sched_info = NEW_ARR_F(sched_irn_t, num_nodes);