+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
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;
}
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);
}
}
break;
case OP_REGOFFSET:
printf (" + 0x%lx", (long)ins->inst_offset);
+ break;
default:
break;
}
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;
}