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: | 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 set_receiver(row, klass); 192 } 193 } 194 } 195 196 197 void ciTypeStackSlotEntries::translate_type_data_from(const TypeStackSlotEntries* entries) { 198 for (int i = 0; i < number_of_entries(); i++) { 199 intptr_t k = entries->type(i); 200 TypeStackSlotEntries::set_type(i, translate_klass(k)); 201 } 202 } 203 204 void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) { 205 intptr_t k = ret->type(); 206 set_type(translate_klass(k)); 207 } 208 209 void ciSpeculativeTrapData::translate_from(const ProfileData* data) { 210 Method* m = data->as_SpeculativeTrapData()->method(); 211 ciMethod* ci_m = CURRENT_ENV->get_method(m); 212 set_method(ci_m); 213 } 214 215 // Get the data at an arbitrary (sort of) data index. 216 ciProfileData* ciMethodData::data_at(int data_index) { 217 if (out_of_bounds(data_index)) { 218 return NULL; 219 } 220 DataLayout* data_layout = data_layout_at(data_index); 221 222 switch (data_layout->tag()) { 223 case DataLayout::no_tag: 224 default: 225 ShouldNotReachHere(); 226 return NULL; 227 case DataLayout::bit_data_tag: 228 return new ciBitData(data_layout); 229 case DataLayout::counter_data_tag: 230 return new ciCounterData(data_layout); 231 case DataLayout::jump_data_tag: |