119 }; |
119 }; |
120 |
120 |
121 // Given reaching-defs for this block start, compute it for this block end |
121 // Given reaching-defs for this block start, compute it for this block end |
122 void OopFlow::compute_reach( PhaseRegAlloc *regalloc, int max_reg, Dict *safehash ) { |
122 void OopFlow::compute_reach( PhaseRegAlloc *regalloc, int max_reg, Dict *safehash ) { |
123 |
123 |
124 for( uint i=0; i<_b->_nodes.size(); i++ ) { |
124 for( uint i=0; i<_b->number_of_nodes(); i++ ) { |
125 Node *n = _b->_nodes[i]; |
125 Node *n = _b->get_node(i); |
126 |
126 |
127 if( n->jvms() ) { // Build an OopMap here? |
127 if( n->jvms() ) { // Build an OopMap here? |
128 JVMState *jvms = n->jvms(); |
128 JVMState *jvms = n->jvms(); |
129 // no map needed for leaf calls |
129 // no map needed for leaf calls |
130 if( n->is_MachSafePoint() && !n->is_MachCallLeaf() ) { |
130 if( n->is_MachSafePoint() && !n->is_MachCallLeaf() ) { |
445 for( int i=0; i<max_reg_ints; i++ ) |
445 for( int i=0; i<max_reg_ints; i++ ) |
446 tmp_live[i] |= t[i]; |
446 tmp_live[i] |= t[i]; |
447 } |
447 } |
448 |
448 |
449 // Now walk tmp_live up the block backwards, computing live |
449 // Now walk tmp_live up the block backwards, computing live |
450 for( int k=b->_nodes.size()-1; k>=0; k-- ) { |
450 for( int k=b->number_of_nodes()-1; k>=0; k-- ) { |
451 Node *n = b->_nodes[k]; |
451 Node *n = b->get_node(k); |
452 // KILL def'd bits |
452 // KILL def'd bits |
453 int first = regalloc->get_reg_first(n); |
453 int first = regalloc->get_reg_first(n); |
454 int second = regalloc->get_reg_second(n); |
454 int second = regalloc->get_reg_second(n); |
455 if( OptoReg::is_valid(first) ) clr_live_bit(tmp_live,first); |
455 if( OptoReg::is_valid(first) ) clr_live_bit(tmp_live,first); |
456 if( OptoReg::is_valid(second) ) clr_live_bit(tmp_live,second); |
456 if( OptoReg::is_valid(second) ) clr_live_bit(tmp_live,second); |
542 // ala ZKM.jar |
542 // ala ZKM.jar |
543 uint i; |
543 uint i; |
544 for (i = 1; i < cfg->number_of_blocks(); i++) { |
544 for (i = 1; i < cfg->number_of_blocks(); i++) { |
545 Block* block = cfg->get_block(i); |
545 Block* block = cfg->get_block(i); |
546 uint j; |
546 uint j; |
547 for (j = 1; j < block->_nodes.size(); j++) { |
547 for (j = 1; j < block->number_of_nodes(); j++) { |
548 if (block->_nodes[j]->jvms() && (*safehash)[block->_nodes[j]] == NULL) { |
548 if (block->get_node(j)->jvms() && (*safehash)[block->get_node(j)] == NULL) { |
549 break; |
549 break; |
550 } |
550 } |
551 } |
551 } |
552 if (j < block->_nodes.size()) { |
552 if (j < block->number_of_nodes()) { |
553 break; |
553 break; |
554 } |
554 } |
555 } |
555 } |
556 if (i == cfg->number_of_blocks()) { |
556 if (i == cfg->number_of_blocks()) { |
557 break; // Got 'em all |
557 break; // Got 'em all |