< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page

        

*** 36,45 **** --- 36,47 ---- class CountedLoopNode; class IdealLoopTree; class LoopNode; class Node; class OuterStripMinedLoopEndNode; + class ShenandoahBarrierNode; + class ShenandoahWriteBarrierNode; class PathFrequency; class PhaseIdealLoop; class CountedLoopReserveKit; class VectorSet; class Invariance;
*** 634,643 **** --- 636,647 ---- // loop tree. Drives the loop-based transformations on the ideal graph. class PhaseIdealLoop : public PhaseTransform { friend class IdealLoopTree; friend class SuperWord; friend class CountedLoopReserveKit; + friend class ShenandoahBarrierNode; + friend class ShenandoahWriteBarrierNode; // Pre-computed def-use info PhaseIterGVN &_igvn; // Head of loop tree
*** 860,871 **** // loop tree, not the root. IdealLoopTree *sort( IdealLoopTree *loop, IdealLoopTree *innermost ); // Place Data nodes in some loop nest void build_loop_early( VectorSet &visited, Node_List &worklist, Node_Stack &nstack ); ! void build_loop_late ( VectorSet &visited, Node_List &worklist, Node_Stack &nstack ); ! void build_loop_late_post ( Node* n ); void verify_strip_mined_scheduling(Node *n, Node* least); // Array of immediate dominance info for each CFG node indexed by node idx private: uint _idom_size; --- 864,875 ---- // loop tree, not the root. IdealLoopTree *sort( IdealLoopTree *loop, IdealLoopTree *innermost ); // Place Data nodes in some loop nest void build_loop_early( VectorSet &visited, Node_List &worklist, Node_Stack &nstack ); ! void build_loop_late(VectorSet &visited, Node_List &worklist, Node_Stack &nstack, bool verify_strip_mined); ! void build_loop_late_post(Node* n, bool verify_strip_mined); void verify_strip_mined_scheduling(Node *n, Node* least); // Array of immediate dominance info for each CFG node indexed by node idx private: uint _idom_size;
*** 1264,1274 **** void dominated_by( Node *prevdom, Node *iff, bool flip = false, bool exclude_loop_predicate = false ); // 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 --- 1268,1279 ---- void dominated_by( Node *prevdom, Node *iff, bool flip = false, bool exclude_loop_predicate = false ); // 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, Node** out_mem_phi = NULL); ! // 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
*** 1307,1317 **** #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; --- 1312,1321 ----
*** 1319,1328 **** --- 1323,1333 ---- // 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 + void rpo( Node *start, Node_Stack &stk, VectorSet &visited, Node_List &rpo_list ) const; }; // This kit may be used for making of a reserved copy of a loop before this loop // goes under non-reversible changes. //
< prev index next >