252 // Edge manipulation. The "from_i" and "to_i" arguments are the
253 // node indices of the source and destination of the edge
254 void add_pointsto_edge(uint from_i, uint to_i);
255 void add_deferred_edge(uint from_i, uint to_i);
256 void add_field_edge(uint from_i, uint to_i, int offs);
257
258
259 // Add an edge to node given by "to_i" from any field of adr_i whose offset
260 // matches "offset" A deferred edge is added if to_i is a LocalVar, and
261 // a pointsto edge is added if it is a JavaObject
262 void add_edge_from_fields(uint adr, uint to_i, int offs);
263
264 // Add a deferred edge from node given by "from_i" to any field
265 // of adr_i whose offset matches "offset"
266 void add_deferred_edge_to_fields(uint from_i, uint adr, int offs);
267
268
269 // Remove outgoing deferred edges from the node referenced by "ni".
270 // Any outgoing edges from the target of the deferred edge are copied
271 // to "ni".
272 void remove_deferred(uint ni);
273
274 Node_Array _node_map; // used for bookeeping during type splitting
275 // Used for the following purposes:
276 // Memory Phi - most recent unique Phi split out
277 // from this Phi
278 // MemNode - new memory input for this node
279 // ChecCastPP - allocation that this is a cast of
280 // allocation - CheckCastPP of the allocation
281 void split_AddP(Node *addp, Node *base, PhaseGVN *igvn);
282 PhiNode *create_split_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn, bool &new_created);
283 PhiNode *split_memory_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn);
284 Node *find_mem(Node *mem, int alias_idx, PhaseGVN *igvn);
285 Node *find_inst_mem(Node *mem, int alias_idx,GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn);
286
287 // Propagate unique types created for unescaped allocated objects
288 // through the graph
289 void split_unique_types(GrowableArray<Node *> &alloc_worklist);
290
291 // manage entries in _node_map
292 void set_map(int idx, Node *n) { _node_map.map(idx, n); }
|
252 // Edge manipulation. The "from_i" and "to_i" arguments are the
253 // node indices of the source and destination of the edge
254 void add_pointsto_edge(uint from_i, uint to_i);
255 void add_deferred_edge(uint from_i, uint to_i);
256 void add_field_edge(uint from_i, uint to_i, int offs);
257
258
259 // Add an edge to node given by "to_i" from any field of adr_i whose offset
260 // matches "offset" A deferred edge is added if to_i is a LocalVar, and
261 // a pointsto edge is added if it is a JavaObject
262 void add_edge_from_fields(uint adr, uint to_i, int offs);
263
264 // Add a deferred edge from node given by "from_i" to any field
265 // of adr_i whose offset matches "offset"
266 void add_deferred_edge_to_fields(uint from_i, uint adr, int offs);
267
268
269 // Remove outgoing deferred edges from the node referenced by "ni".
270 // Any outgoing edges from the target of the deferred edge are copied
271 // to "ni".
272 void remove_deferred(uint ni, GrowableArray<uint>* deferred_edges, VectorSet* visited);
273
274 Node_Array _node_map; // used for bookeeping during type splitting
275 // Used for the following purposes:
276 // Memory Phi - most recent unique Phi split out
277 // from this Phi
278 // MemNode - new memory input for this node
279 // ChecCastPP - allocation that this is a cast of
280 // allocation - CheckCastPP of the allocation
281 void split_AddP(Node *addp, Node *base, PhaseGVN *igvn);
282 PhiNode *create_split_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn, bool &new_created);
283 PhiNode *split_memory_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn);
284 Node *find_mem(Node *mem, int alias_idx, PhaseGVN *igvn);
285 Node *find_inst_mem(Node *mem, int alias_idx,GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn);
286
287 // Propagate unique types created for unescaped allocated objects
288 // through the graph
289 void split_unique_types(GrowableArray<Node *> &alloc_worklist);
290
291 // manage entries in _node_map
292 void set_map(int idx, Node *n) { _node_map.map(idx, n); }
|