85 Node* length,
86 const TypeFunc* slow_call_type,
87 address slow_call_address);
88 Node *value_from_mem(Node *mem, Node *ctl, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc);
89 Node *value_from_mem_phi(Node *mem, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc, Node_Stack *value_phis, int level);
90
91 bool eliminate_boxing_node(CallStaticJavaNode *boxing);
92 bool eliminate_allocate_node(AllocateNode *alloc);
93 bool can_eliminate_allocation(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints);
94 bool scalar_replacement(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints_done);
95 void process_users_of_allocation(CallNode *alloc);
96
97 void eliminate_card_mark(Node *cm);
98 void mark_eliminated_box(Node* box, Node* obj);
99 void mark_eliminated_locking_nodes(AbstractLockNode *alock);
100 bool eliminate_locking_node(AbstractLockNode *alock);
101 void expand_lock_node(LockNode *lock);
102 void expand_unlock_node(UnlockNode *unlock);
103
104 // More helper methods modeled after GraphKit for array copy
105 void insert_mem_bar(Node** ctrl, Node** mem, int opcode, Node* precedent = NULL);
106 Node* array_element_address(Node* ary, Node* idx, BasicType elembt);
107 Node* ConvI2L(Node* offset);
108 Node* make_leaf_call(Node* ctrl, Node* mem,
109 const TypeFunc* call_type, address call_addr,
110 const char* call_name,
111 const TypePtr* adr_type,
112 Node* parm0 = NULL, Node* parm1 = NULL,
113 Node* parm2 = NULL, Node* parm3 = NULL,
114 Node* parm4 = NULL, Node* parm5 = NULL,
115 Node* parm6 = NULL, Node* parm7 = NULL);
116
117 // helper methods modeled after LibraryCallKit for array copy
118 Node* generate_guard(Node** ctrl, Node* test, RegionNode* region, float true_prob);
119 Node* generate_slow_guard(Node** ctrl, Node* test, RegionNode* region);
120 void generate_negative_guard(Node** ctrl, Node* index, RegionNode* region);
121 void generate_limit_guard(Node** ctrl, Node* offset, Node* subseq_length, Node* array_length, RegionNode* region);
122
123 // More helper methods for array copy
124 Node* generate_nonpositive_guard(Node** ctrl, Node* index, bool never_negative);
125 void finish_arraycopy_call(Node* call, Node** ctrl, MergeMemNode** mem, const TypePtr* adr_type);
|
85 Node* length,
86 const TypeFunc* slow_call_type,
87 address slow_call_address);
88 Node *value_from_mem(Node *mem, Node *ctl, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc);
89 Node *value_from_mem_phi(Node *mem, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc, Node_Stack *value_phis, int level);
90
91 bool eliminate_boxing_node(CallStaticJavaNode *boxing);
92 bool eliminate_allocate_node(AllocateNode *alloc);
93 bool can_eliminate_allocation(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints);
94 bool scalar_replacement(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints_done);
95 void process_users_of_allocation(CallNode *alloc);
96
97 void eliminate_card_mark(Node *cm);
98 void mark_eliminated_box(Node* box, Node* obj);
99 void mark_eliminated_locking_nodes(AbstractLockNode *alock);
100 bool eliminate_locking_node(AbstractLockNode *alock);
101 void expand_lock_node(LockNode *lock);
102 void expand_unlock_node(UnlockNode *unlock);
103
104 // More helper methods modeled after GraphKit for array copy
105 void insert_mem_bar(Node** ctrl, Node** mem, Opcodes opcode, Node* precedent = NULL);
106 Node* array_element_address(Node* ary, Node* idx, BasicType elembt);
107 Node* ConvI2L(Node* offset);
108 Node* make_leaf_call(Node* ctrl, Node* mem,
109 const TypeFunc* call_type, address call_addr,
110 const char* call_name,
111 const TypePtr* adr_type,
112 Node* parm0 = NULL, Node* parm1 = NULL,
113 Node* parm2 = NULL, Node* parm3 = NULL,
114 Node* parm4 = NULL, Node* parm5 = NULL,
115 Node* parm6 = NULL, Node* parm7 = NULL);
116
117 // helper methods modeled after LibraryCallKit for array copy
118 Node* generate_guard(Node** ctrl, Node* test, RegionNode* region, float true_prob);
119 Node* generate_slow_guard(Node** ctrl, Node* test, RegionNode* region);
120 void generate_negative_guard(Node** ctrl, Node* index, RegionNode* region);
121 void generate_limit_guard(Node** ctrl, Node* offset, Node* subseq_length, Node* array_length, RegionNode* region);
122
123 // More helper methods for array copy
124 Node* generate_nonpositive_guard(Node** ctrl, Node* index, bool never_negative);
125 void finish_arraycopy_call(Node* call, Node** ctrl, MergeMemNode** mem, const TypePtr* adr_type);
|