< prev index next > src/hotspot/share/ci/ciMethodData.cpp
Print this page
TypeStackSlotEntries::set_type(i, translate_klass(k));
}
}
}
! void ciReturnTypeEntry::translate_type_data_from(const ReturnTypeEntry* ret) {
intptr_t k = ret->type();
Klass* klass = (Klass*)klass_part(k);
if (klass != nullptr && !klass->is_loader_alive()) {
// With concurrent class unloading, the MDO could have stale metadata; override it
! set_type(ReturnTypeEntry::with_status((Klass*)nullptr, k));
} else {
set_type(translate_klass(k));
}
}
TypeStackSlotEntries::set_type(i, translate_klass(k));
}
}
}
! void ciSingleTypeEntry::translate_type_data_from(const SingleTypeEntry* ret) {
intptr_t k = ret->type();
Klass* klass = (Klass*)klass_part(k);
if (klass != nullptr && !klass->is_loader_alive()) {
// With concurrent class unloading, the MDO could have stale metadata; override it
! set_type(SingleTypeEntry::with_status((Klass*)nullptr, k));
} else {
set_type(translate_klass(k));
}
}
return new ciCallTypeData(data_layout);
case DataLayout::virtual_call_type_data_tag:
return new ciVirtualCallTypeData(data_layout);
case DataLayout::parameters_type_data_tag:
return new ciParametersTypeData(data_layout);
+ case DataLayout::array_store_data_tag:
+ return new ciArrayStoreData(data_layout);
+ case DataLayout::array_load_data_tag:
+ return new ciArrayLoadData(data_layout);
+ case DataLayout::acmp_data_tag:
+ return new ciACmpData(data_layout);
};
}
// Iteration over data.
ciProfileData* ciMethodData::next_data(ciProfileData* current) {
dump_replay_data_receiver_type_helper<ciVirtualCallData>(out, round, count, vdata);
if (pdata->is_VirtualCallTypeData()) {
ciVirtualCallTypeData* call_type_data = (ciVirtualCallTypeData*)pdata;
dump_replay_data_call_type_helper<ciVirtualCallTypeData>(out, round, count, call_type_data);
}
} else if (pdata->is_ReceiverTypeData()) {
ciReceiverTypeData* vdata = (ciReceiverTypeData*)pdata;
dump_replay_data_receiver_type_helper<ciReceiverTypeData>(out, round, count, vdata);
- } else if (pdata->is_CallTypeData()) {
- ciCallTypeData* call_type_data = (ciCallTypeData*)pdata;
- dump_replay_data_call_type_helper<ciCallTypeData>(out, round, count, call_type_data);
}
}
if (parameters != nullptr) {
for (int i = 0; i < parameters->number_of_parameters(); i++) {
dump_replay_data_type_helper(out, round, count, parameters, ParametersTypeData::type_offset(i), parameters->valid_parameter_type(i));
dump_replay_data_receiver_type_helper<ciVirtualCallData>(out, round, count, vdata);
if (pdata->is_VirtualCallTypeData()) {
ciVirtualCallTypeData* call_type_data = (ciVirtualCallTypeData*)pdata;
dump_replay_data_call_type_helper<ciVirtualCallTypeData>(out, round, count, call_type_data);
}
+ } else if (pdata->is_CallTypeData()) {
+ ciCallTypeData* call_type_data = (ciCallTypeData*)pdata;
+ dump_replay_data_call_type_helper<ciCallTypeData>(out, round, count, call_type_data);
+ } else if (pdata->is_ArrayStoreData()) {
+ ciArrayStoreData* array_store_data = (ciArrayStoreData*)pdata;
+ dump_replay_data_type_helper(out, round, count, array_store_data, ciArrayStoreData::array_offset(),
+ array_store_data->array()->valid_type());
+ dump_replay_data_receiver_type_helper<ciArrayStoreData>(out, round, count, array_store_data);
+ } else if (pdata->is_ArrayLoadData()) {
+ ciArrayLoadData* array_load_data = (ciArrayLoadData*)pdata;
+ dump_replay_data_type_helper(out, round, count, array_load_data, ciArrayLoadData::array_offset(),
+ array_load_data->array()->valid_type());
+ dump_replay_data_type_helper(out, round, count, array_load_data, ciArrayLoadData::element_offset(),
+ array_load_data->element()->valid_type());
+ } else if (pdata->is_ACmpData()) {
+ ciACmpData* acmp_data = (ciACmpData*)pdata;
+ dump_replay_data_type_helper(out, round, count, acmp_data, ciACmpData::left_offset(),
+ acmp_data->left()->valid_type());
+ dump_replay_data_type_helper(out, round, count, acmp_data, ciACmpData::right_offset(),
+ acmp_data->right()->valid_type());
} else if (pdata->is_ReceiverTypeData()) {
ciReceiverTypeData* vdata = (ciReceiverTypeData*)pdata;
dump_replay_data_receiver_type_helper<ciReceiverTypeData>(out, round, count, vdata);
}
}
if (parameters != nullptr) {
for (int i = 0; i < parameters->number_of_parameters(); i++) {
dump_replay_data_type_helper(out, round, count, parameters, ParametersTypeData::type_offset(i), parameters->valid_parameter_type(i));
print_ciklass(st, type(i));
st->cr();
}
}
! void ciReturnTypeEntry::print_data_on(outputStream* st) const {
_pd->tab(st);
st->print("ret ");
print_ciklass(st, type());
st->cr();
}
print_ciklass(st, type(i));
st->cr();
}
}
! void ciSingleTypeEntry::print_data_on(outputStream* st) const {
_pd->tab(st);
st->print("ret ");
print_ciklass(st, type());
st->cr();
}
st->print_cr("ciSpeculativeTrapData");
tab(st);
method()->print_short_name(st);
st->cr();
}
+
+ void ciArrayStoreData::print_data_on(outputStream* st, const char* extra) const {
+ print_shared(st, "ciArrayStoreData", extra);
+ tab(st, true);
+ st->print("array");
+ array()->print_data_on(st);
+ tab(st, true);
+ st->print("element");
+ rtd_super()->print_receiver_data_on(st);
+ }
+
+ void ciArrayLoadData::print_data_on(outputStream* st, const char* extra) const {
+ print_shared(st, "ciArrayLoadData", extra);
+ tab(st, true);
+ st->print("array");
+ array()->print_data_on(st);
+ tab(st, true);
+ st->print("element");
+ element()->print_data_on(st);
+ }
+
+ void ciACmpData::print_data_on(outputStream* st, const char* extra) const {
+ BranchData::print_data_on(st, extra);
+ st->cr();
+ tab(st, true);
+ st->print("left");
+ left()->print_data_on(st);
+ tab(st, true);
+ st->print("right");
+ right()->print_data_on(st);
+ }
#endif
< prev index next >