#include "irtools.h"
#include "irbitset.h"
#include "irnodeset.h"
-#include "height.h"
+#include "heights.h"
#include "benode.h"
#include "besched.h"
#include "beschedmris.h"
#include "beirg.h"
-struct _mris_env_t {
+struct mris_env_t {
ir_phase ph;
- heights_t *heights;
+ ir_heights_t *heights;
ir_graph *irg;
ir_node *bl;
int visited;
DEBUG_ONLY(firm_dbg_module_t *dbg;)
};
-typedef struct _mris_irn_t {
+typedef struct mris_irn_t {
int visited;
ir_node *lineage_start;
ir_node *lineage_next;
#define get_mris_irn(env, irn) ((mris_irn_t *) phase_get_or_set_irn_data(&env->ph, irn))
#define foreach_lineage(env, pos, tmp) list_for_each_entry_safe(mris_irn_t, pos, tmp, &(env)->lineage_head, lineage_list)
-static void *mris_irn_data_init(ir_phase *ph, const ir_node *irn, void *data)
+static void *mris_irn_data_init(ir_phase *ph, const ir_node *irn)
{
- mris_irn_t *mi = data ? data : phase_alloc(ph, sizeof(mi[0]));
+ mris_irn_t *mi = phase_alloc(ph, sizeof(mi[0]));
(void) irn;
memset(mi, 0, sizeof(mi[0]));
INIT_LIST_HEAD(&mi->lineage_list);
while (lowest_desc) {
mris_irn_t *lowest_mi = get_mris_irn(env, lowest_desc);
mris_irn_t *highest_mi = get_mris_irn(env, highest_node);
- int highest_is_tuple = get_irn_mode(highest_node) == mode_T;
int n_desc;
DBG((dbg, LEVEL_2, "\tlowest descendant %+F height %d\n", lowest_desc, get_irn_height(env->heights, lowest_desc)));
/* count the number of all descendants which are not the lowest descendant */
- for (n_desc = 0; in[n_desc]; ++n_desc);
+ for (n_desc = 0; in[n_desc]; ++n_desc) {
+ }
/*
we insert a CopyKeep node to express the artificial dependencies from the lowest
int i, n;
for (i = 0, n = get_irn_ins_or_deps(lowest_desc); i < n; ++i) {
- ir_node *cmp;
-
- op = get_irn_in_or_dep(lowest_desc, i);
- cmp = highest_is_tuple ? skip_Projs(op) : op;
-
- // if (cmp == highest_node)
+ op = get_irn_in_or_dep(lowest_desc, i);
if (op == highest_node)
break;
}
return 0;
if (get_irn_mode(last) == mode_T) {
- const ir_edge_t *edge;
- foreach_out_edge(last, edge) {
- last = get_edge_src_irn(edge);
- break;
- }
+ const ir_edge_t *edge = get_irn_out_edge_first(last);
+ last = get_edge_src_irn(edge);
}
/* irn now points to the last node in lineage u; mi has the info for the node _before_ the terminator of the lineage. */
fuse_lineages(env);
}
-static int mris_edge_hook(FILE *F, ir_node *irn)
+static void mris_edge_hook(FILE *F, ir_node *irn)
{
mris_irn_t *mi = get_mris_irn(dump_env, irn);
PRINT_NODEID(irn);
fprintf(F, "\" color:lilac}\n");
}
- return 1;
}
void dump_ir_block_graph_mris(mris_env_t *env, const char *suffix)
{
- DUMP_NODE_EDGE_FUNC old = get_dump_node_edge_hook();
+ dump_node_edge_func old = get_dump_node_edge_hook();
- dump_consts_local(0);
set_dump_node_edge_hook(mris_edge_hook);
dump_env = env;
- dump_ir_block_graph(env->irg, suffix);
+ dump_ir_graph(env->irg, suffix);
set_dump_node_edge_hook(old);
}
-mris_env_t *be_sched_mris_preprocess(const be_irg_t *birg)
+mris_env_t *be_sched_mris_preprocess(ir_graph *irg)
{
mris_env_t *env = XMALLOC(mris_env_t);
- ir_graph *irg = be_get_birg_irg(birg);
- phase_init(&env->ph, "mris", irg, 2 * PHASE_DEFAULT_GROWTH, mris_irn_data_init, NULL);
+ phase_init(&env->ph, irg, mris_irn_data_init);
env->irg = irg;
env->visited = 0;
env->heights = heights_new(irg);
void be_sched_mris_free(mris_env_t *env)
{
- phase_free(&env->ph);
+ phase_deinit(&env->ph);
heights_free(env->heights);
free(env);
}