70 ProjNode *_fallthroughproj;
71 ProjNode *_fallthroughcatchproj;
72 ProjNode *_ioproj_fallthrough;
73 ProjNode *_ioproj_catchall;
74 ProjNode *_catchallcatchproj;
75 ProjNode *_memproj_fallthrough;
76 ProjNode *_memproj_catchall;
77 ProjNode *_resproj;
78
79 // Additional data collected during macro expansion
80 bool _has_locks;
81
82 void expand_allocate(AllocateNode *alloc);
83 void expand_allocate_array(AllocateArrayNode *alloc);
84 void expand_allocate_common(AllocateNode* alloc,
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,
|
70 ProjNode *_fallthroughproj;
71 ProjNode *_fallthroughcatchproj;
72 ProjNode *_ioproj_fallthrough;
73 ProjNode *_ioproj_catchall;
74 ProjNode *_catchallcatchproj;
75 ProjNode *_memproj_fallthrough;
76 ProjNode *_memproj_catchall;
77 ProjNode *_resproj;
78
79 // Additional data collected during macro expansion
80 bool _has_locks;
81
82 void expand_allocate(AllocateNode *alloc);
83 void expand_allocate_array(AllocateArrayNode *alloc);
84 void expand_allocate_common(AllocateNode* alloc,
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 Node* value_type_from_mem(Node* mem, Node* ctl, ciValueKlass* vk, const TypeAryPtr* adr_type, int offset, AllocateNode* alloc);
91
92 bool eliminate_boxing_node(CallStaticJavaNode *boxing);
93 bool eliminate_allocate_node(AllocateNode *alloc);
94 bool can_eliminate_allocation(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints);
95 bool scalar_replacement(AllocateNode *alloc, GrowableArray <SafePointNode *>& safepoints_done);
96 void process_users_of_allocation(CallNode *alloc);
97
98 void eliminate_card_mark(Node *cm);
99 void mark_eliminated_box(Node* box, Node* obj);
100 void mark_eliminated_locking_nodes(AbstractLockNode *alock);
101 bool eliminate_locking_node(AbstractLockNode *alock);
102 void expand_lock_node(LockNode *lock);
103 void expand_unlock_node(UnlockNode *unlock);
104
105 // More helper methods modeled after GraphKit for array copy
106 void insert_mem_bar(Node** ctrl, Node** mem, int opcode, Node* precedent = NULL);
107 Node* array_element_address(Node* ary, Node* idx, BasicType elembt);
108 Node* ConvI2L(Node* offset);
109 Node* make_leaf_call(Node* ctrl, Node* mem,
110 const TypeFunc* call_type, address call_addr,
|