4699 // Dump loops by loop tree
4700 void IdealLoopTree::dump() {
4701 dump_head();
4702 if (_child) _child->dump();
4703 if (_next) _next ->dump();
4704 }
4705
4706 #endif
4707
4708 static void log_loop_tree_helper(IdealLoopTree* root, IdealLoopTree* loop, CompileLog* log) {
4709 if (loop == root) {
4710 if (loop->_child != nullptr) {
4711 log->begin_head("loop_tree");
4712 log->end_head();
4713 log_loop_tree_helper(root, loop->_child, log);
4714 log->tail("loop_tree");
4715 assert(loop->_next == nullptr, "what?");
4716 }
4717 } else if (loop != nullptr) {
4718 Node* head = loop->_head;
4719 log->begin_head("loop");
4720 log->print(" idx='%d' ", head->_idx);
4721 if (loop->_irreducible) log->print("irreducible='1' ");
4722 if (head->is_Loop()) {
4723 if (head->as_Loop()->is_inner_loop()) log->print("inner_loop='1' ");
4724 if (head->as_Loop()->is_partial_peel_loop()) log->print("partial_peel_loop='1' ");
4725 } else if (head->is_CountedLoop()) {
4726 CountedLoopNode* cl = head->as_CountedLoop();
4727 if (cl->is_pre_loop()) log->print("pre_loop='%d' ", cl->main_idx());
4728 if (cl->is_main_loop()) log->print("main_loop='%d' ", cl->_idx);
4729 if (cl->is_post_loop()) log->print("post_loop='%d' ", cl->main_idx());
4730 }
4731 log->end_head();
4732 log_loop_tree_helper(root, loop->_child, log);
4733 log->tail("loop");
4734 log_loop_tree_helper(root, loop->_next, log);
4735 }
4736 }
4737
4738 void PhaseIdealLoop::log_loop_tree() {
4739 if (C->log() != nullptr) {
4740 log_loop_tree_helper(_ltree_root, _ltree_root, C->log());
4741 }
4742 }
4743
4744 // Eliminate all Parse and Template Assertion Predicates that are not associated with a loop anymore. The eliminated
4745 // predicates will be removed during the next round of IGVN.
4746 void PhaseIdealLoop::eliminate_useless_predicates() const {
4747 if (C->parse_predicate_count() == 0 && C->template_assertion_predicate_count() == 0) {
4748 return; // No predicates left.
4749 }
|
4699 // Dump loops by loop tree
4700 void IdealLoopTree::dump() {
4701 dump_head();
4702 if (_child) _child->dump();
4703 if (_next) _next ->dump();
4704 }
4705
4706 #endif
4707
4708 static void log_loop_tree_helper(IdealLoopTree* root, IdealLoopTree* loop, CompileLog* log) {
4709 if (loop == root) {
4710 if (loop->_child != nullptr) {
4711 log->begin_head("loop_tree");
4712 log->end_head();
4713 log_loop_tree_helper(root, loop->_child, log);
4714 log->tail("loop_tree");
4715 assert(loop->_next == nullptr, "what?");
4716 }
4717 } else if (loop != nullptr) {
4718 Node* head = loop->_head;
4719 log->begin_head("loop idx='%d'", head->_idx);
4720 if (loop->_irreducible) log->print(" irreducible='1'");
4721 if (head->is_Loop()) {
4722 if (head->as_Loop()->is_inner_loop()) log->print(" inner_loop='1'");
4723 if (head->as_Loop()->is_partial_peel_loop()) log->print(" partial_peel_loop='1'");
4724 } else if (head->is_CountedLoop()) {
4725 CountedLoopNode* cl = head->as_CountedLoop();
4726 if (cl->is_pre_loop()) log->print(" pre_loop='%d'", cl->main_idx());
4727 if (cl->is_main_loop()) log->print(" main_loop='%d'", cl->_idx);
4728 if (cl->is_post_loop()) log->print(" post_loop='%d'", cl->main_idx());
4729 }
4730 log->end_head();
4731 log_loop_tree_helper(root, loop->_child, log);
4732 log->tail("loop");
4733 log_loop_tree_helper(root, loop->_next, log);
4734 }
4735 }
4736
4737 void PhaseIdealLoop::log_loop_tree() {
4738 if (C->log() != nullptr) {
4739 log_loop_tree_helper(_ltree_root, _ltree_root, C->log());
4740 }
4741 }
4742
4743 // Eliminate all Parse and Template Assertion Predicates that are not associated with a loop anymore. The eliminated
4744 // predicates will be removed during the next round of IGVN.
4745 void PhaseIdealLoop::eliminate_useless_predicates() const {
4746 if (C->parse_predicate_count() == 0 && C->template_assertion_predicate_count() == 0) {
4747 return; // No predicates left.
4748 }
|