#include <mono/metadata/mempool.h>
#include <mono/metadata/opcodes.h>
+#include "config.h"
+
+#ifndef DISABLE_SSA
+
#include "inssel.h"
#include "abcremoval.h"
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);
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);
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;
}
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);
}
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;
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;
}
}
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;
process_block (cfg->bblocks [0], &area);
}
+
+#endif /* DISABLE_SSA */
+