< prev index next >

src/share/vm/opto/loopUnswitch.cpp

Print this page

        

@@ -372,14 +372,21 @@
       tty->print_cr("CountedLoopReserveKit::create_reserve: %d not valid counted loop", cl->_idx);
     }
     return false; // skip malformed counted loop
   }
   if (!cl->is_main_loop()) {
+    bool loop_not_canonical = true;
+    if (cl->is_post_loop() && (cl->slp_max_unroll() > 0)) {
+      loop_not_canonical = false;
+    }
+    // only reject some loop forms
+    if (loop_not_canonical) {
     if (TraceLoopOpts) {
-      tty->print_cr("CountedLoopReserveKit::create_reserve: %d not main loop", cl->_idx);
+        tty->print_cr("CountedLoopReserveKit::create_reserve: %d not canonical loop", cl->_idx);
+      }
+      return false; // skip normal, pre, and post (conditionally) loops
     }
-    return false; // skip normal, pre, and post loops
   }
 
   _lp = _lpt->_head->as_Loop();
   _lp_reserved = _phase->create_reserve_version_of_loop(_lpt, this);
 
< prev index next >