< prev index next >
src/share/vm/opto/loopnode.hpp
Print this page
rev 11401 : other changes
rev 12673 : move loop variant barriers that have all uses outside a loop after the loop
rev 13082 : loop predicate exp
rev 13090 : Make a copy of strip mined loops with small number of iterations from profiling
rev 13092 : aggressive predicates
@@ -70,11 +70,12 @@
DoUnrollOnly=1024,
VectorizedLoop=2048,
HasAtomicPostLoop=4096,
HasRangeChecks=8192,
IsMultiversioned=16384,
- StripMined=32768};
+ StripMined=32768,
+ StripMinedShortCloned=65536};
char _unswitch_count;
enum { _unswitch_max=3 };
char _postloop_flags;
enum { LoopNotRCEChecked = 0, LoopRCEChecked = 1, RCEPostLoop = 2 };
@@ -90,10 +91,11 @@
uint is_vectorized_loop() const { return _loop_flags & VectorizedLoop; }
uint is_partial_peel_loop() const { return _loop_flags & PartialPeelLoop; }
void set_partial_peel_loop() { _loop_flags |= PartialPeelLoop; }
uint partial_peel_has_failed() const { return _loop_flags & PartialPeelFailed; }
uint is_strip_mined() const { return _loop_flags & StripMined; }
+ uint is_strip_mined_short_cloned() const { return _loop_flags & StripMinedShortCloned; }
void mark_partial_peel_failed() { _loop_flags |= PartialPeelFailed; }
void mark_has_reductions() { _loop_flags |= HasReductions; }
void mark_was_slp() { _loop_flags |= WasSlpAnalyzed; }
void mark_passed_slp() { _loop_flags |= PassedSlpAnalysis; }
@@ -102,10 +104,11 @@
void mark_has_atomic_post_loop() { _loop_flags |= HasAtomicPostLoop; }
void mark_has_range_checks() { _loop_flags |= HasRangeChecks; }
void mark_is_multiversioned() { _loop_flags |= IsMultiversioned; }
void mark_strip_mined() { _loop_flags |= StripMined; }
void clear_strip_mined() { _loop_flags &= ~StripMined; }
+ void mark_strip_mined_short_cloned() { _loop_flags |= StripMinedShortCloned; }
int unswitch_max() { return _unswitch_max; }
int unswitch_count() { return _unswitch_count; }
int has_been_range_checked() const { return _postloop_flags & LoopRCEChecked; }
@@ -457,10 +460,15 @@
// Driver for various flavors of iteration splitting. Returns false
// if the current round of loop opts should stop.
bool iteration_split_impl( PhaseIdealLoop *phase, Node_List &old_new );
+ // If profiling shows an inner strip mined loop runs for few
+ // iterations, make a copy without the outer strip mined loop and
+ // the safepoint
+ bool copy_strip_mined_short(PhaseIdealLoop *phase, Node_List &old_new);
+
// Given dominators, try to find loops with calls that must always be
// executed (call dominates loop tail). These loops do not need non-call
// safepoints (ncsfpt).
void check_safepts(VectorSet &visited, Node_List &stack);
< prev index next >