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