src/share/vm/opto/buildOopMap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/buildOopMap.cpp	Wed Aug  7 02:26:15 2013
--- new/src/share/vm/opto/buildOopMap.cpp	Wed Aug  7 02:26:15 2013

*** 424,441 **** --- 424,443 ---- if (UseCISCSpill && root->req() > 1) { fp = root->in(1)->in(TypeFunc::FramePtr); } memset( live, 0, cfg->_num_blocks * (max_reg_ints<<LogBytesPerInt) ); // Push preds onto worklist ! for( uint i=1; i<root->req(); i++ ) ! worklist->push(cfg->_bbs[root->in(i)->_idx]); ! for (uint i = 1; i < root->req(); i++) { ! Block* block = cfg->get_block_for_node(root->in(i)); + worklist->push(block); + } // ZKM.jar includes tiny infinite loops which are unreached from below. // If we missed any blocks, we'll retry here after pushing all missed // blocks on the worklist. Normally this outer loop never trips more // than once. ! while( 1 ) { ! while (1) { while( worklist->size() ) { // Standard worklist algorithm Block *b = worklist->rpop(); // Copy first successor into my tmp_live space
*** 535,546 **** --- 537,550 ---- if( l<max_reg_ints ) { // Change! // Copy in new value for( l=0; l<max_reg_ints; l++ ) old_live[l] = tmp_live[l]; // Push preds onto worklist ! for( l=1; l<(int)b->num_preds(); l++ ) ! worklist->push(cfg->_bbs[b->pred(l)->_idx]); ! for (l = 1; l < (int)b->num_preds(); l++) { ! Block* block = cfg->get_block_for_node(b->pred(l)); + worklist->push(block); + } } } // Scan for any missing safepoints. Happens to infinite loops // ala ZKM.jar
*** 627,640 **** --- 631,643 ---- // If this block has a visited predecessor AND that predecessor has this // last block as his only undone child, we can move the OopFlow from the // pred to this block. Otherwise we have to grab a new OopFlow. OopFlow *flow = NULL; // Flag for finding optimized flow Block *pred = (Block*)0xdeadbeef; uint j; // Scan this block's preds to find a done predecessor ! for( j=1; j<b->num_preds(); j++ ) { ! Block *p = _cfg->_bbs[b->pred(j)->_idx]; ! for (uint j = 1; j < b->num_preds(); j++) { ! Block* p = _cfg->get_block_for_node(b->pred(j)); OopFlow *p_flow = flows[p->_pre_order]; if( p_flow ) { // Predecessor is done assert( p_flow->_b == p, "cross check" ); pred = p; // Record some predecessor // If all successors of p are done except for 'b', then we can carry

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