[sockets] Fixed reading blocking flag
[mono.git] / mono / mini / ssapre.c
index 9c2ef0bd322c0ae237955f8e970d363e347652cd..df1eaff9f4852e6dee6ae48699ab66d249e76d5b 100644 (file)
 #include <string.h>
 #include <stdio.h>
 #include <math.h>
+#ifdef HAVE_ALLOCA_H
+#include <alloca.h>
+#endif
 
 #include <mono/metadata/debug-helpers.h>
 #include <mono/metadata/opcodes.h>
 
-#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 {
@@ -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,7 +871,6 @@ 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) {
@@ -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 */