Print this page
rev 4533 : 8014811: loopTransform.cpp assert(cmp_end->in(2) == limit) failed
Summary: Stop current iteration of loop opts if partial_peel() failed and it created node clones outside processed loop.
Reviewed-by: roland

Split Split Close
Expand all
Collapse all
          --- old/src/share/vm/opto/loopnode.hpp
          +++ new/src/share/vm/opto/loopnode.hpp
↓ open down ↓ 953 lines elided ↑ open up ↑
 954  954    // Partially peel loop up through last_peel node.
 955  955    bool partial_peel( IdealLoopTree *loop, Node_List &old_new );
 956  956  
 957  957    // Create a scheduled list of nodes control dependent on ctrl set.
 958  958    void scheduled_nodelist( IdealLoopTree *loop, VectorSet& ctrl, Node_List &sched );
 959  959    // Has a use in the vector set
 960  960    bool has_use_in_set( Node* n, VectorSet& vset );
 961  961    // Has use internal to the vector set (ie. not in a phi at the loop head)
 962  962    bool has_use_internal_to_set( Node* n, VectorSet& vset, IdealLoopTree *loop );
 963  963    // clone "n" for uses that are outside of loop
 964      -  void clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, Node_List& worklist );
      964 +  int  clone_for_use_outside_loop( IdealLoopTree *loop, Node* n, Node_List& worklist );
 965  965    // clone "n" for special uses that are in the not_peeled region
 966  966    void clone_for_special_use_inside_loop( IdealLoopTree *loop, Node* n,
 967  967                                            VectorSet& not_peel, Node_List& sink_list, Node_List& worklist );
 968  968    // Insert phi(lp_entry_val, back_edge_val) at use->in(idx) for loop lp if phi does not already exist
 969  969    void insert_phi_for_loop( Node* use, uint idx, Node* lp_entry_val, Node* back_edge_val, LoopNode* lp );
 970  970  #ifdef ASSERT
 971  971    // Validate the loop partition sets: peel and not_peel
 972  972    bool is_valid_loop_partition( IdealLoopTree *loop, VectorSet& peel, Node_List& peel_list, VectorSet& not_peel );
 973  973    // Ensure that uses outside of loop are of the right form
 974  974    bool is_valid_clone_loop_form( IdealLoopTree *loop, Node_List& peel_list,
↓ open down ↓ 147 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX