683 _idom[didx] = n; // Lazily remove dead CFG nodes from table. 684 return n; 685 } 686 uint dom_depth(Node* d) const { 687 assert(d->_idx < _idom_size, ""); 688 return _dom_depth[d->_idx]; 689 } 690 void set_idom(Node* d, Node* n, uint dom_depth); 691 // Locally compute IDOM using dom_lca call 692 Node *compute_idom( Node *region ) const; 693 // Recompute dom_depth 694 void recompute_dom_depth(); 695 696 // Is safept not required by an outer loop? 697 bool is_deleteable_safept(Node* sfpt); 698 699 // Perform verification that the graph is valid. 700 PhaseIdealLoop( PhaseIterGVN &igvn) : 701 PhaseTransform(Ideal_Loop), 702 _igvn(igvn), 703 _dom_lca_tags(C->comp_arena()), 704 _verify_me(NULL), 705 _verify_only(true) { 706 build_and_optimize(false, false); 707 } 708 709 // build the loop tree and perform any requested optimizations 710 void build_and_optimize(bool do_split_if, bool do_loop_pred); 711 712 public: 713 // Dominators for the sea of nodes 714 void Dominators(); 715 Node *dom_lca( Node *n1, Node *n2 ) const { 716 return find_non_split_ctrl(dom_lca_internal(n1, n2)); 717 } 718 Node *dom_lca_internal( Node *n1, Node *n2 ) const; 719 720 // Compute the Ideal Node to Loop mapping 721 PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool do_loop_pred) : 722 PhaseTransform(Ideal_Loop), 723 _igvn(igvn), 724 _dom_lca_tags(C->comp_arena()), 725 _verify_me(NULL), 726 _verify_only(false) { 727 build_and_optimize(do_split_ifs, do_loop_pred); 728 } 729 730 // Verify that verify_me made the same decisions as a fresh run. 731 PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : 732 PhaseTransform(Ideal_Loop), 733 _igvn(igvn), 734 _dom_lca_tags(C->comp_arena()), 735 _verify_me(verify_me), 736 _verify_only(false) { 737 build_and_optimize(false, false); 738 } 739 740 // Build and verify the loop tree without modifying the graph. This 741 // is useful to verify that all inputs properly dominate their uses. 742 static void verify(PhaseIterGVN& igvn) { 743 #ifdef ASSERT 744 PhaseIdealLoop v(igvn); 745 #endif 746 } 747 748 // True if the method has at least 1 irreducible loop 749 bool _has_irreducible_loops; 750 751 // Per-Node transform 752 virtual Node *transform( Node *a_node ) { return 0; } 753 754 Node *is_counted_loop( Node *x, IdealLoopTree *loop ); | 683 _idom[didx] = n; // Lazily remove dead CFG nodes from table. 684 return n; 685 } 686 uint dom_depth(Node* d) const { 687 assert(d->_idx < _idom_size, ""); 688 return _dom_depth[d->_idx]; 689 } 690 void set_idom(Node* d, Node* n, uint dom_depth); 691 // Locally compute IDOM using dom_lca call 692 Node *compute_idom( Node *region ) const; 693 // Recompute dom_depth 694 void recompute_dom_depth(); 695 696 // Is safept not required by an outer loop? 697 bool is_deleteable_safept(Node* sfpt); 698 699 // Perform verification that the graph is valid. 700 PhaseIdealLoop( PhaseIterGVN &igvn) : 701 PhaseTransform(Ideal_Loop), 702 _igvn(igvn), 703 _dom_lca_tags(arena()), // Thread::resource_area 704 _verify_me(NULL), 705 _verify_only(true) { 706 build_and_optimize(false, false); 707 } 708 709 // build the loop tree and perform any requested optimizations 710 void build_and_optimize(bool do_split_if, bool do_loop_pred); 711 712 public: 713 // Dominators for the sea of nodes 714 void Dominators(); 715 Node *dom_lca( Node *n1, Node *n2 ) const { 716 return find_non_split_ctrl(dom_lca_internal(n1, n2)); 717 } 718 Node *dom_lca_internal( Node *n1, Node *n2 ) const; 719 720 // Compute the Ideal Node to Loop mapping 721 PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool do_loop_pred) : 722 PhaseTransform(Ideal_Loop), 723 _igvn(igvn), 724 _dom_lca_tags(arena()), // Thread::resource_area 725 _verify_me(NULL), 726 _verify_only(false) { 727 build_and_optimize(do_split_ifs, do_loop_pred); 728 } 729 730 // Verify that verify_me made the same decisions as a fresh run. 731 PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : 732 PhaseTransform(Ideal_Loop), 733 _igvn(igvn), 734 _dom_lca_tags(arena()), // Thread::resource_area 735 _verify_me(verify_me), 736 _verify_only(false) { 737 build_and_optimize(false, false); 738 } 739 740 // Build and verify the loop tree without modifying the graph. This 741 // is useful to verify that all inputs properly dominate their uses. 742 static void verify(PhaseIterGVN& igvn) { 743 #ifdef ASSERT 744 PhaseIdealLoop v(igvn); 745 #endif 746 } 747 748 // True if the method has at least 1 irreducible loop 749 bool _has_irreducible_loops; 750 751 // Per-Node transform 752 virtual Node *transform( Node *a_node ) { return 0; } 753 754 Node *is_counted_loop( Node *x, IdealLoopTree *loop ); |