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:
|