comparison src/share/vm/opto/loopnode.hpp @ 3788:e3cbc9ddd434

7044738: Loop unroll optimization causes incorrect result Summary: take into account memory dependencies when clonning nodes in clone_up_backedge_goo(). Reviewed-by: never
author kvn
date Tue, 28 Jun 2011 15:24:29 -0700
parents 38569792a45a
children 4e761e7e6e12
comparison
equal deleted inserted replaced
3787:6ae7a1561b53 3788:e3cbc9ddd434
841 // Add pre and post loops around the given loop. These loops are used 841 // Add pre and post loops around the given loop. These loops are used
842 // during RCE, unrolling and aligning loops. 842 // during RCE, unrolling and aligning loops.
843 void insert_pre_post_loops( IdealLoopTree *loop, Node_List &old_new, bool peel_only ); 843 void insert_pre_post_loops( IdealLoopTree *loop, Node_List &old_new, bool peel_only );
844 // If Node n lives in the back_ctrl block, we clone a private version of n 844 // If Node n lives in the back_ctrl block, we clone a private version of n
845 // in preheader_ctrl block and return that, otherwise return n. 845 // in preheader_ctrl block and return that, otherwise return n.
846 Node *clone_up_backedge_goo( Node *back_ctrl, Node *preheader_ctrl, Node *n ); 846 Node *clone_up_backedge_goo( Node *back_ctrl, Node *preheader_ctrl, Node *n, VectorSet &visited, Node_Stack &clones );
847 847
848 // Take steps to maximally unroll the loop. Peel any odd iterations, then 848 // Take steps to maximally unroll the loop. Peel any odd iterations, then
849 // unroll to do double iterations. The next round of major loop transforms 849 // unroll to do double iterations. The next round of major loop transforms
850 // will repeat till the doubled loop body does all remaining iterations in 1 850 // will repeat till the doubled loop body does all remaining iterations in 1
851 // pass. 851 // pass.