< prev index next >

src/hotspot/share/ci/ciMethodData.hpp

Print this page
*** 122,13 ***
  #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());
    }
  
--- 122,13 ---
  #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());
    }
  

*** 144,11 ***
  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());
      }
--- 144,11 ---
  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());
      }

*** 256,11 ***
    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()) {
--- 256,11 ---
    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()) {

*** 360,10 ***
--- 360,67 ---
  #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
  //
  // This class represents a MethodData* in the HotSpot virtual
  // machine.
  
< prev index next >