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" );
|