comparison hotspot/src/share/vm/opto/macro.hpp @ 32370:38b7b5772b4f

8130847: Cloned object's fields observed as null after C2 escape analysis Summary: Eliminated instance/array written to by an array copy variant must be correctly initialized when reallocated at a deopt Reviewed-by: kvn, vlivanov
author roland
date Sat, 15 Aug 2015 02:54:18 +0200
parents d4e471395ff5
children 17e7b1ef5a83
comparison
equal deleted inserted replaced
19:02f7856ff01a 20:5d69ef27836c
83 void expand_allocate_array(AllocateArrayNode *alloc); 83 void expand_allocate_array(AllocateArrayNode *alloc);
84 void expand_allocate_common(AllocateNode* alloc, 84 void expand_allocate_common(AllocateNode* alloc,
85 Node* length, 85 Node* length,
86 const TypeFunc* slow_call_type, 86 const TypeFunc* slow_call_type,
87 address slow_call_address); 87 address slow_call_address);
88 Node *value_from_mem(Node *mem, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, Node *alloc); 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, Node *alloc, Node_Stack *value_phis, int level); 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 90
91 bool eliminate_boxing_node(CallStaticJavaNode *boxing); 91 bool eliminate_boxing_node(CallStaticJavaNode *boxing);
92 bool eliminate_allocate_node(AllocateNode *alloc); 92 bool eliminate_allocate_node(AllocateNode *alloc);
93 bool can_eliminate_allocation(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints); 93 bool can_eliminate_allocation(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints);
94 bool scalar_replacement(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints_done); 94 bool scalar_replacement(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints_done);
198 Node* prefetch_allocation(Node* i_o, 198 Node* prefetch_allocation(Node* i_o,
199 Node*& needgc_false, Node*& contended_phi_rawmem, 199 Node*& needgc_false, Node*& contended_phi_rawmem,
200 Node* old_eden_top, Node* new_eden_top, 200 Node* old_eden_top, Node* new_eden_top,
201 Node* length); 201 Node* length);
202 202
203 Node* make_arraycopy_load(ArrayCopyNode* ac, intptr_t offset, Node* ctl, BasicType ft, const Type *ftype, AllocateNode *alloc);
204
203 public: 205 public:
204 PhaseMacroExpand(PhaseIterGVN &igvn) : Phase(Macro_Expand), _igvn(igvn), _has_locks(false) { 206 PhaseMacroExpand(PhaseIterGVN &igvn) : Phase(Macro_Expand), _igvn(igvn), _has_locks(false) {
205 _igvn.set_delay_transform(true); 207 _igvn.set_delay_transform(true);
206 } 208 }
207 void eliminate_macro_nodes(); 209 void eliminate_macro_nodes();