src/share/vm/opto/escape.hpp

Print this page




 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); }