< prev index next > src/hotspot/share/ci/ciMethodData.hpp
Print this page
#ifndef PRODUCT
void print_data_on(outputStream* st) const;
#endif
};
! class ciReturnTypeEntry : public ReturnTypeEntry, ciTypeEntries {
public:
! void translate_type_data_from(const ReturnTypeEntry* ret);
ciKlass* valid_type() const {
return valid_ciklass(type());
}
#ifndef PRODUCT
void print_data_on(outputStream* st) const;
#endif
};
! class ciSingleTypeEntry : public SingleTypeEntry, ciTypeEntries {
public:
! void translate_type_data_from(const SingleTypeEntry* ret);
ciKlass* valid_type() const {
return valid_ciklass(type());
}
class ciCallTypeData : public CallTypeData {
public:
ciCallTypeData(DataLayout* layout) : CallTypeData(layout) {}
ciTypeStackSlotEntries* args() const { return (ciTypeStackSlotEntries*)CallTypeData::args(); }
! ciReturnTypeEntry* ret() const { return (ciReturnTypeEntry*)CallTypeData::ret(); }
void translate_from(const ProfileData* data) {
if (has_arguments()) {
args()->translate_type_data_from(data->as_CallTypeData()->args());
}
class ciCallTypeData : public CallTypeData {
public:
ciCallTypeData(DataLayout* layout) : CallTypeData(layout) {}
ciTypeStackSlotEntries* args() const { return (ciTypeStackSlotEntries*)CallTypeData::args(); }
! ciSingleTypeEntry* ret() const { return (ciSingleTypeEntry*)CallTypeData::ret(); }
void translate_from(const ProfileData* data) {
if (has_arguments()) {
args()->translate_type_data_from(data->as_CallTypeData()->args());
}
ciKlass* receiver(uint row) const {
return rtd_super()->receiver(row);
}
ciTypeStackSlotEntries* args() const { return (ciTypeStackSlotEntries*)VirtualCallTypeData::args(); }
! ciReturnTypeEntry* ret() const { return (ciReturnTypeEntry*)VirtualCallTypeData::ret(); }
// Copy & translate from oop based VirtualCallData
virtual void translate_from(const ProfileData* data) {
rtd_super()->translate_receiver_data_from(data);
if (has_arguments()) {
ciKlass* receiver(uint row) const {
return rtd_super()->receiver(row);
}
ciTypeStackSlotEntries* args() const { return (ciTypeStackSlotEntries*)VirtualCallTypeData::args(); }
! ciSingleTypeEntry* ret() const { return (ciSingleTypeEntry*)VirtualCallTypeData::ret(); }
// Copy & translate from oop based VirtualCallData
virtual void translate_from(const ProfileData* data) {
rtd_super()->translate_receiver_data_from(data);
if (has_arguments()) {
set_intptr_at(speculative_trap_method, (intptr_t)m);
}
#ifndef PRODUCT
void print_data_on(outputStream* st, const char* extra = nullptr) const;
+ #endif
+ };
+
+ class ciArrayStoreData : public ArrayStoreData {
+ // Fake multiple inheritance... It's a ciReceiverTypeData also.
+ ciReceiverTypeData* rtd_super() const { return (ciReceiverTypeData*) this; }
+
+ public:
+ ciArrayStoreData(DataLayout* layout) : ArrayStoreData(layout) {}
+
+ ciSingleTypeEntry* array() const { return (ciSingleTypeEntry*)ArrayStoreData::array(); }
+
+ virtual void translate_from(const ProfileData* data) {
+ array()->translate_type_data_from(data->as_ArrayStoreData()->array());
+ rtd_super()->translate_receiver_data_from(data);
+ }
+
+ ciKlass* receiver(uint row) {
+ return rtd_super()->receiver(row);
+ }
+ #ifndef PRODUCT
+ void print_data_on(outputStream* st, const char* extra = nullptr) const;
+ #endif
+ };
+
+ class ciArrayLoadData : public ArrayLoadData {
+ public:
+ ciArrayLoadData(DataLayout* layout) : ArrayLoadData(layout) {}
+
+ ciSingleTypeEntry* array() const { return (ciSingleTypeEntry*)ArrayLoadData::array(); }
+ ciSingleTypeEntry* element() const { return (ciSingleTypeEntry*)ArrayLoadData::element(); }
+
+ virtual void translate_from(const ProfileData* data) {
+ array()->translate_type_data_from(data->as_ArrayLoadData()->array());
+ element()->translate_type_data_from(data->as_ArrayLoadData()->element());
+ }
+
+ #ifndef PRODUCT
+ void print_data_on(outputStream* st, const char* extra = nullptr) const;
+ #endif
+ };
+
+
+ class ciACmpData : public ACmpData {
+ public:
+ ciACmpData(DataLayout* layout) : ACmpData(layout) {}
+
+ ciSingleTypeEntry* left() const { return (ciSingleTypeEntry*)ACmpData::left(); }
+ ciSingleTypeEntry* right() const { return (ciSingleTypeEntry*)ACmpData::right(); }
+
+ virtual void translate_from(const ProfileData* data) {
+ left()->translate_type_data_from(data->as_ACmpData()->left());
+ right()->translate_type_data_from(data->as_ACmpData()->right());
+ }
+
+ #ifndef PRODUCT
+ void print_data_on(outputStream* st, const char* extra = nullptr) const;
#endif
};
// ciMethodData
//
< prev index next >