< prev index next >

src/share/vm/opto/loopnode.cpp

Print this page




2351     // SuperWord transform
2352     SuperWord sw(this);
2353     for (LoopTreeIterator iter(_ltree_root); !iter.done(); iter.next()) {
2354       IdealLoopTree* lpt = iter.current();
2355       if (lpt->is_counted()) {
2356         CountedLoopNode *cl = lpt->_head->as_CountedLoop();
2357 
2358         if (PostLoopMultiversioning && cl->is_rce_post_loop() && !cl->is_vectorized_loop()) {
2359           // Check that the rce'd post loop is encountered first, multiversion after all
2360           // major main loop optimization are concluded
2361           if (!C->major_progress()) {
2362             IdealLoopTree *lpt_next = lpt->_next;
2363             if (lpt_next && lpt_next->is_counted()) {
2364               CountedLoopNode *cl = lpt_next->_head->as_CountedLoop();
2365               has_range_checks(lpt_next);
2366               if (cl->is_post_loop() && cl->range_checks_present()) {
2367                 if (!cl->is_multiversioned()) {
2368                   if (multi_version_post_loops(lpt, lpt_next) == false) {
2369                     // Cause the rce loop to be optimized away if we fail
2370                     cl->mark_is_multiversioned();

2371                     poison_rce_post_loop(lpt);
2372                   }
2373                 }
2374               }
2375             }

2376           }
2377         } else if (cl->is_main_loop()) {
2378           sw.transform_loop(lpt, true);
2379         }
2380       }
2381     }
2382   }
2383 
2384   // Cleanup any modified bits
2385   _igvn.optimize();
2386 
2387   // disable assert until issue with split_flow_path is resolved (6742111)
2388   // assert(!_has_irreducible_loops || C->parsed_irreducible_loop() || C->is_osr_compilation(),
2389   //        "shouldn't introduce irreducible loops");
2390 
2391   if (C->log() != NULL) {
2392     log_loop_tree(_ltree_root, _ltree_root, C->log());
2393   }
2394 }
2395 




2351     // SuperWord transform
2352     SuperWord sw(this);
2353     for (LoopTreeIterator iter(_ltree_root); !iter.done(); iter.next()) {
2354       IdealLoopTree* lpt = iter.current();
2355       if (lpt->is_counted()) {
2356         CountedLoopNode *cl = lpt->_head->as_CountedLoop();
2357 
2358         if (PostLoopMultiversioning && cl->is_rce_post_loop() && !cl->is_vectorized_loop()) {
2359           // Check that the rce'd post loop is encountered first, multiversion after all
2360           // major main loop optimization are concluded
2361           if (!C->major_progress()) {
2362             IdealLoopTree *lpt_next = lpt->_next;
2363             if (lpt_next && lpt_next->is_counted()) {
2364               CountedLoopNode *cl = lpt_next->_head->as_CountedLoop();
2365               has_range_checks(lpt_next);
2366               if (cl->is_post_loop() && cl->range_checks_present()) {
2367                 if (!cl->is_multiversioned()) {
2368                   if (multi_version_post_loops(lpt, lpt_next) == false) {
2369                     // Cause the rce loop to be optimized away if we fail
2370                     cl->mark_is_multiversioned();
2371                     cl->set_slp_max_unroll(0);
2372                     poison_rce_post_loop(lpt);
2373                   }
2374                 }
2375               }
2376             }
2377             sw.transform_loop(lpt, true);
2378           }
2379         } else if (cl->is_main_loop()) {
2380           sw.transform_loop(lpt, true);
2381         }
2382       }
2383     }
2384   }
2385 
2386   // Cleanup any modified bits
2387   _igvn.optimize();
2388 
2389   // disable assert until issue with split_flow_path is resolved (6742111)
2390   // assert(!_has_irreducible_loops || C->parsed_irreducible_loop() || C->is_osr_compilation(),
2391   //        "shouldn't introduce irreducible loops");
2392 
2393   if (C->log() != NULL) {
2394     log_loop_tree(_ltree_root, _ltree_root, C->log());
2395   }
2396 }
2397 


< prev index next >