src/share/vm/oops/methodData.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/oops/methodData.hpp

src/share/vm/oops/methodData.hpp

Print this page
rev 6132 : 8026694: New type profiling points break compilation replay
Summary: fixes compilation replay with new profiling points
Reviewed-by:

*** 855,869 **** // offset of cell for stack slot for entry i within ProfileData object int stack_slot_offset(int i) const { return _base_off + stack_slot_local_offset(i); } - protected: const int _number_of_entries; // offset of cell for type for entry i within ProfileData object ! int type_offset(int i) const { return _base_off + type_local_offset(i); } public: --- 855,868 ---- // offset of cell for stack slot for entry i within ProfileData object int stack_slot_offset(int i) const { return _base_off + stack_slot_local_offset(i); } const int _number_of_entries; // offset of cell for type for entry i within ProfileData object ! int type_offset_in_cells(int i) const { return _base_off + type_local_offset(i); } public:
*** 872,881 **** --- 871,882 ---- static int compute_cell_count(Symbol* signature, bool include_receiver, int max); void post_initialize(Symbol* signature, bool has_receiver, bool include_receiver); + int number_of_entries() const { return _number_of_entries; } + // offset of cell for stack slot for entry i within this block of cells for a TypeStackSlotEntries static int stack_slot_local_offset(int i) { return i * per_arg_cell_count + stack_slot_entry; }
*** 897,923 **** } // type for entry i intptr_t type(int i) const { assert(i >= 0 && i < _number_of_entries, "oob"); ! return _pd->intptr_at(type_offset(i)); } // set type for entry i void set_type(int i, intptr_t k) { assert(i >= 0 && i < _number_of_entries, "oob"); ! _pd->set_intptr_at(type_offset(i), k); } static ByteSize per_arg_size() { return in_ByteSize(per_arg_cell_count * DataLayout::cell_size); } static int per_arg_count() { return per_arg_cell_count ; } // GC support void clean_weak_klass_links(BoolObjectClosure* is_alive_closure); #ifndef PRODUCT void print_data_on(outputStream* st) const; --- 898,928 ---- } // type for entry i intptr_t type(int i) const { assert(i >= 0 && i < _number_of_entries, "oob"); ! return _pd->intptr_at(type_offset_in_cells(i)); } // set type for entry i void set_type(int i, intptr_t k) { assert(i >= 0 && i < _number_of_entries, "oob"); ! _pd->set_intptr_at(type_offset_in_cells(i), k); } static ByteSize per_arg_size() { return in_ByteSize(per_arg_cell_count * DataLayout::cell_size); } static int per_arg_count() { return per_arg_cell_count ; } + ByteSize type_offset(int i) const { + return DataLayout::cell_offset(type_offset_in_cells(i)); + } + // GC support void clean_weak_klass_links(BoolObjectClosure* is_alive_closure); #ifndef PRODUCT void print_data_on(outputStream* st) const;
*** 1132,1141 **** --- 1137,1154 ---- // Code generation support static ByteSize args_data_offset() { return cell_offset(CounterData::static_cell_count()) + TypeEntriesAtCall::args_data_offset(); } + ByteSize argument_type_offset(int i) { + return _args.type_offset(i); + } + + ByteSize return_type_offset() { + return _ret.type_offset(); + } + // GC support virtual void clean_weak_klass_links(BoolObjectClosure* is_alive_closure) { if (has_arguments()) { _args.clean_weak_klass_links(is_alive_closure); }
*** 1445,1454 **** --- 1458,1475 ---- // Code generation support static ByteSize args_data_offset() { return cell_offset(VirtualCallData::static_cell_count()) + TypeEntriesAtCall::args_data_offset(); } + ByteSize argument_type_offset(int i) { + return _args.type_offset(i); + } + + ByteSize return_type_offset() { + return _ret.type_offset(); + } + // GC support virtual void clean_weak_klass_links(BoolObjectClosure* is_alive_closure) { ReceiverTypeData::clean_weak_klass_links(is_alive_closure); if (has_arguments()) { _args.clean_weak_klass_links(is_alive_closure);
*** 1947,1957 **** // data space in the MDO. If we run out of space, the trap data for // the ProfileData at that bci is updated. class SpeculativeTrapData : public ProfileData { protected: enum { ! method_offset, speculative_trap_cell_count }; public: SpeculativeTrapData(DataLayout* layout) : ProfileData(layout) { assert(layout->tag() == DataLayout::speculative_trap_data_tag, "wrong type"); --- 1968,1978 ---- // data space in the MDO. If we run out of space, the trap data for // the ProfileData at that bci is updated. class SpeculativeTrapData : public ProfileData { protected: enum { ! speculative_trap_method, speculative_trap_cell_count }; public: SpeculativeTrapData(DataLayout* layout) : ProfileData(layout) { assert(layout->tag() == DataLayout::speculative_trap_data_tag, "wrong type");
*** 1967,1981 **** return static_cell_count(); } // Direct accessor Method* method() const { ! return (Method*)intptr_at(method_offset); } void set_method(Method* m) { ! set_intptr_at(method_offset, (intptr_t)m); } #ifndef PRODUCT virtual void print_data_on(outputStream* st, const char* extra = NULL) const; #endif --- 1988,2006 ---- return static_cell_count(); } // Direct accessor Method* method() const { ! return (Method*)intptr_at(speculative_trap_method); } void set_method(Method* m) { ! set_intptr_at(speculative_trap_method, (intptr_t)m); ! } ! ! static ByteSize method_offset() { ! return cell_offset(speculative_trap_method); } #ifndef PRODUCT virtual void print_data_on(outputStream* st, const char* extra = NULL) const; #endif
src/share/vm/oops/methodData.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File