< prev index next >
src/hotspot/share/opto/escape.hpp
Print this page
rev 52560 : 8213615: GC/C2 abstraction for escape analysis
*** 369,380 ****
void map_ideal_node(Node *n, PointsToNode* ptn) {
assert(ptn != NULL, "only existing PointsTo node");
_nodes.at_put(n->_idx, ptn);
}
- // Utility function for nodes that load an object
- void add_objload_to_connection_graph(Node *n, Unique_Node_List *delayed_worklist);
// Create PointsToNode node and add it to Connection Graph.
void add_node_to_connection_graph(Node *n, Unique_Node_List *delayed_worklist);
// Add final simple edges to graph.
void add_final_edges(Node *n);
--- 369,378 ----
*** 509,536 ****
assert(is_new, "use should be also new");
}
return is_new;
}
- // Add LocalVar node and edge if possible
- void add_local_var_and_edge(Node* n, PointsToNode::EscapeState es, Node* to,
- Unique_Node_List *delayed_worklist) {
- PointsToNode* ptn = ptnode_adr(to->_idx);
- if (delayed_worklist != NULL) { // First iteration of CG construction
- add_local_var(n, es);
- if (ptn == NULL) {
- delayed_worklist->push(n);
- return; // Process it later.
- }
- } else {
- assert(ptn != NULL, "node should be registered");
- }
- add_edge(ptnode_adr(n->_idx), ptn);
- }
// Helper functions
bool is_oop_field(Node* n, int offset, bool* unsafe);
- Node* get_addp_base(Node *addp);
static Node* find_second_addp(Node* addp, Node* n);
// offset of a field reference
int address_offset(Node* adr, PhaseTransform *phase);
--- 507,518 ----
*** 572,585 ****
Node* phi = _node_map[idx];
return (phi == NULL) ? NULL : phi->as_Phi();
}
// Notify optimizer that a node has been modified
! void record_for_optimizer(Node *n) {
! _igvn->_worklist.push(n);
! _igvn->add_users_to_worklist(n);
! }
// Compute the escape information
bool compute_escape();
public:
--- 554,564 ----
Node* phi = _node_map[idx];
return (phi == NULL) ? NULL : phi->as_Phi();
}
// Notify optimizer that a node has been modified
! void record_for_optimizer(Node *n);
// Compute the escape information
bool compute_escape();
public:
*** 591,600 ****
--- 570,604 ----
// Perform escape analysis
static void do_analysis(Compile *C, PhaseIterGVN *igvn);
bool not_global_escape(Node *n);
+ // To be used by, e.g., BarrierSetC2 impls
+ Node* get_addp_base(Node* addp);
+
+ // Utility function for nodes that load an object
+ void add_objload_to_connection_graph(Node* n, Unique_Node_List* delayed_worklist);
+
+ // Add LocalVar node and edge if possible
+ void add_local_var_and_edge(Node* n, PointsToNode::EscapeState es, Node* to,
+ Unique_Node_List *delayed_worklist) {
+ PointsToNode* ptn = ptnode_adr(to->_idx);
+ if (delayed_worklist != NULL) { // First iteration of CG construction
+ add_local_var(n, es);
+ if (ptn == NULL) {
+ delayed_worklist->push(n);
+ return; // Process it later.
+ }
+ } else {
+ assert(ptn != NULL, "node should be registered");
+ }
+ add_edge(ptnode_adr(n->_idx), ptn);
+ }
+
+ void add_to_congraph_unsafe_access(Node* n, uint opcode, Unique_Node_List* delayed_worklist);
+ bool add_final_edges_unsafe_access(Node* n, uint opcode);
+
#ifndef PRODUCT
void dump(GrowableArray<PointsToNode*>& ptnodes_worklist);
#endif
};
< prev index next >