src/share/vm/opto/loopopts.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/loopopts.cpp	Mon Nov  9 11:56:25 2015
--- new/src/share/vm/opto/loopopts.cpp	Mon Nov  9 11:56:25 2015

*** 204,214 **** --- 204,214 ---- #endif // prevdom is the dominating projection of the dominating test. assert( iff->is_If(), "" ); ! assert( iff->Opcode() == Op_If || iff->Opcode() == Op_CountedLoopEnd, "Check this code when new subtype is added"); ! assert(iff->Opcode() == Op_If || iff->Opcode() == Op_CountedLoopEnd || iff->Opcode() == Op_RangeCheck, "Check this code when new subtype is added"); int pop = prevdom->Opcode(); assert( pop == Op_IfFalse || pop == Op_IfTrue, "" ); if (flip) { if (pop == Op_IfTrue) pop = Op_IfFalse;
*** 1121,1131 **** --- 1121,1132 ---- // Check for an IF ready to split; one that has its // condition codes input coming from a Phi at the block start. int n_op = n->Opcode(); // Check for an IF being dominated by another IF same test ! if (n_op == Op_If) { ! if (n_op == Op_If || + n_op == Op_RangeCheck) { Node *bol = n->in(1); uint max = bol->outcnt(); // Check for same test used more than once? if (max > 1 && bol->is_Bool()) { // Search up IDOMs to see if this IF is dominated.
*** 1943,1953 **** --- 1944,1957 ---- register_node(cmp, loop, proj2, ddepth); BoolNode* bol = new BoolNode(cmp, relop); register_node(bol, loop, proj2, ddepth); ! IfNode* new_if = new IfNode(proj2, bol, iff->_prob, iff->_fcnt); ! int opcode = iff->Opcode(); + assert(opcode == Op_If || opcode == Op_RangeCheck, "unexpected opcode"); + IfNode* new_if = (opcode == Op_If) ? new IfNode(proj2, bol, iff->_prob, iff->_fcnt): + new RangeCheckNode(proj2, bol, iff->_prob, iff->_fcnt); register_node(new_if, loop, proj2, ddepth); proj->set_req(0, new_if); // reattach set_idom(proj, new_if, ddepth);

src/share/vm/opto/loopopts.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File