X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fabcremoval.c;h=8331ce84fbe92dedc24e51da4ecf09ed97313fbb;hb=fb037f28a274fc2ab522ad6b6b1bb864ec0c530b;hp=c9764bad0589ea89cbe3c6552a7bf5fe457c749a;hpb=1fabd87b02f8d2e359150ed7a9e92613e60383bc;p=mono.git diff --git a/mono/mini/abcremoval.c b/mono/mini/abcremoval.c index c9764bad058..8331ce84fbe 100644 --- a/mono/mini/abcremoval.c +++ b/mono/mini/abcremoval.c @@ -13,6 +13,10 @@ #include #include +#include "config.h" + +#ifndef DISABLE_SSA + #include "inssel.h" #include "abcremoval.h" @@ -460,6 +464,9 @@ handle_load: summarize_array_value (area, value->inst_left, result, TRUE); value_kind = MONO_UNSIGNED_INTEGER_VALUE_SIZE_4; break; + case OP_LCONV_TO_I4: + value_kind = summarize_integer_value (area, value->inst_left, result, result_value_kind); + break; case OP_PHI: result->type = MONO_PHI_SUMMARIZED_VALUE; result->value.phi.number_of_alternatives = *(value->inst_phi_args); @@ -1237,7 +1244,7 @@ process_block (MonoBasicBlock *bb, MonoVariableRelationsEvaluationArea *area) { int inst_index; MonoInst *current_inst; MonoAdditionalVariableRelationsForBB additional_relations; - GList *dominated_bb; + GSList *dominated_bb; if (TRACE_ABC_REMOVAL) { printf ("Processing block %d [dfn %d]...\n", bb->block_num, bb->dfn); @@ -1260,16 +1267,13 @@ process_block (MonoBasicBlock *bb, MonoVariableRelationsEvaluationArea *area) { apply_change_to_evaluation_area (area, &(additional_relations.relation2)); inst_index = 0; - current_inst = bb->code; - while (current_inst != NULL) { + MONO_BB_FOR_EACH_INS (bb, current_inst) { if (TRACE_ABC_REMOVAL) { printf ("Processing instruction %d\n", inst_index); inst_index++; } process_inst (current_inst, area); - - current_inst = current_inst->next; } @@ -1277,7 +1281,7 @@ process_block (MonoBasicBlock *bb, MonoVariableRelationsEvaluationArea *area) { printf ("Processing block %d [dfn %d] done.\n", bb->block_num, bb->dfn); } - 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_block ((MonoBasicBlock*) (dominated_bb->data), area); } @@ -1317,18 +1321,18 @@ mono_perform_abc_removal (MonoCompile *cfg) area.cfg = cfg; area.relations = (MonoSummarizedValueRelation *) - alloca (sizeof (MonoSummarizedValueRelation) * (cfg->num_varinfo) * 2); + mono_mempool_alloc (cfg->mempool, sizeof (MonoSummarizedValueRelation) * (cfg->num_varinfo) * 2); area.contexts = (MonoRelationsEvaluationContext *) - alloca (sizeof (MonoRelationsEvaluationContext) * (cfg->num_varinfo)); + mono_mempool_alloc (cfg->mempool, sizeof (MonoRelationsEvaluationContext) * (cfg->num_varinfo)); area.variable_value_kind = (MonoIntegerValueKind *) - alloca (sizeof (MonoIntegerValueKind) * (cfg->num_varinfo)); + mono_mempool_alloc (cfg->mempool, sizeof (MonoIntegerValueKind) * (cfg->num_varinfo)); for (i = 0; i < cfg->num_varinfo; i++) { area.variable_value_kind [i] = MONO_UNKNOWN_INTEGER_VALUE; area.relations [i].relation = MONO_EQ_RELATION; area.relations [i].relation_is_static_definition = TRUE; area.relations [i].next = NULL; - if (cfg->vars [i]->def != NULL) { - MonoInst *value = get_variable_value_from_store_instruction (cfg->vars [i]->def, i); + if (MONO_VARINFO (cfg, i)->def != NULL) { + MonoInst *value = get_variable_value_from_store_instruction (MONO_VARINFO (cfg, i)->def, i); if (value != NULL) { gboolean is_array_type; MonoIntegerValueKind effective_value_kind; @@ -1386,7 +1390,7 @@ handle_integer_value: apply_value_kind_to_range (&range, effective_value_kind); if (range.upper < INT_MAX) { - type_relation = (MonoSummarizedValueRelation *) alloca (sizeof (MonoSummarizedValueRelation)); + type_relation = (MonoSummarizedValueRelation *) mono_mempool_alloc (cfg->mempool, sizeof (MonoSummarizedValueRelation)); type_relation->relation = MONO_LE_RELATION; type_relation->related_value.type = MONO_CONSTANT_SUMMARIZED_VALUE; type_relation->related_value.value.constant.value = range.upper; @@ -1398,7 +1402,7 @@ handle_integer_value: } } if (range.lower > INT_MIN) { - type_relation = (MonoSummarizedValueRelation *) alloca (sizeof (MonoSummarizedValueRelation)); + type_relation = (MonoSummarizedValueRelation *) mono_mempool_alloc (cfg->mempool, sizeof (MonoSummarizedValueRelation)); type_relation->relation = MONO_GE_RELATION; type_relation->related_value.type = MONO_CONSTANT_SUMMARIZED_VALUE; type_relation->related_value.value.constant.value = range.lower; @@ -1458,3 +1462,6 @@ handle_integer_value: process_block (cfg->bblocks [0], &area); } + +#endif /* DISABLE_SSA */ +