< prev index next >

src/share/vm/opto/loopnode.hpp

Print this page

        

*** 569,582 **** --- 569,584 ---- int is_postvisited( Node *n ) const { assert( is_visited(n), "" ); return _preorders[n->_idx]&1; } // Mark as post visited void set_postvisited( Node *n ) { assert( !is_postvisited( n ), "" ); _preorders[n->_idx] |= 1; } + public: // Set/get control node out. Set lower bit to distinguish from IdealLoopTree // Returns true if "n" is a data node, false if it's a control node. bool has_ctrl( Node *n ) const { return ((intptr_t)_nodes[n->_idx]) & 1; } + private: // clear out dead code after build_loop_late Node_List _deadlist; // Support for faster execution of get_late_ctrl()/dom_lca() // when a node has many uses and dominator depth is deep.
*** 745,754 **** --- 747,757 ---- n = (Node*)(((intptr_t)_nodes[n->_idx]) & ~1); assert(n != NULL,"Bad immediate dominator info."); } return n; } + public: Node *idom(Node* d) const { uint didx = d->_idx; Node *n = idom_no_update(d); _idom[didx] = n; // Lazily remove dead CFG nodes from table. return n;
*** 757,766 **** --- 760,771 ---- guarantee(d != NULL, "Null dominator info."); guarantee(d->_idx < _idom_size, ""); return _dom_depth[d->_idx]; } void set_idom(Node* d, Node* n, uint dom_depth); + + private: // Locally compute IDOM using dom_lca call Node *compute_idom( Node *region ) const; // Recompute dom_depth void recompute_dom_depth();
*** 1040,1049 **** --- 1045,1055 ---- // Split Node 'n' through merge point Node *split_thru_region( Node *n, Node *region ); // Split Node 'n' through merge point if there is enough win. Node *split_thru_phi( Node *n, Node *region, int policy ); + // Found an If getting its condition-code input from a Phi in the // same block. Split thru the Region. void do_split_if( Node *iff ); // Conversion of fill/copy patterns into intrisic versions
*** 1074,1088 **** void register_new_node( Node *n, Node *blk ); #ifdef ASSERT void dump_bad_graph(const char* msg, Node* n, Node* early, Node* LCA); #endif #ifndef PRODUCT void dump( ) const; void dump( IdealLoopTree *loop, uint rpo_idx, Node_List &rpo_list ) const; - void rpo( Node *start, Node_Stack &stk, VectorSet &visited, Node_List &rpo_list ) const; void verify() const; // Major slow :-) void verify_compare( Node *n, const PhaseIdealLoop *loop_verify, VectorSet &visited ) const; IdealLoopTree *get_loop_idx(Node* n) const { // Dead nodes have no loop, so return the top level loop instead return _nodes[n->_idx] ? (IdealLoopTree*)_nodes[n->_idx] : _ltree_root; --- 1080,1094 ---- void register_new_node( Node *n, Node *blk ); #ifdef ASSERT void dump_bad_graph(const char* msg, Node* n, Node* early, Node* LCA); #endif + void rpo( Node *start, Node_Stack &stk, VectorSet &visited, Node_List &rpo_list ) const; #ifndef PRODUCT void dump( ) const; void dump( IdealLoopTree *loop, uint rpo_idx, Node_List &rpo_list ) const; void verify() const; // Major slow :-) void verify_compare( Node *n, const PhaseIdealLoop *loop_verify, VectorSet &visited ) const; IdealLoopTree *get_loop_idx(Node* n) const { // Dead nodes have no loop, so return the top level loop instead return _nodes[n->_idx] ? (IdealLoopTree*)_nodes[n->_idx] : _ltree_root;
*** 1090,1099 **** --- 1096,1108 ---- // Print some stats static void print_statistics(); static int _loop_invokes; // Count of PhaseIdealLoop invokes static int _loop_work; // Sum of PhaseIdealLoop x _unique #endif + + PhaseIterGVN& igvn() { return _igvn; } + IdealLoopTree* ltree_root() const { return _ltree_root; } }; inline Node* IdealLoopTree::tail() { // Handle lazy update of _tail field Node *n = _tail;
< prev index next >