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