2007-10-19 Marek Habersack <mhabersack@novell.com>
[mono.git] / mono / mini / local-propagation.c
index 73313e3b273dcabd8360e6578c346c024ce2b515..d7e981d37c0a808bd9aa14f30387b1dd5db76264 100644 (file)
@@ -493,7 +493,9 @@ mono_cprop_copy_values (MonoCompile *cfg, TreeMover *tree_mover, MonoInst *tree,
                                *tree = *cp;
                        }
                } else {
-                       if ((tree->inst_i0->inst_vtype->type == cp->inst_vtype->type) ||
+                       MonoType *inst_i0_underlying_type = mono_type_get_underlying_type (tree->inst_i0->inst_vtype);
+                       MonoType *cp_underlying_type = mono_type_get_underlying_type (cp->inst_vtype);
+                       if ((inst_i0_underlying_type->type == cp_underlying_type->type) ||
                            (tree->type == STACK_OBJ) || (tree->type == STACK_MP)) {
                                if (cfg->opt & MONO_OPT_COPYPROP) {
                                        //{ static int c = 0; printf ("VCOPY %d\n", ++c); }
@@ -856,7 +858,7 @@ mono_local_cprop_bb (MonoCompile *cfg, TreeMover *tree_mover, MonoBasicBlock *bb
                                acp [tree->inst_i0->inst_c0] = i1;
                                tree_can_be_moved = FALSE;
                                if (MONO_DEBUG_LOCAL_PROP) {
-                                       printf ("  Consequently, ACP[%d] becomes constant ", tree->inst_i0->inst_c0);
+                                       printf ("  Consequently, ACP[%ld] becomes constant ", (long)tree->inst_i0->inst_c0);
                                        mono_print_tree (i1);
                                        printf ("\n");
                                }
@@ -1010,7 +1012,7 @@ mono_local_cprop_bb (MonoCompile *cfg, TreeMover *tree_mover, MonoBasicBlock *bb
                  if (tree->inst_i0->inst_i0->opcode == OP_ICONST &&
                  tree->inst_i0->inst_i1->opcode == OP_ICONST) {
 
-                 tree->opcode = CEE_BR;
+                 tree->opcode = OP_BR;
                  if (tree->inst_i0->inst_i0->opcode == tree->inst_i0->inst_i1->opcode) {
                  tree->inst_target_bb = tree->inst_true_bb;
                  } else {
@@ -1120,7 +1122,7 @@ apply_tree_mover (TreeMover *tree_mover, TreeMoverTreeMove *move) {
        }
        /* All tests passed, apply move */
        *(move->use) = move->definition->inst_i1;
-       move->definition->opcode = CEE_NOP;
+       move->definition->opcode = OP_NOP;
        move->definition->ssa_op = MONO_SSA_NOP;
 
        /* Then disable moves affected by this move */
@@ -1140,7 +1142,7 @@ apply_tree_mover (TreeMover *tree_mover, TreeMoverTreeMove *move) {
                                printf ("  Consequently, kill dependent definition %d: ", tree_mover_slot_to_index (tree_mover, dependency->defined_slot));
                                mono_print_tree_nl (dependency->dead_definition);
                        }
-                       dependency->dead_definition->opcode = CEE_NOP;
+                       dependency->dead_definition->opcode = OP_NOP;
                        dependency->dead_definition->ssa_op = MONO_SSA_NOP;
                }
        }