99 void mark_eliminated_locking_nodes(AbstractLockNode *alock); |
99 void mark_eliminated_locking_nodes(AbstractLockNode *alock); |
100 bool eliminate_locking_node(AbstractLockNode *alock); |
100 bool eliminate_locking_node(AbstractLockNode *alock); |
101 void expand_lock_node(LockNode *lock); |
101 void expand_lock_node(LockNode *lock); |
102 void expand_unlock_node(UnlockNode *unlock); |
102 void expand_unlock_node(UnlockNode *unlock); |
103 |
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); |
|
126 address basictype2arraycopy(BasicType t, |
|
127 Node* src_offset, |
|
128 Node* dest_offset, |
|
129 bool disjoint_bases, |
|
130 const char* &name, |
|
131 bool dest_uninitialized); |
|
132 Node* generate_arraycopy(ArrayCopyNode *ac, |
|
133 AllocateArrayNode* alloc, |
|
134 Node** ctrl, MergeMemNode* mem, Node** io, |
|
135 const TypePtr* adr_type, |
|
136 BasicType basic_elem_type, |
|
137 Node* src, Node* src_offset, |
|
138 Node* dest, Node* dest_offset, |
|
139 Node* copy_length, |
|
140 bool disjoint_bases = false, |
|
141 bool length_never_negative = false, |
|
142 RegionNode* slow_region = NULL); |
|
143 void generate_clear_array(Node* ctrl, MergeMemNode* merge_mem, |
|
144 const TypePtr* adr_type, |
|
145 Node* dest, |
|
146 BasicType basic_elem_type, |
|
147 Node* slice_idx, |
|
148 Node* slice_len, |
|
149 Node* dest_size); |
|
150 bool generate_block_arraycopy(Node** ctrl, MergeMemNode** mem, Node* io, |
|
151 const TypePtr* adr_type, |
|
152 BasicType basic_elem_type, |
|
153 AllocateNode* alloc, |
|
154 Node* src, Node* src_offset, |
|
155 Node* dest, Node* dest_offset, |
|
156 Node* dest_size, bool dest_uninitialized); |
|
157 MergeMemNode* generate_slow_arraycopy(ArrayCopyNode *ac, |
|
158 Node** ctrl, Node* mem, Node** io, |
|
159 const TypePtr* adr_type, |
|
160 Node* src, Node* src_offset, |
|
161 Node* dest, Node* dest_offset, |
|
162 Node* copy_length, bool dest_uninitialized); |
|
163 Node* generate_checkcast_arraycopy(Node** ctrl, MergeMemNode** mem, |
|
164 const TypePtr* adr_type, |
|
165 Node* dest_elem_klass, |
|
166 Node* src, Node* src_offset, |
|
167 Node* dest, Node* dest_offset, |
|
168 Node* copy_length, bool dest_uninitialized); |
|
169 Node* generate_generic_arraycopy(Node** ctrl, MergeMemNode** mem, |
|
170 const TypePtr* adr_type, |
|
171 Node* src, Node* src_offset, |
|
172 Node* dest, Node* dest_offset, |
|
173 Node* copy_length, bool dest_uninitialized); |
|
174 void generate_unchecked_arraycopy(Node** ctrl, MergeMemNode** mem, |
|
175 const TypePtr* adr_type, |
|
176 BasicType basic_elem_type, |
|
177 bool disjoint_bases, |
|
178 Node* src, Node* src_offset, |
|
179 Node* dest, Node* dest_offset, |
|
180 Node* copy_length, bool dest_uninitialized); |
|
181 |
|
182 void expand_arraycopy_node(ArrayCopyNode *ac); |
|
183 |
104 int replace_input(Node *use, Node *oldref, Node *newref); |
184 int replace_input(Node *use, Node *oldref, Node *newref); |
105 void copy_call_debug_info(CallNode *oldcall, CallNode * newcall); |
185 void copy_call_debug_info(CallNode *oldcall, CallNode * newcall); |
106 Node* opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path = false); |
186 Node* opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path = false); |
107 void copy_predefined_input_for_runtime_call(Node * ctrl, CallNode* oldcall, CallNode* call); |
187 void copy_predefined_input_for_runtime_call(Node * ctrl, CallNode* oldcall, CallNode* call); |
108 CallNode* make_slow_call(CallNode *oldcall, const TypeFunc* slow_call_type, address slow_call, |
188 CallNode* make_slow_call(CallNode *oldcall, const TypeFunc* slow_call_type, address slow_call, |