< prev index next >
src/share/vm/opto/loopnode.hpp
Print this page
*** 65,75 ****
PartialPeelLoop=32,
PartialPeelFailed=64,
HasReductions=128,
WasSlpAnalyzed=256,
PassedSlpAnalysis=512,
! DoUnrollOnly=1024 };
char _unswitch_count;
enum { _unswitch_max=3 };
public:
// Names for edge indices
--- 65,77 ----
PartialPeelLoop=32,
PartialPeelFailed=64,
HasReductions=128,
WasSlpAnalyzed=256,
PassedSlpAnalysis=512,
! DoUnrollOnly=1024,
! VectorizedLoop=2048,
! HasAtomicPostLoop=4096 };
char _unswitch_count;
enum { _unswitch_max=3 };
public:
// Names for edge indices
*** 84,93 ****
--- 86,97 ----
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; }
void mark_do_unroll_only() { _loop_flags |= DoUnrollOnly; }
+ void mark_loop_vectorized() { _loop_flags |= VectorizedLoop; }
+ void mark_has_atomic_post_loop() { _loop_flags |= HasAtomicPostLoop; }
int unswitch_max() { return _unswitch_max; }
int unswitch_count() { return _unswitch_count; }
void set_unswitch_count(int val) {
assert (val <= unswitch_max(), "too many unswitches");
*** 219,228 ****
--- 223,234 ----
int is_reduction_loop() const { return (_loop_flags&HasReductions) == HasReductions; }
int was_slp_analyzed () const { return (_loop_flags&WasSlpAnalyzed) == WasSlpAnalyzed; }
int has_passed_slp () const { return (_loop_flags&PassedSlpAnalysis) == PassedSlpAnalysis; }
int do_unroll_only () const { return (_loop_flags&DoUnrollOnly) == DoUnrollOnly; }
int is_main_no_pre_loop() const { return _loop_flags & MainHasNoPreLoop; }
+ int is_vectorized_loop () const { return (_loop_flags & VectorizedLoop) == VectorizedLoop; }
+ int has_atomic_post_loop () const { return (_loop_flags & HasAtomicPostLoop) == HasAtomicPostLoop; }
void set_main_no_pre_loop() { _loop_flags |= MainHasNoPreLoop; }
int main_idx() const { return _main_idx; }
*** 891,900 ****
--- 897,908 ----
void do_peeling( IdealLoopTree *loop, Node_List &old_new );
// Add pre and post loops around the given loop. These loops are used
// during RCE, unrolling and aligning loops.
void insert_pre_post_loops( IdealLoopTree *loop, Node_List &old_new, bool peel_only );
+ // Add a vector post loop between a vector main loop and the current post loop
+ void insert_vector_post_loop(IdealLoopTree *loop, Node_List &old_new);
// If Node n lives in the back_ctrl block, we clone a private version of n
// in preheader_ctrl block and return that, otherwise return n.
Node *clone_up_backedge_goo( Node *back_ctrl, Node *preheader_ctrl, Node *n, VectorSet &visited, Node_Stack &clones );
// Take steps to maximally unroll the loop. Peel any odd iterations, then
< prev index next >