X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Flinear-scan.c;h=998c082c284b93d6b6d56e00c040f5c20d32aab5;hb=HEAD;hp=d778ab5fc73f700a880ab4f65618a59172e62a66;hpb=e41cdd1666eb179e2a9bc83820f361fa5a56ceec;p=mono.git diff --git a/mono/mini/linear-scan.c b/mono/mini/linear-scan.c index d778ab5fc73..998c082c284 100644 --- a/mono/mini/linear-scan.c +++ b/mono/mini/linear-scan.c @@ -1,5 +1,6 @@ -/* - * liveness.c: liveness analysis +/** + * \file + * liveness analysis * * Author: * Dietmar Maurer (dietmar@ximian.com) @@ -9,6 +10,7 @@ #include "mini.h" #include +#include #ifndef DISABLE_JIT @@ -23,7 +25,7 @@ mono_varlist_insert_sorted (MonoCompile *cfg, GList *list, MonoMethodVar *mv, in return g_list_prepend (NULL, mv); for (l = list; l; l = l->next) { - MonoMethodVar *v1 = l->data; + MonoMethodVar *v1 = (MonoMethodVar *)l->data; if (sort_type == 2) { if (mv->spill_costs >= v1->spill_costs) { @@ -81,9 +83,11 @@ mono_linear_scan (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_ma gboolean cost_driven; if (!cfg->disable_reuse_registers && vars && (((MonoMethodVar*)vars->data)->interval != NULL)) { - mono_linear_scan2 (cfg, vars, regs, used_mask); - return; - } + mono_linear_scan2 (cfg, vars, regs, used_mask); + g_list_free (regs); + g_list_free (vars); + return; + } cost_driven = TRUE; @@ -108,7 +112,7 @@ mono_linear_scan (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_ma /* linear scan */ for (l = vars; l; l = l->next) { - vmv = l->data; + vmv = (MonoMethodVar *)l->data; #ifdef DEBUG_LSCAN printf ("START %2d %08x %08x\n", vmv->idx, vmv->range.first_use.abs_pos, @@ -199,7 +203,7 @@ mono_linear_scan (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_ma n_regvars = 0; for (l = vars; l; l = l->next) { - vmv = l->data; + vmv = (MonoMethodVar *)l->data; if (vmv->reg >= 0) { if ((gains [vmv->reg] > mono_arch_regalloc_cost (cfg, vmv)) && (cfg->varinfo [vmv->idx]->opcode != OP_REGVAR)) { @@ -227,7 +231,7 @@ mono_linear_scan (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_ma /* Compute used regs */ used_regs = 0; for (l = vars; l; l = l->next) { - vmv = l->data; + vmv = (MonoMethodVar *)l->data; if (vmv->reg >= 0) used_regs |= 1LL << vmv->reg; @@ -288,7 +292,7 @@ mono_linear_scan2 (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_m int n_regs, n_regvars, i; for (l = vars; l; l = l->next) { - vmv = l->data; + vmv = (MonoMethodVar *)l->data; LSCAN_DEBUG (printf ("VAR R%d %08x %08x C%d\n", cfg->varinfo [vmv->idx]->dreg, vmv->range.first_use.abs_pos, vmv->range.last_use.abs_pos, vmv->spill_costs)); } @@ -302,7 +306,7 @@ mono_linear_scan2 (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_m inactive = NULL; while (unhandled) { - MonoMethodVar *current = unhandled->data; + MonoMethodVar *current = (MonoMethodVar *)unhandled->data; int pos, reg, max_free_pos; gboolean changed; @@ -470,7 +474,7 @@ mono_linear_scan2 (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_m /* Do the actual register assignment */ n_regvars = 0; for (l = vars; l; l = l->next) { - vmv = l->data; + vmv = (MonoMethodVar *)l->data; if (vmv->reg >= 0) { int reg_index = vmv->reg; @@ -498,7 +502,7 @@ mono_linear_scan2 (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_m /* Compute used regs */ used_regs = 0; for (l = vars; l; l = l->next) { - vmv = l->data; + vmv = (MonoMethodVar *)l->data; if (vmv->reg >= 0) used_regs |= 1LL << vmv->reg; @@ -510,4 +514,8 @@ mono_linear_scan2 (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_m g_list_free (inactive); } -#endif /* #ifndef DISABLE_JIT */ +#else /* !DISABLE_JIT */ + +MONO_EMPTY_SOURCE_FILE (linear_scan); + +#endif /* !DISABLE_JIT */