--- old/src/hotspot/share/opto/loopnode.hpp 2019-01-09 10:57:23.938384647 +0100 +++ new/src/hotspot/share/opto/loopnode.hpp 2019-01-09 10:57:17.239438426 +0100 @@ -747,12 +747,14 @@ } Node* cast_incr_before_loop(Node* incr, Node* ctrl, Node* loop); - void duplicate_predicates_helper(Node* predicate, Node* castii, IdealLoopTree* outer_loop, + void duplicate_predicates_helper(Node* predicate, Node* start, Node* end, IdealLoopTree* outer_loop, LoopNode* outer_main_head, uint dd_main_head); - void duplicate_predicates(CountedLoopNode* pre_head, Node* castii, IdealLoopTree* outer_loop, + void duplicate_predicates(CountedLoopNode* pre_head, Node* start, Node* end, IdealLoopTree* outer_loop, LoopNode* outer_main_head, uint dd_main_head); - Node* update_skeleton_predicate(Node* iff, Node* value, Node* predicate = NULL, Node* uncommon_proj = NULL, - Node* current_proj = NULL, IdealLoopTree* outer_loop = NULL, Node* prev_proj = NULL); + Node* clone_skeleton_predicate(Node* iff, Node* value, Node* predicate, Node* uncommon_proj, + Node* current_proj, IdealLoopTree* outer_loop, Node* prev_proj); + bool skeleton_predicate_has_opaque(IfNode* iff); + void update_skeleton_predicates(Node* ctrl, CountedLoopNode* loop_head, Node* init, int stride_con); void insert_loop_limit_check(ProjNode* limit_check_proj, Node* cmp_limit, Node* bol); public: @@ -1128,7 +1130,7 @@ Deoptimization::DeoptReason reason); Node* add_range_check_predicate(IdealLoopTree* loop, CountedLoopNode* cl, Node* predicate_proj, int scale_con, Node* offset, - Node* limit, jint stride_con); + Node* limit, jint stride_con, Node* value); // Helper function to collect predicate for eliminating the useless ones void collect_potentially_useful_predicates(IdealLoopTree *loop, Unique_Node_List &predicate_opaque1);