2009-03-28 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sat, 28 Mar 2009 08:16:49 +0000 (08:16 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sat, 28 Mar 2009 08:16:49 +0000 (08:16 -0000)
* mini-codegen.c (mono_print_ins_index): Print the vreg of the
LIVERANGE_START/END opcodes.

* method-to-ir.c (mono_spill_global_vars): Fix liverange calculation
for arguments and values in registers.

svn path=/trunk/mono/; revision=130459

mono/mini/ChangeLog
mono/mini/method-to-ir.c
mono/mini/mini-codegen.c

index c5f213bc6934cc93c580165c9511c00889b8cae0..c6978e7ee887c0bedad296101fbefd2c8f702f37 100644 (file)
@@ -1,3 +1,11 @@
+2009-03-28  Zoltan Varga  <vargaz@gmail.com>
+
+       * mini-codegen.c (mono_print_ins_index): Print the vreg of the
+       LIVERANGE_START/END opcodes.
+
+       * method-to-ir.c (mono_spill_global_vars): Fix liverange calculation
+       for arguments and values in registers.
+
 2009-03-27  Zoltan Varga  <vargaz@gmail.com>
 
        * method-to-ir.c (mono_method_to_ir): Disable tail calls for calls which
index d70e24f42fb9eaf34e832aec8152cd5a6ba8b418..3c0c2c953e867b2e05ce1eec381f690e635b054a 100644 (file)
@@ -10642,8 +10642,8 @@ mono_spill_global_vars (MonoCompile *cfg, gboolean *need_local_opts)
                                        if (var->opcode == OP_REGVAR) {
                                                sregs [srcindex] = var->dreg;
                                                //mono_inst_set_src_registers (ins, sregs);
-                                               live_range_end [var->dreg] = use_ins;
-                                               live_range_end_bb [var->dreg] = bb;
+                                               live_range_end [sreg] = use_ins;
+                                               live_range_end_bb [sreg] = bb;
                                                continue;
                                        }
 
@@ -10769,11 +10769,13 @@ mono_spill_global_vars (MonoCompile *cfg, gboolean *need_local_opts)
                if (live_range_start [vreg]) {
                        MONO_INST_NEW (cfg, ins, OP_LIVERANGE_START);
                        ins->inst_c0 = i;
+                       ins->inst_c1 = vreg;
                        mono_bblock_insert_after_ins (live_range_start_bb [vreg], live_range_start [vreg], ins);
                }
                if (live_range_end [vreg]) {
                        MONO_INST_NEW (cfg, ins, OP_LIVERANGE_END);
                        ins->inst_c0 = i;
+                       ins->inst_c1 = vreg;
                        mono_bblock_insert_after_ins (live_range_end_bb [vreg], live_range_end [vreg], ins);
                }
        }
index 655f9f2a078226fe5b21ff4137f6ce4d64d6c005..e64a644c63540e1177a31ef6c013509f6654adfb 100644 (file)
@@ -407,6 +407,7 @@ mono_print_ins_index (int i, MonoInst *ins)
                        break;
                case OP_REGOFFSET:
                        printf (" + 0x%lx", (long)ins->inst_offset);
+                       break;
                default:
                        break;
                }
@@ -582,6 +583,10 @@ mono_print_ins_index (int i, MonoInst *ins)
                                printf (" [B%dB%d]", ins->inst_true_bb->block_num, ins->inst_false_bb->block_num);
                }
                break;
+       case OP_LIVERANGE_START:
+       case OP_LIVERANGE_END:
+               printf (" R%d", (int)ins->inst_c1);
+               break;
        default:
                break;
        }