equal
deleted
inserted
replaced
186 } else { |
186 } else { |
187 set_xxx(reg, OopMapValue::derived_oop_value, derived_from_local_register); |
187 set_xxx(reg, OopMapValue::derived_oop_value, derived_from_local_register); |
188 } |
188 } |
189 } |
189 } |
190 |
190 |
191 void OopMap::set_stack_obj(VMReg reg) { |
|
192 set_xxx(reg, OopMapValue::stack_obj, VMRegImpl::Bad()); |
|
193 } |
|
194 |
|
195 // OopMapSet |
191 // OopMapSet |
196 |
192 |
197 OopMapSet::OopMapSet() { |
193 OopMapSet::OopMapSet() { |
198 set_om_size(MinOopMapAllocation); |
194 set_om_size(MinOopMapAllocation); |
199 set_om_count(0); |
195 set_om_count(0); |
397 omv = oms.current(); |
393 omv = oms.current(); |
398 oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map); |
394 oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map); |
399 if ( loc != NULL ) { |
395 if ( loc != NULL ) { |
400 if ( omv.type() == OopMapValue::oop_value ) { |
396 if ( omv.type() == OopMapValue::oop_value ) { |
401 #ifdef ASSERT |
397 #ifdef ASSERT |
402 if (COMPILER2_PRESENT(!DoEscapeAnalysis &&) |
398 if ((((uintptr_t)loc & (sizeof(*loc)-1)) != 0) || |
403 (((uintptr_t)loc & (sizeof(*loc)-1)) != 0) || |
|
404 !Universe::heap()->is_in_or_null(*loc)) { |
399 !Universe::heap()->is_in_or_null(*loc)) { |
405 tty->print_cr("# Found non oop pointer. Dumping state at failure"); |
400 tty->print_cr("# Found non oop pointer. Dumping state at failure"); |
406 // try to dump out some helpful debugging information |
401 // try to dump out some helpful debugging information |
407 trace_codeblob_maps(fr, reg_map); |
402 trace_codeblob_maps(fr, reg_map); |
408 omv.print(); |
403 omv.print(); |
429 oop_fn->do_oop(nl); |
424 oop_fn->do_oop(nl); |
430 } |
425 } |
431 } |
426 } |
432 } |
427 } |
433 } |
428 } |
434 |
|
435 #ifdef COMPILER2 |
|
436 if (DoEscapeAnalysis) { |
|
437 for (OopMapStream oms(map, OopMapValue::stack_obj); !oms.is_done(); oms.next()) { |
|
438 omv = oms.current(); |
|
439 assert(omv.is_stack_loc(), "should refer to stack location"); |
|
440 oop loc = (oop) fr->oopmapreg_to_location(omv.reg(),reg_map); |
|
441 oop_fn->do_oop(&loc); |
|
442 } |
|
443 } |
|
444 #endif // COMPILER2 |
|
445 } |
429 } |
446 |
430 |
447 |
431 |
448 // Update callee-saved register info for the following frame |
432 // Update callee-saved register info for the following frame |
449 void OopMapSet::update_register_map(const frame *fr, RegisterMap *reg_map) { |
433 void OopMapSet::update_register_map(const frame *fr, RegisterMap *reg_map) { |
538 break; |
522 break; |
539 case OopMapValue::derived_oop_value: |
523 case OopMapValue::derived_oop_value: |
540 st->print("Derived_oop_" ); |
524 st->print("Derived_oop_" ); |
541 optional->print_on(st); |
525 optional->print_on(st); |
542 break; |
526 break; |
543 case OopMapValue::stack_obj: |
|
544 st->print("Stack"); |
|
545 break; |
|
546 default: |
527 default: |
547 ShouldNotReachHere(); |
528 ShouldNotReachHere(); |
548 } |
529 } |
549 } |
530 } |
550 |
531 |