X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fssapre.c;h=df1eaff9f4852e6dee6ae48699ab66d249e76d5b;hb=45890e8b46ac438d2b8ccc1bd0d74eea31870de1;hp=f3de77cbb948200977d24fd7a6133d31f1ce91c5;hpb=a097b5471761180c4aae2dab224ed9caeeae3e86;p=mono.git diff --git a/mono/mini/ssapre.c b/mono/mini/ssapre.c index f3de77cbb94..df1eaff9f48 100644 --- a/mono/mini/ssapre.c +++ b/mono/mini/ssapre.c @@ -10,14 +10,22 @@ #include #include #include +#ifdef HAVE_ALLOCA_H +#include +#endif #include #include -#include "inssel.h" +#include "config.h" #include "ssapre.h" +/* Disable for now to save space since it is not yet ported to linear IR */ +#if 0 + +#ifndef DISABLE_SSA + /* Logging conditions */ #define DUMP_LEVEL (4) #define TRACE_LEVEL (3) @@ -270,9 +278,8 @@ static void dump_code (MonoSsapreWorkArea *area) { MonoInst *current_inst; print_bb_info (current_bb, TRUE); - for (current_inst = current_bb->bb->code; current_inst != NULL; current_inst = current_inst->next) { + MONO_BB_FOR_EACH_INS (current_bb->bb, current_inst) mono_print_tree_nl (current_inst); - } } } @@ -409,7 +416,7 @@ convert_ssa_variables_to_original_names (MonoSsapreExpressionDescription *result result->left_argument = expression->left_argument; } else { result->left_argument.type = MONO_SSAPRE_EXPRESSION_ARGUMENT_ORIGINAL_VARIABLE; - original_variable = cfg->vars [expression->left_argument.argument.ssa_variable]->reg; + original_variable = MONO_VARINFO (cfg, expression->left_argument.argument.ssa_variable)->reg; if (original_variable >= 0) { result->left_argument.argument.original_variable = original_variable; } else { @@ -420,7 +427,7 @@ convert_ssa_variables_to_original_names (MonoSsapreExpressionDescription *result result->right_argument = expression->right_argument; } else { result->right_argument.type = MONO_SSAPRE_EXPRESSION_ARGUMENT_ORIGINAL_VARIABLE; - original_variable = cfg->vars [expression->right_argument.argument.ssa_variable]->reg; + original_variable = MONO_VARINFO (cfg, expression->right_argument.argument.ssa_variable)->reg; if (original_variable >= 0) { result->right_argument.argument.original_variable = original_variable; } else { @@ -462,7 +469,7 @@ is_phi_definition (MonoInst *definition) { * Given a variable index, checks if it is a phi definition * (it assumes the "area" is visible). */ -#define IS_PHI_DEFINITION(v) is_phi_definition (area->cfg->vars [v]->def) +#define IS_PHI_DEFINITION(v) is_phi_definition (MONO_VARINFO (area->cfg, v)->def) /* * Given a variable index, checks if it is a phi definition. @@ -471,7 +478,7 @@ is_phi_definition (MonoInst *definition) { */ static int* get_phi_definition (MonoCompile *cfg, gssize variable) { - MonoInst *definition = cfg->vars [variable]->def; + MonoInst *definition = MONO_VARINFO (cfg, variable)->def; if (is_phi_definition (definition) && (definition->inst_left->inst_c0 == variable)) { return definition->inst_right->inst_phi_args; } else { @@ -487,7 +494,7 @@ get_phi_definition (MonoCompile *cfg, gssize variable) { */ static MonoSsapreBBInfo* get_bb_info_of_definition (MonoSsapreWorkArea *area, gssize variable) { - MonoBasicBlock *def_bb = area->cfg->vars [variable]->def_bb; + MonoBasicBlock *def_bb = MONO_VARINFO (area->cfg, variable)->def_bb; if (def_bb != NULL) { return area->bb_infos_in_cfg_dfn_order [def_bb->dfn]; } else { @@ -804,7 +811,7 @@ static void process_bb (MonoSsapreWorkArea *area, MonoBasicBlock *bb, int *dt_dfn, int *upper_descendants, int current_depth) { MonoSsapreBBInfo *bb_info; int descendants; - GList *dominated_bb; + GSList *dominated_bb; MonoInst* current_inst; MonoInst* previous_inst; MonoSsapreFatherExpression** dummy_father_in_tree; @@ -824,9 +831,8 @@ process_bb (MonoSsapreWorkArea *area, MonoBasicBlock *bb, int *dt_dfn, int *uppe bb_info->phi_insertion_point = NULL; - current_inst = bb->code; previous_inst = NULL; - while (current_inst != NULL) { + MONO_BB_FOR_EACH_INS (bb, current_inst) { /* Ugly hack to fix missing variable definitions */ /* (the SSA construction code should have done it already!) */ switch (current_inst->opcode) { @@ -841,11 +847,11 @@ process_bb (MonoSsapreWorkArea *area, MonoBasicBlock *bb, int *dt_dfn, int *uppe if ((current_inst->inst_left->opcode == OP_LOCAL) || (current_inst->inst_left->opcode == OP_ARG)) { int variable_index = current_inst->inst_left->inst_c0; - if (area->cfg->vars [variable_index]->def_bb == NULL) { + if (MONO_VARINFO (area->cfg, variable_index)->def_bb == NULL) { if (area->cfg->verbose_level >= 4) { printf ("SSAPRE WARNING: variable %d has no definition, fixing.\n", variable_index); } - area->cfg->vars [variable_index]->def_bb = bb_info->bb; + MONO_VARINFO (area->cfg, variable_index)->def_bb = bb_info->bb; } } break; @@ -865,14 +871,13 @@ process_bb (MonoSsapreWorkArea *area, MonoBasicBlock *bb, int *dt_dfn, int *uppe } previous_inst = current_inst; - current_inst = current_inst->next; } if (current_depth > area->dt_depth) { area->dt_depth = current_depth; } descendants = 0; - for (dominated_bb = g_list_first (bb->dominated); dominated_bb != NULL; dominated_bb = g_list_next (dominated_bb)) { + for (dominated_bb = bb->dominated; dominated_bb != NULL; dominated_bb = dominated_bb->next) { process_bb (area, (MonoBasicBlock*) (dominated_bb->data), dt_dfn, &descendants, current_depth + 1); } bb_info->dt_descendants = descendants; @@ -984,7 +989,7 @@ static void process_phi_variable_in_phi_insertion (MonoSsapreWorkArea *area, gss int* phi_definition = get_phi_definition (area->cfg, variable); if (phi_definition != NULL) { - int definition_bb = area->cfg->vars [variable]->def_bb->dfn; + int definition_bb = MONO_VARINFO (area->cfg, variable)->def_bb->dfn; if (! mono_bitset_test (phi_bbs, definition_bb)) { int i; mono_bitset_set (phi_bbs, definition_bb); @@ -1843,8 +1848,8 @@ static void code_motion (MonoSsapreWorkArea *area) { if (original_variable_index == BOTTOM_REDUNDANCY_CLASS) { original_variable_index = new_var->inst_c0; } - area->cfg->vars [new_var->inst_c0]->reg = original_variable_index; - area->cfg->vars [new_var->inst_c0]->def_bb = current_bb->bb; + MONO_VARINFO (area->cfg, new_var->inst_c0)->reg = original_variable_index; + MONO_VARINFO (area->cfg, new_var->inst_c0)->def_bb = current_bb->bb; } else { current_bb->phi_variable_index = BOTTOM_REDUNDANCY_CLASS; } @@ -1859,8 +1864,8 @@ static void code_motion (MonoSsapreWorkArea *area) { if (original_variable_index == BOTTOM_REDUNDANCY_CLASS) { original_variable_index = new_var->inst_c0; } - area->cfg->vars [new_var->inst_c0]->reg = original_variable_index; - area->cfg->vars [new_var->inst_c0]->def_bb = current_bb->bb; + MONO_VARINFO (area->cfg, new_var->inst_c0)->reg = original_variable_index; + MONO_VARINFO (area->cfg, new_var->inst_c0)->def_bb = current_bb->bb; } else { current_expression->variable_index = BOTTOM_REDUNDANCY_CLASS; } @@ -1872,8 +1877,8 @@ static void code_motion (MonoSsapreWorkArea *area) { if (original_variable_index == BOTTOM_REDUNDANCY_CLASS) { original_variable_index = new_var->inst_c0; } - area->cfg->vars [new_var->inst_c0]->reg = original_variable_index; - area->cfg->vars [new_var->inst_c0]->def_bb = current_bb->bb; + MONO_VARINFO (area->cfg, new_var->inst_c0)->reg = original_variable_index; + MONO_VARINFO (area->cfg, new_var->inst_c0)->def_bb = current_bb->bb; } else { current_bb->phi_argument_variable_index = BOTTOM_REDUNDANCY_CLASS; } @@ -1886,7 +1891,7 @@ static void code_motion (MonoSsapreWorkArea *area) { int in_bb; NEW_INST (phi, OP_PHI); - phi->inst_c0 = area->cfg->vars [current_bb->phi_variable_index]->reg; + phi->inst_c0 = MONO_VARINFO (area->cfg, current_bb->phi_variable_index)->reg; phi->inst_phi_args = mono_mempool_alloc (area->cfg->mempool, (sizeof (int) * ((current_bb->in_count) + 1))); phi->inst_phi_args [0] = current_bb->in_count; for (in_bb = 0; in_bb < current_bb->in_count; in_bb++) { @@ -1911,7 +1916,7 @@ static void code_motion (MonoSsapreWorkArea *area) { store->next = current_bb->bb->code; current_bb->bb->code = store; } - area->cfg->vars [current_bb->phi_variable_index]->def = store; + MONO_VARINFO (area->cfg, current_bb->phi_variable_index)->def = store; current_bb->phi_insertion_point = store; area->added_phis ++; @@ -1931,7 +1936,7 @@ static void code_motion (MonoSsapreWorkArea *area) { store->next = current_bb->bb->code; current_bb->bb->code = store; } - area->cfg->vars [current_expression->variable_index]->def = store; + MONO_VARINFO (area->cfg, current_expression->variable_index)->def = store; mono_compile_make_var_load (area->cfg, current_expression->occurrence, current_expression->variable_index); if (current_expression->father_in_tree != NULL) { handle_father_expression (area, current_expression, store); @@ -1980,7 +1985,7 @@ static void code_motion (MonoSsapreWorkArea *area) { inserted_expression = create_expression (area, &expression_description, &prototype_occurrence); store = mono_compile_create_var_store (area->cfg, current_bb->phi_argument_variable_index, inserted_expression); - area->cfg->vars [current_bb->phi_argument_variable_index]->def = store; + MONO_VARINFO (area->cfg, current_bb->phi_argument_variable_index)->def = store; store->next = NULL; mono_add_ins_to_end (current_bb->bb, store); @@ -2103,9 +2108,7 @@ mono_perform_ssapre (MonoCompile *cfg) { printf ("SSAPRE STARTS PROCESSING METHOD %s\n", mono_method_full_name (cfg->method, TRUE)); } if (area.cfg->verbose_level >= DUMP_LEVEL) { - printf ("BEFORE SSAPRE START\n"); - mono_print_code (area.cfg); - printf ("BEFORE SSAPRE END\n"); + mono_print_code (area.cfg, "BEFORE SSAPRE"); } area.first_in_queue = NULL; @@ -2145,9 +2148,7 @@ mono_perform_ssapre (MonoCompile *cfg) { } if (area.cfg->verbose_level >= DUMP_LEVEL) { - printf ("AFTER SSAPRE START\n"); - mono_print_code (area.cfg); - printf ("AFTER SSAPRE END\n"); + mono_print_code (area.cfg, "AFTER SSAPRE"); } if (area.cfg->verbose_level >= TRACE_LEVEL) { printf ("SSAPRE ENDS PROCESSING METHOD %s\n", mono_method_full_name (cfg->method, TRUE)); @@ -2155,3 +2156,14 @@ mono_perform_ssapre (MonoCompile *cfg) { mono_mempool_destroy (area.mempool); } + +#endif /* DISABLE_SSA */ + +#else /* 0 */ + +void +mono_perform_ssapre (MonoCompile *cfg) +{ +} + +#endif /* 0 */