175 Node* dest, Node* dest_offset,
176 Node* copy_length, bool dest_uninitialized);
177 Node* generate_generic_arraycopy(Node** ctrl, MergeMemNode** mem,
178 const TypePtr* adr_type,
179 Node* src, Node* src_offset,
180 Node* dest, Node* dest_offset,
181 Node* copy_length, bool dest_uninitialized);
182 void generate_unchecked_arraycopy(Node** ctrl, MergeMemNode** mem,
183 const TypePtr* adr_type,
184 BasicType basic_elem_type,
185 bool disjoint_bases,
186 Node* src, Node* src_offset,
187 Node* dest, Node* dest_offset,
188 Node* copy_length, bool dest_uninitialized);
189 const TypePtr* adjust_parameters_for_vt(const TypeAryPtr* top_dest, Node*& src_offset,
190 Node*& dest_offset, Node*& length, BasicType& dest_elem,
191 Node*& dest_length);
192 void expand_arraycopy_node(ArrayCopyNode *ac);
193
194 int replace_input(Node *use, Node *oldref, Node *newref);
195 void copy_call_debug_info(CallNode *oldcall, CallNode * newcall);
196 Node* opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path = false);
197 void copy_predefined_input_for_runtime_call(Node * ctrl, CallNode* oldcall, CallNode* call);
198 CallNode* make_slow_call(CallNode *oldcall, const TypeFunc* slow_call_type, address slow_call,
199 const char* leaf_name, Node* slow_path, Node* parm0, Node* parm1,
200 Node* parm2);
201 void extract_call_projections(CallNode *call);
202
203 Node* initialize_object(AllocateNode* alloc,
204 Node* control, Node* rawmem, Node* object,
205 Node* klass_node, Node* length,
206 Node* size_in_bytes);
207
208 Node* make_arraycopy_load(ArrayCopyNode* ac, intptr_t offset, Node* ctl, Node* mem, BasicType ft, const Type *ftype, AllocateNode *alloc);
209
210 bool can_try_zeroing_elimination(AllocateArrayNode* alloc, Node* src, Node* dest) const;
211
212 public:
213 PhaseMacroExpand(PhaseIterGVN &igvn) : Phase(Macro_Expand), _igvn(igvn), _has_locks(false) {
214 _igvn.set_delay_transform(true);
215 }
|
175 Node* dest, Node* dest_offset,
176 Node* copy_length, bool dest_uninitialized);
177 Node* generate_generic_arraycopy(Node** ctrl, MergeMemNode** mem,
178 const TypePtr* adr_type,
179 Node* src, Node* src_offset,
180 Node* dest, Node* dest_offset,
181 Node* copy_length, bool dest_uninitialized);
182 void generate_unchecked_arraycopy(Node** ctrl, MergeMemNode** mem,
183 const TypePtr* adr_type,
184 BasicType basic_elem_type,
185 bool disjoint_bases,
186 Node* src, Node* src_offset,
187 Node* dest, Node* dest_offset,
188 Node* copy_length, bool dest_uninitialized);
189 const TypePtr* adjust_parameters_for_vt(const TypeAryPtr* top_dest, Node*& src_offset,
190 Node*& dest_offset, Node*& length, BasicType& dest_elem,
191 Node*& dest_length);
192 void expand_arraycopy_node(ArrayCopyNode *ac);
193
194 int replace_input(Node *use, Node *oldref, Node *newref);
195 Node* opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path = false);
196 void copy_predefined_input_for_runtime_call(Node * ctrl, CallNode* oldcall, CallNode* call);
197 CallNode* make_slow_call(CallNode *oldcall, const TypeFunc* slow_call_type, address slow_call,
198 const char* leaf_name, Node* slow_path, Node* parm0, Node* parm1,
199 Node* parm2);
200 void extract_call_projections(CallNode *call);
201
202 Node* initialize_object(AllocateNode* alloc,
203 Node* control, Node* rawmem, Node* object,
204 Node* klass_node, Node* length,
205 Node* size_in_bytes);
206
207 Node* make_arraycopy_load(ArrayCopyNode* ac, intptr_t offset, Node* ctl, Node* mem, BasicType ft, const Type *ftype, AllocateNode *alloc);
208
209 bool can_try_zeroing_elimination(AllocateArrayNode* alloc, Node* src, Node* dest) const;
210
211 public:
212 PhaseMacroExpand(PhaseIterGVN &igvn) : Phase(Macro_Expand), _igvn(igvn), _has_locks(false) {
213 _igvn.set_delay_transform(true);
214 }
|