< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page




 732 
 733   // Helper function for directing control inputs away from CFG split
 734   // points.
 735   Node *find_non_split_ctrl( Node *ctrl ) const {
 736     if (ctrl != NULL) {
 737       if (ctrl->is_MultiBranch()) {
 738         ctrl = ctrl->in(0);
 739       }
 740       assert(ctrl->is_CFG(), "CFG");
 741     }
 742     return ctrl;
 743   }
 744 
 745   Node* cast_incr_before_loop(Node* incr, Node* ctrl, Node* loop);
 746   void duplicate_predicates_helper(Node* predicate, Node* castii, IdealLoopTree* outer_loop,
 747                                    LoopNode* outer_main_head, uint dd_main_head);
 748   void duplicate_predicates(CountedLoopNode* pre_head, Node* castii, IdealLoopTree* outer_loop,
 749                             LoopNode* outer_main_head, uint dd_main_head);
 750   Node* update_skeleton_predicate(Node* iff, Node* value, Node* predicate = NULL, Node* uncommon_proj = NULL,
 751                                   Node* current_proj = NULL, IdealLoopTree* outer_loop = NULL, Node* prev_proj = NULL);

 752 
 753 public:
 754 
 755   PhaseIterGVN &igvn() const { return _igvn; }
 756 
 757   static bool is_canonical_loop_entry(CountedLoopNode* cl);
 758 
 759   bool has_node( Node* n ) const {
 760     guarantee(n != NULL, "No Node.");
 761     return _nodes[n->_idx] != NULL;
 762   }
 763   // check if transform created new nodes that need _ctrl recorded
 764   Node *get_late_ctrl( Node *n, Node *early );
 765   Node *get_early_ctrl( Node *n );
 766   Node *get_early_ctrl_for_expensive(Node *n, Node* earliest);
 767   void set_early_ctrl( Node *n );
 768   void set_subtree_ctrl( Node *root );
 769   void set_ctrl( Node *n, Node *ctrl ) {
 770     assert( !has_node(n) || has_ctrl(n), "" );
 771     assert( ctrl->in(0), "cannot set dead control node" );




 732 
 733   // Helper function for directing control inputs away from CFG split
 734   // points.
 735   Node *find_non_split_ctrl( Node *ctrl ) const {
 736     if (ctrl != NULL) {
 737       if (ctrl->is_MultiBranch()) {
 738         ctrl = ctrl->in(0);
 739       }
 740       assert(ctrl->is_CFG(), "CFG");
 741     }
 742     return ctrl;
 743   }
 744 
 745   Node* cast_incr_before_loop(Node* incr, Node* ctrl, Node* loop);
 746   void duplicate_predicates_helper(Node* predicate, Node* castii, IdealLoopTree* outer_loop,
 747                                    LoopNode* outer_main_head, uint dd_main_head);
 748   void duplicate_predicates(CountedLoopNode* pre_head, Node* castii, IdealLoopTree* outer_loop,
 749                             LoopNode* outer_main_head, uint dd_main_head);
 750   Node* update_skeleton_predicate(Node* iff, Node* value, Node* predicate = NULL, Node* uncommon_proj = NULL,
 751                                   Node* current_proj = NULL, IdealLoopTree* outer_loop = NULL, Node* prev_proj = NULL);
 752   void insert_loop_limit_check(ProjNode* limit_check_proj, Node* cmp_limit, Node* bol);
 753 
 754 public:
 755 
 756   PhaseIterGVN &igvn() const { return _igvn; }
 757 
 758   static bool is_canonical_loop_entry(CountedLoopNode* cl);
 759 
 760   bool has_node( Node* n ) const {
 761     guarantee(n != NULL, "No Node.");
 762     return _nodes[n->_idx] != NULL;
 763   }
 764   // check if transform created new nodes that need _ctrl recorded
 765   Node *get_late_ctrl( Node *n, Node *early );
 766   Node *get_early_ctrl( Node *n );
 767   Node *get_early_ctrl_for_expensive(Node *n, Node* earliest);
 768   void set_early_ctrl( Node *n );
 769   void set_subtree_ctrl( Node *root );
 770   void set_ctrl( Node *n, Node *ctrl ) {
 771     assert( !has_node(n) || has_ctrl(n), "" );
 772     assert( ctrl->in(0), "cannot set dead control node" );


< prev index next >