< prev index next >

src/hotspot/share/opto/valuetypenode.hpp

Print this page

        

*** 45,57 **** }; virtual const TypeValueTypePtr* value_type_ptr() const = 0; // Get the klass defining the field layout of the value type virtual ciValueKlass* value_klass() const = 0; ! int make_scalar_in_safepoint(SafePointNode* sfpt, Node* root, PhaseGVN* gvn); ! static void make(PhaseGVN* gvn, Node* n, ValueTypeBaseNode* vt, ciValueKlass* base_vk, int base_offset, int base_input, bool in); public: // Support for control flow merges bool has_phi_inputs(Node* region); ValueTypeBaseNode* clone_with_phis(PhaseGVN* gvn, Node* region); --- 45,57 ---- }; virtual const TypeValueTypePtr* value_type_ptr() const = 0; // Get the klass defining the field layout of the value type virtual ciValueKlass* value_klass() const = 0; ! int make_scalar_in_safepoint(Unique_Node_List& worklist, SafePointNode* sfpt, Node* root, PhaseGVN* gvn); ! static void make(PhaseGVN* gvn, Node*& ctl, Node* mem, Node* n, ValueTypeBaseNode* vt, ciValueKlass* base_vk, int base_offset, int base_input, bool in); public: // Support for control flow merges bool has_phi_inputs(Node* region); ValueTypeBaseNode* clone_with_phis(PhaseGVN* gvn, Node* region);
*** 66,92 **** 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 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(Node* root, PhaseGVN* gvn); ! void store_flattened(PhaseGVN* gvn, Node* ctl, MergeMemNode* mem, Node* base, ciValueKlass* holder, int holder_offset) const; ! void store(PhaseGVN* gvn, Node* ctl, MergeMemNode* mem, Node* base, ciValueKlass* holder = NULL, int holder_offset = 0) const; // Initialize the value type by loading its field values from memory ! void load(PhaseGVN& gvn, Node* mem, Node* base, Node* ptr, ciInstanceKlass* holder, int holder_offset = 0); ! void replace_call_results(Node* call, Compile* C); ! static Node* allocate(const Type* type, ! Node*& ctl, Node*& mem, Node*& io, ! Node* frameptr, ! Node*& ex_ctl, Node*& ex_mem, Node*& ex_io, ! JVMState* jvms, PhaseIterGVN *igvn); }; //------------------------------ValueTypeNode------------------------------------- // Node representing a value type in C2 IR class ValueTypeNode : public ValueTypeBaseNode { --- 66,93 ---- 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 field_offset(uint index) const; ciType* field_type(uint index) const; + bool field_is_flattened(uint index) const; // Replace ValueTypeNodes in debug info at safepoints with SafePointScalarObjectNodes void make_scalar_in_safepoints(Node* root, PhaseGVN* gvn); ! // Store the value type as a flattened (headerless) representation ! void store_flattened(GraphKit* kit, Node* base, Node* ptr, ciInstanceKlass* holder = NULL, int holder_offset = 0) const; ! // Store the field values to memory ! void store(GraphKit* kit, Node* base, Node* ptr, ciInstanceKlass* holder, int holder_offset = 0) const; // Initialize the value type by loading its field values from memory ! void load(PhaseGVN& gvn, Node*& ctl, Node* mem, Node* base, Node* ptr, ciInstanceKlass* holder, int holder_offset = 0); ! // Allocates the value type (if not yet allocated) and returns the oop ! ValueTypeBaseNode* allocate(GraphKit* kit); ! bool is_allocated(PhaseGVN* phase) const; ! void replace_call_results(GraphKit* kit, Node* call, Compile* C); }; //------------------------------ValueTypeNode------------------------------------- // Node representing a value type in C2 IR class ValueTypeNode : public ValueTypeBaseNode {
*** 96,111 **** : ValueTypeBaseNode(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) - : ValueTypeBaseNode(t, Values + field_count) { - init_class_id(Class_ValueType); - init_req(Oop, oop); - } - // Checks if the value type is loaded from memory and if so returns the oop Node* is_loaded(PhaseGVN* phase, const TypeValueType* t, Node* base = NULL, int holder_offset = 0); const TypeValueTypePtr* value_type_ptr() const { return TypeValueTypePtr::make(bottom_type()->isa_valuetype()); } // Get the klass defining the field layout of the value type --- 97,106 ----
*** 115,142 **** // Create a new ValueTypeNode with uninitialized values static ValueTypeNode* make(PhaseGVN& gvn, ciValueKlass* klass); // Create a new ValueTypeNode with default values static Node* make_default(PhaseGVN& gvn, ciValueKlass* vk); // Create a new ValueTypeNode and load its values from an oop ! static Node* make(PhaseGVN& gvn, Node* mem, Node* oop); // Create a new ValueTypeNode and load its values from a flattened value type field or array ! static Node* make(PhaseGVN& gvn, ciValueKlass* vk, Node* mem, Node* obj, Node* ptr, ciInstanceKlass* holder = NULL, int holder_offset = 0); // Create value type node from arguments at method entry and calls ! static Node* make(PhaseGVN& gvn, Node* n, ciValueKlass* vk, int base_input, bool in); ! // Store the value type as a flattened (headerless) representation ! void store_flattened(GraphKit* kit, Node* base, Node* ptr, ciInstanceKlass* holder = NULL, int holder_offset = 0) const; ! // Store the field values to memory ! void store(GraphKit* kit, Node* base, Node* ptr, ciInstanceKlass* holder, int holder_offset = 0) const; ! ! // Allocates the value type (if not yet allocated) and returns the oop ! Node* allocate(GraphKit* kit); ! bool is_allocated(PhaseGVN* phase) const; Node* tagged_klass(PhaseGVN& gvn); void pass_klass(Node* n, uint pos, const GraphKit& kit); ! uint pass_fields(Node* call, int base_input, const GraphKit& kit, ciValueKlass* base_vk = NULL, int base_offset = 0); // Allocation optimizations void remove_redundant_allocations(PhaseIterGVN* igvn, PhaseIdealLoop* phase); virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); --- 110,133 ---- // Create a new ValueTypeNode with uninitialized values static ValueTypeNode* make(PhaseGVN& gvn, ciValueKlass* klass); // Create a new ValueTypeNode with default values static Node* make_default(PhaseGVN& gvn, ciValueKlass* vk); // Create a new ValueTypeNode and load its values from an oop ! static Node* make(GraphKit* kit, Node* oop, bool null_check = false); ! static Node* make(PhaseGVN& gvn, Node*& ctl, Node* mem, Node* oop, bool null_check = false); // Create a new ValueTypeNode and load its values from a flattened value type field or array ! static Node* make(GraphKit* kit, ciValueKlass* vk, Node* obj, Node* ptr, ciInstanceKlass* holder = NULL, int holder_offset = 0); ! static Node* make(PhaseGVN& gvn, ciValueKlass* vk, Node*& ctl, Node* mem, Node* obj, Node* ptr, ciInstanceKlass* holder = NULL, int holder_offset = 0); // Create value type node from arguments at method entry and calls ! static Node* make(PhaseGVN& gvn, Node*& ctl, Node* mem, Node* n, ciValueKlass* vk, int base_input, bool in); ! // Allocate all non-flattened value type fields ! Node* allocate_fields(GraphKit* kit); Node* tagged_klass(PhaseGVN& gvn); void pass_klass(Node* n, uint pos, const GraphKit& kit); ! uint pass_fields(Node* call, int base_input, GraphKit& kit, bool assert_allocated = false, ciValueKlass* base_vk = NULL, int base_offset = 0); // Allocation optimizations void remove_redundant_allocations(PhaseIterGVN* igvn, PhaseIdealLoop* phase); virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
*** 152,164 **** class ValueTypePtrNode : public ValueTypeBaseNode { private: ciValueKlass* value_klass() const { return type()->is_valuetypeptr()->value_type()->value_klass(); } const TypeValueTypePtr* value_type_ptr() const { return bottom_type()->isa_valuetypeptr(); } ! ValueTypePtrNode(ciValueKlass* vk, Compile* C) : ValueTypeBaseNode(TypeValueTypePtr::make(TypePtr::NotNull, vk), Values + vk->nof_declared_nonstatic_fields()) { init_class_id(Class_ValueTypePtr); C->add_value_type_ptr(this); } public: ValueTypePtrNode(ValueTypeNode* vt, Node* oop, Compile* C) --- 143,156 ---- class ValueTypePtrNode : public ValueTypeBaseNode { private: ciValueKlass* value_klass() const { return type()->is_valuetypeptr()->value_type()->value_klass(); } const TypeValueTypePtr* value_type_ptr() const { return bottom_type()->isa_valuetypeptr(); } ! ValueTypePtrNode(ciValueKlass* vk, Node* oop, Compile* C) : ValueTypeBaseNode(TypeValueTypePtr::make(TypePtr::NotNull, vk), Values + vk->nof_declared_nonstatic_fields()) { init_class_id(Class_ValueTypePtr); + init_req(Oop, oop); C->add_value_type_ptr(this); } public: ValueTypePtrNode(ValueTypeNode* vt, Node* oop, Compile* C)
*** 169,179 **** } init_req(Oop, oop); C->add_value_type_ptr(this); } ! static ValueTypePtrNode* make(PhaseGVN* gvn, CheckCastPPNode* cast); ! static ValueTypePtrNode* make(PhaseGVN& gvn, Node* mem, Node* oop); virtual int Opcode() const; }; #endif // SHARE_VM_OPTO_VALUETYPENODE_HPP --- 161,171 ---- } init_req(Oop, oop); C->add_value_type_ptr(this); } ! static ValueTypePtrNode* make(GraphKit* kit, ciValueKlass* vk, CallNode* call); ! static ValueTypePtrNode* make(PhaseGVN& gvn, Node*& ctl, Node* mem, Node* oop); virtual int Opcode() const; }; #endif // SHARE_VM_OPTO_VALUETYPENODE_HPP
< prev index next >