hotspot/src/share/vm/ci/ciMethodData.hpp
changeset 218 a0e996680b05
parent 1 489c9b5090e2
child 670 ddf3e9583f2f
equal deleted inserted replaced
217:c646ef2f5d58 218:a0e996680b05
    28 class ciReceiverTypeData;
    28 class ciReceiverTypeData;
    29 class ciRetData;
    29 class ciRetData;
    30 class ciBranchData;
    30 class ciBranchData;
    31 class ciArrayData;
    31 class ciArrayData;
    32 class ciMultiBranchData;
    32 class ciMultiBranchData;
       
    33 class ciArgInfoData;
    33 
    34 
    34 typedef ProfileData ciProfileData;
    35 typedef ProfileData ciProfileData;
    35 
    36 
    36 class ciBitData : public BitData {
    37 class ciBitData : public BitData {
    37 public:
    38 public:
   119 class ciMultiBranchData : public MultiBranchData {
   120 class ciMultiBranchData : public MultiBranchData {
   120 public:
   121 public:
   121   ciMultiBranchData(DataLayout* layout) : MultiBranchData(layout) {};
   122   ciMultiBranchData(DataLayout* layout) : MultiBranchData(layout) {};
   122 };
   123 };
   123 
   124 
       
   125 class ciArgInfoData : public ArgInfoData {
       
   126 public:
       
   127   ciArgInfoData(DataLayout* layout) : ArgInfoData(layout) {};
       
   128 };
       
   129 
   124 // ciMethodData
   130 // ciMethodData
   125 //
   131 //
   126 // This class represents a methodDataOop in the HotSpot virtual
   132 // This class represents a methodDataOop in the HotSpot virtual
   127 // machine.
   133 // machine.
   128 
   134 
   161 
   167 
   162   ciMethodData(methodDataHandle h_md);
   168   ciMethodData(methodDataHandle h_md);
   163   ciMethodData();
   169   ciMethodData();
   164 
   170 
   165   // Accessors
   171   // Accessors
   166   int data_size() { return _data_size; }
   172   int data_size() const { return _data_size; }
   167   int extra_data_size() { return _extra_data_size; }
   173   int extra_data_size() const { return _extra_data_size; }
   168   intptr_t * data() { return _data; }
   174   intptr_t * data() const { return _data; }
   169 
   175 
   170   methodDataOop get_methodDataOop() const {
   176   methodDataOop get_methodDataOop() const {
   171     if (handle() == NULL) return NULL;
   177     if (handle() == NULL) return NULL;
   172     methodDataOop mdo = (methodDataOop)get_oop();
   178     methodDataOop mdo = (methodDataOop)get_oop();
   173     assert(mdo != NULL, "illegal use of unloaded method data");
   179     assert(mdo != NULL, "illegal use of unloaded method data");
   176 
   182 
   177   const char* type_string()                      { return "ciMethodData"; }
   183   const char* type_string()                      { return "ciMethodData"; }
   178 
   184 
   179   void print_impl(outputStream* st);
   185   void print_impl(outputStream* st);
   180 
   186 
   181   DataLayout* data_layout_at(int data_index) {
   187   DataLayout* data_layout_at(int data_index) const {
   182     assert(data_index % sizeof(intptr_t) == 0, "unaligned");
   188     assert(data_index % sizeof(intptr_t) == 0, "unaligned");
   183     return (DataLayout*) (((address)_data) + data_index);
   189     return (DataLayout*) (((address)_data) + data_index);
   184   }
   190   }
   185 
   191 
   186   bool out_of_bounds(int data_index) {
   192   bool out_of_bounds(int data_index) {
   205 
   211 
   206 
   212 
   207   // What is the index of the first data entry?
   213   // What is the index of the first data entry?
   208   int first_di() { return 0; }
   214   int first_di() { return 0; }
   209 
   215 
       
   216   ciArgInfoData *arg_info() const;
       
   217 
   210 public:
   218 public:
   211   bool is_method_data()  { return true; }
   219   bool is_method_data()  { return true; }
   212   bool is_empty() { return _state == empty_state; }
   220   bool is_empty() { return _state == empty_state; }
   213   bool is_mature() { return _state == mature_state; }
   221   bool is_mature() { return _state == mature_state; }
   214 
   222 
   268   bool eflag_set(methodDataOopDesc::EscapeFlag f) const;
   276   bool eflag_set(methodDataOopDesc::EscapeFlag f) const;
   269 
   277 
   270   void set_arg_local(int i);
   278   void set_arg_local(int i);
   271   void set_arg_stack(int i);
   279   void set_arg_stack(int i);
   272   void set_arg_returned(int i);
   280   void set_arg_returned(int i);
       
   281   void set_arg_modified(int arg, uint val);
   273 
   282 
   274   bool is_arg_local(int i) const;
   283   bool is_arg_local(int i) const;
   275   bool is_arg_stack(int i) const;
   284   bool is_arg_stack(int i) const;
   276   bool is_arg_returned(int i) const;
   285   bool is_arg_returned(int i) const;
       
   286   uint arg_modified(int arg) const;
   277 
   287 
   278   // Code generation helper
   288   // Code generation helper
   279   ByteSize offset_of_slot(ciProfileData* data, ByteSize slot_offset_in_data);
   289   ByteSize offset_of_slot(ciProfileData* data, ByteSize slot_offset_in_data);
   280   int      byte_offset_of_slot(ciProfileData* data, ByteSize slot_offset_in_data) { return in_bytes(offset_of_slot(data, slot_offset_in_data)); }
   290   int      byte_offset_of_slot(ciProfileData* data, ByteSize slot_offset_in_data) { return in_bytes(offset_of_slot(data, slot_offset_in_data)); }
   281 
   291