< prev index next >

src/share/vm/ci/ciMethodData.cpp

Print this page
rev 12906 : [mq]: gc_interface


 169   // Note:  Extra data are all BitData, and do not need translation.
 170   _current_mileage = MethodData::mileage_of(mdo->method());
 171   _invocation_counter = mdo->invocation_count();
 172   _backedge_counter = mdo->backedge_count();
 173   _state = mdo->is_mature()? mature_state: immature_state;
 174 
 175   _eflags = mdo->eflags();
 176   _arg_local = mdo->arg_local();
 177   _arg_stack = mdo->arg_stack();
 178   _arg_returned  = mdo->arg_returned();
 179 #ifndef PRODUCT
 180   if (ReplayCompiles) {
 181     ciReplay::initialize(this);
 182   }
 183 #endif
 184 }
 185 
 186 void ciReceiverTypeData::translate_receiver_data_from(const ProfileData* data) {
 187   for (uint row = 0; row < row_limit(); row++) {
 188     Klass* k = data->as_ReceiverTypeData()->receiver(row);
 189     if (k != NULL) {
 190       ciKlass* klass = CURRENT_ENV->get_klass(k);
 191       CURRENT_ENV->ensure_metadata_alive(klass);
 192       set_receiver(row, klass);
 193     }
 194   }
 195 }
 196 
 197 
 198 void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {
 199   for (int i = 0; i < number_of_entries(); i++) {
 200     intptr_t k = entries->type(i);
 201     TypeStackSlotEntries::set_type(i, translate_klass(k));
 202   }
 203 }
 204 
 205 void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
 206   intptr_t k = ret->type();
 207   set_type(translate_klass(k));
 208 }
 209 
 210 void ciSpeculativeTrapData::translate_from(const ProfileData* data) {
 211   Method* m = data->as_SpeculativeTrapData()->method();
 212   ciMethod* ci_m = CURRENT_ENV->get_method(m);
 213   CURRENT_ENV->ensure_metadata_alive(ci_m);
 214   set_method(ci_m);
 215 }
 216 
 217 // Get the data at an arbitrary (sort of) data index.
 218 ciProfileData* ciMethodData::data_at(int data_index) {
 219   if (out_of_bounds(data_index)) {
 220     return NULL;
 221   }
 222   DataLayout* data_layout = data_layout_at(data_index);
 223 
 224   switch (data_layout->tag()) {
 225   case DataLayout::no_tag:
 226   default:
 227     ShouldNotReachHere();
 228     return NULL;
 229   case DataLayout::bit_data_tag:
 230     return new ciBitData(data_layout);
 231   case DataLayout::counter_data_tag:
 232     return new ciCounterData(data_layout);
 233   case DataLayout::jump_data_tag:




 169   // Note:  Extra data are all BitData, and do not need translation.
 170   _current_mileage = MethodData::mileage_of(mdo->method());
 171   _invocation_counter = mdo->invocation_count();
 172   _backedge_counter = mdo->backedge_count();
 173   _state = mdo->is_mature()? mature_state: immature_state;
 174 
 175   _eflags = mdo->eflags();
 176   _arg_local = mdo->arg_local();
 177   _arg_stack = mdo->arg_stack();
 178   _arg_returned  = mdo->arg_returned();
 179 #ifndef PRODUCT
 180   if (ReplayCompiles) {
 181     ciReplay::initialize(this);
 182   }
 183 #endif
 184 }
 185 
 186 void ciReceiverTypeData::translate_receiver_data_from(const ProfileData* data) {
 187   for (uint row = 0; row < row_limit(); row++) {
 188     Klass* k = data->as_ReceiverTypeData()->receiver(row);

 189     ciKlass* klass = CURRENT_ENV->get_klass(k);

 190     set_receiver(row, klass);
 191   }

 192 }
 193 
 194 
 195 void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) {
 196   for (int i = 0; i < number_of_entries(); i++) {
 197     intptr_t k = entries->type(i);
 198     TypeStackSlotEntries::set_type(i, translate_klass(k));
 199   }
 200 }
 201 
 202 void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
 203   intptr_t k = ret->type();
 204   set_type(translate_klass(k));
 205 }
 206 
 207 void ciSpeculativeTrapData::translate_from(const ProfileData* data) {
 208   Method* m = data->as_SpeculativeTrapData()->method();
 209   ciMethod* ci_m = CURRENT_ENV->get_method(m);

 210   set_method(ci_m);
 211 }
 212 
 213 // Get the data at an arbitrary (sort of) data index.
 214 ciProfileData* ciMethodData::data_at(int data_index) {
 215   if (out_of_bounds(data_index)) {
 216     return NULL;
 217   }
 218   DataLayout* data_layout = data_layout_at(data_index);
 219 
 220   switch (data_layout->tag()) {
 221   case DataLayout::no_tag:
 222   default:
 223     ShouldNotReachHere();
 224     return NULL;
 225   case DataLayout::bit_data_tag:
 226     return new ciBitData(data_layout);
 227   case DataLayout::counter_data_tag:
 228     return new ciCounterData(data_layout);
 229   case DataLayout::jump_data_tag:


< prev index next >