src/share/vm/opto/loopTransform.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/loopTransform.cpp	Fri Sep 25 16:46:45 2015
--- new/src/share/vm/opto/loopTransform.cpp	Fri Sep 25 16:46:44 2015

*** 288,298 **** --- 288,298 ---- if( test->is_If() ) { // Test? Node *ctrl = phase->get_ctrl(test->in(1)); if (ctrl->is_top()) return false; // Found dead test on live IF? No peeling! // Standard IF only has one input value to check for loop invariance ! assert( test->Opcode() == Op_If || test->Opcode() == Op_CountedLoopEnd, "Check this code when new subtype is added"); ! assert(test->Opcode() == Op_If || test->Opcode() == Op_CountedLoopEnd || test->Opcode() == Op_RangeCheck, "Check this code when new subtype is added"); // Condition is not a member of this loop? if( !is_member(phase->get_loop(ctrl)) && is_loop_exit(test) ) return true; // Found reason to peel! }
*** 850,860 **** --- 850,861 ---- // Check loop body for tests of trip-counter plus loop-invariant vs // loop-invariant. for (uint i = 0; i < _body.size(); i++) { Node *iff = _body[i]; ! if (iff->Opcode() == Op_If) { // Test? ! if (iff->Opcode() == Op_If || + iff->Opcode() == Op_RangeCheck) { // Test? // Comparing trip+off vs limit Node *bol = iff->in(1); if (bol->req() != 2) continue; // dead constant test if (!bol->is_Bool()) {
*** 2029,2039 **** --- 2030,2041 ---- // Check loop body for tests of trip-counter plus loop-invariant vs // loop-invariant. for( uint i = 0; i < loop->_body.size(); i++ ) { Node *iff = loop->_body[i]; ! if( iff->Opcode() == Op_If ) { // Test? ! if (iff->Opcode() == Op_If || + iff->Opcode() == Op_RangeCheck) { // Test? // Test is an IfNode, has 2 projections. If BOTH are in the loop // we need loop unswitching instead of iteration splitting. Node *exit = loop->is_loop_exit(iff); if( !exit ) continue;

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