4241 // Dump loops by loop tree
4242 void IdealLoopTree::dump() {
4243 dump_head();
4244 if (_child) _child->dump();
4245 if (_next) _next ->dump();
4246 }
4247
4248 #endif
4249
4250 static void log_loop_tree_helper(IdealLoopTree* root, IdealLoopTree* loop, CompileLog* log) {
4251 if (loop == root) {
4252 if (loop->_child != nullptr) {
4253 log->begin_head("loop_tree");
4254 log->end_head();
4255 log_loop_tree_helper(root, loop->_child, log);
4256 log->tail("loop_tree");
4257 assert(loop->_next == nullptr, "what?");
4258 }
4259 } else if (loop != nullptr) {
4260 Node* head = loop->_head;
4261 log->begin_head("loop");
4262 log->print(" idx='%d' ", head->_idx);
4263 if (loop->_irreducible) log->print("irreducible='1' ");
4264 if (head->is_Loop()) {
4265 if (head->as_Loop()->is_inner_loop()) log->print("inner_loop='1' ");
4266 if (head->as_Loop()->is_partial_peel_loop()) log->print("partial_peel_loop='1' ");
4267 } else if (head->is_CountedLoop()) {
4268 CountedLoopNode* cl = head->as_CountedLoop();
4269 if (cl->is_pre_loop()) log->print("pre_loop='%d' ", cl->main_idx());
4270 if (cl->is_main_loop()) log->print("main_loop='%d' ", cl->_idx);
4271 if (cl->is_post_loop()) log->print("post_loop='%d' ", cl->main_idx());
4272 }
4273 log->end_head();
4274 log_loop_tree_helper(root, loop->_child, log);
4275 log->tail("loop");
4276 log_loop_tree_helper(root, loop->_next, log);
4277 }
4278 }
4279
4280 void PhaseIdealLoop::log_loop_tree() {
4281 if (C->log() != nullptr) {
4282 log_loop_tree_helper(_ltree_root, _ltree_root, C->log());
4283 }
4284 }
4285
4286 // Eliminate all Parse and Template Assertion Predicates that are not associated with a loop anymore. The eliminated
4287 // predicates will be removed during the next round of IGVN.
4288 void PhaseIdealLoop::eliminate_useless_predicates() {
4289 if (C->parse_predicate_count() == 0 && C->template_assertion_predicate_count() == 0) {
4290 return; // No predicates left.
4291 }
|
4241 // Dump loops by loop tree
4242 void IdealLoopTree::dump() {
4243 dump_head();
4244 if (_child) _child->dump();
4245 if (_next) _next ->dump();
4246 }
4247
4248 #endif
4249
4250 static void log_loop_tree_helper(IdealLoopTree* root, IdealLoopTree* loop, CompileLog* log) {
4251 if (loop == root) {
4252 if (loop->_child != nullptr) {
4253 log->begin_head("loop_tree");
4254 log->end_head();
4255 log_loop_tree_helper(root, loop->_child, log);
4256 log->tail("loop_tree");
4257 assert(loop->_next == nullptr, "what?");
4258 }
4259 } else if (loop != nullptr) {
4260 Node* head = loop->_head;
4261 log->begin_head("loop idx='%d'", head->_idx);
4262 if (loop->_irreducible) log->print(" irreducible='1'");
4263 if (head->is_Loop()) {
4264 if (head->as_Loop()->is_inner_loop()) log->print(" inner_loop='1'");
4265 if (head->as_Loop()->is_partial_peel_loop()) log->print(" partial_peel_loop='1'");
4266 } else if (head->is_CountedLoop()) {
4267 CountedLoopNode* cl = head->as_CountedLoop();
4268 if (cl->is_pre_loop()) log->print(" pre_loop='%d'", cl->main_idx());
4269 if (cl->is_main_loop()) log->print(" main_loop='%d'", cl->_idx);
4270 if (cl->is_post_loop()) log->print(" post_loop='%d'", cl->main_idx());
4271 }
4272 log->end_head();
4273 log_loop_tree_helper(root, loop->_child, log);
4274 log->tail("loop");
4275 log_loop_tree_helper(root, loop->_next, log);
4276 }
4277 }
4278
4279 void PhaseIdealLoop::log_loop_tree() {
4280 if (C->log() != nullptr) {
4281 log_loop_tree_helper(_ltree_root, _ltree_root, C->log());
4282 }
4283 }
4284
4285 // Eliminate all Parse and Template Assertion Predicates that are not associated with a loop anymore. The eliminated
4286 // predicates will be removed during the next round of IGVN.
4287 void PhaseIdealLoop::eliminate_useless_predicates() {
4288 if (C->parse_predicate_count() == 0 && C->template_assertion_predicate_count() == 0) {
4289 return; // No predicates left.
4290 }
|