hotspot/src/share/vm/compiler/oopMap.cpp
changeset 953 202a1f972a92
parent 670 ddf3e9583f2f
parent 952 38812d18eec0
child 3275 bd2023eeea0a
equal deleted inserted replaced
817:cd8b8f500fac 953:202a1f972a92
   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