1.1 --- a/src/share/vm/opto/escape.hpp Tue Nov 22 09:45:57 2011 +0100 1.2 +++ b/src/share/vm/opto/escape.hpp Mon Nov 28 15:46:31 2011 -0800 1.3 @@ -160,6 +160,7 @@ 1.4 Node* _node; // Ideal node corresponding to this PointsTo node. 1.5 int _offset; // Object fields offsets. 1.6 bool _scalar_replaceable; // Not escaped object could be replaced with scalar 1.7 + bool _has_unknown_ptr; // Has edge to phantom_object 1.8 1.9 public: 1.10 PointsToNode(): 1.11 @@ -168,6 +169,7 @@ 1.12 _edges(NULL), 1.13 _node(NULL), 1.14 _offset(-1), 1.15 + _has_unknown_ptr(false), 1.16 _scalar_replaceable(true) {} 1.17 1.18 1.19 @@ -175,6 +177,7 @@ 1.20 NodeType node_type() const { return _type;} 1.21 int offset() { return _offset;} 1.22 bool scalar_replaceable() { return _scalar_replaceable;} 1.23 + bool has_unknown_ptr() { return _has_unknown_ptr;} 1.24 1.25 void set_offset(int offs) { _offset = offs;} 1.26 void set_escape_state(EscapeState state) { _escape = state; } 1.27 @@ -183,6 +186,7 @@ 1.28 _type = ntype; 1.29 } 1.30 void set_scalar_replaceable(bool v) { _scalar_replaceable = v; } 1.31 + void set_has_unknown_ptr() { _has_unknown_ptr = true; } 1.32 1.33 // count of outgoing edges 1.34 uint edge_count() const { return (_edges == NULL) ? 0 : _edges->length(); } 1.35 @@ -250,6 +254,8 @@ 1.36 } 1.37 uint nodes_size() const { return _nodes.length(); } 1.38 1.39 + bool is_null_ptr(uint idx) const { return (idx == _noop_null || idx == _oop_null); } 1.40 + 1.41 // Add node to ConnectionGraph. 1.42 void add_node(Node *n, PointsToNode::NodeType nt, PointsToNode::EscapeState es, bool done); 1.43 1.44 @@ -333,10 +339,9 @@ 1.45 } 1.46 1.47 // Notify optimizer that a node has been modified 1.48 - // Node: This assumes that escape analysis is run before 1.49 - // PhaseIterGVN creation 1.50 void record_for_optimizer(Node *n) { 1.51 _igvn->_worklist.push(n); 1.52 + _igvn->add_users_to_worklist(n); 1.53 } 1.54 1.55 // Set the escape state of a node