hotspot/src/share/vm/c1/c1_LinearScan.cpp
changeset 24669 14439491d407
parent 24018 77b156916bab
child 25715 d5a8dbdc5150
equal deleted inserted replaced
24488:6872367f4335 24669:14439491d407
  2380 
  2380 
  2381   int frame_size = frame_map()->framesize();
  2381   int frame_size = frame_map()->framesize();
  2382   int arg_count = frame_map()->oop_map_arg_count();
  2382   int arg_count = frame_map()->oop_map_arg_count();
  2383   OopMap* map = new OopMap(frame_size, arg_count);
  2383   OopMap* map = new OopMap(frame_size, arg_count);
  2384 
  2384 
  2385   // Check if this is a patch site.
       
  2386   bool is_patch_info = false;
       
  2387   if (op->code() == lir_move) {
       
  2388     assert(!is_call_site, "move must not be a call site");
       
  2389     assert(op->as_Op1() != NULL, "move must be LIR_Op1");
       
  2390     LIR_Op1* move = (LIR_Op1*)op;
       
  2391 
       
  2392     is_patch_info = move->patch_code() != lir_patch_none;
       
  2393   }
       
  2394 
       
  2395   // Iterate through active intervals
  2385   // Iterate through active intervals
  2396   for (Interval* interval = iw->active_first(fixedKind); interval != Interval::end(); interval = interval->next()) {
  2386   for (Interval* interval = iw->active_first(fixedKind); interval != Interval::end(); interval = interval->next()) {
  2397     int assigned_reg = interval->assigned_reg();
  2387     int assigned_reg = interval->assigned_reg();
  2398 
  2388 
  2399     assert(interval->current_from() <= op->id() && op->id() <= interval->current_to(), "interval should not be active otherwise");
  2389     assert(interval->current_from() <= op->id() && op->id() <= interval->current_to(), "interval should not be active otherwise");
  2404     // start or end at the current operation are not included in the
  2394     // start or end at the current operation are not included in the
  2405     // oop map, except in the case of patching moves.  For patching
  2395     // oop map, except in the case of patching moves.  For patching
  2406     // moves, any intervals which end at this instruction are included
  2396     // moves, any intervals which end at this instruction are included
  2407     // in the oop map since we may safepoint while doing the patch
  2397     // in the oop map since we may safepoint while doing the patch
  2408     // before we've consumed the inputs.
  2398     // before we've consumed the inputs.
  2409     if (is_patch_info || op->id() < interval->current_to()) {
  2399     if (op->is_patching() || op->id() < interval->current_to()) {
  2410 
  2400 
  2411       // caller-save registers must not be included into oop-maps at calls
  2401       // caller-save registers must not be included into oop-maps at calls
  2412       assert(!is_call_site || assigned_reg >= nof_regs || !is_caller_save(assigned_reg), "interval is in a caller-save register at a call -> register will be overwritten");
  2402       assert(!is_call_site || assigned_reg >= nof_regs || !is_caller_save(assigned_reg), "interval is in a caller-save register at a call -> register will be overwritten");
  2413 
  2403 
  2414       VMReg name = vm_reg_for_interval(interval);
  2404       VMReg name = vm_reg_for_interval(interval);