src/share/vm/opto/valuetypenode.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/valuetypenode.hpp Tue Dec 20 14:34:23 2016
--- new/src/share/vm/opto/valuetypenode.hpp Tue Dec 20 14:34:23 2016
*** 38,53 ****
--- 38,57 ----
: TypeNode(t, Values + t->value_klass()->nof_declared_nonstatic_fields()) {
init_class_id(Class_ValueType);
init_req(Oop, oop);
}
+ ValueTypeNode(const TypeValueType* t, Node* oop, int field_count)
+ : TypeNode(t, Values + field_count) {
+ init_class_id(Class_ValueType);
+ init_req(Oop, oop);
+ }
+
// Get the klass defining the field layout of the value type
ciValueKlass* value_klass() const { return type()->is_valuetype()->value_klass(); }
// Initialize the value type by loading its field values from memory
void load_values(PhaseGVN& gvn, Node* mem, ciInstanceKlass* holder, Node* base, int base_offset = 0);
// Store the field values to memory
void store_values(GraphKit* kit, ciInstanceKlass* holder, Node* base, int base_offset = 0) const;
enum { Control, // Control input
Oop, // Oop of TypeValueTypePtr
Values // Nodes corresponding to values of the value type's fields.
// Nodes are connected in increasing order of the index of the field
*** 69,90 ****
--- 73,96 ----
// Store the value type to memory if not yet allocated and returns the oop
Node* store_to_memory(GraphKit* kit);
// Store the value type in a field of an object
void store_to_field(GraphKit* kit, ciInstanceKlass* holder, Node* obj, int field_offset) const;
+ // Store the field values to memory
+ void store_values(GraphKit* kit, ciInstanceKlass* holder, Node* base, int base_offset = 0) const;
// Get oop for heap allocated value type (may be TypePtr::NULL_PTR)
Node* get_oop() const { return in(Oop); }
void set_oop(Node* oop) { set_req(Oop, oop); }
// Value type fields
uint field_count() const { return req() - Values; }
! Node* get_field_value(uint index) const;
! Node* get_field_value_by_offset(int offset, bool recursive = false) const;
! Node* field_value(uint index) const;
! Node* field_value_by_offset(int offset, bool recursive = false) const;
void set_field_value(uint index, Node* value);
! int get_field_offset(uint index) const;
! ciType* get_field_type(uint index) const;
! int field_offset(uint index) const;
! ciType* field_type(uint index) const;
// Replace ValueTypeNodes in debug info at safepoints with SafePointScalarObjectNodes
void make_scalar_in_safepoints(Compile* C);
uint set_arguments_for_java_call(CallJavaNode* call, int base_input, const GraphKit& kit, ciValueKlass* base_vk = NULL, int base_offset = 0);
virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
src/share/vm/opto/valuetypenode.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File