483 hrp_index[0] = hrp_index[1] = last_inst+1; |
483 hrp_index[0] = hrp_index[1] = last_inst+1; |
484 b->_reg_pressure = b->_freg_pressure = 0; |
484 b->_reg_pressure = b->_freg_pressure = 0; |
485 // Liveout things are presumed live for the whole block. We accumulate |
485 // Liveout things are presumed live for the whole block. We accumulate |
486 // 'area' accordingly. If they get killed in the block, we'll subtract |
486 // 'area' accordingly. If they get killed in the block, we'll subtract |
487 // the unused part of the block from the area. |
487 // the unused part of the block from the area. |
488 double cost = b->_freq * double(last_inst-last_phi); |
488 int inst_count = last_inst - last_phi; |
489 assert( cost >= 0, "negative spill cost" ); |
489 double cost = (inst_count <= 0) ? 0.0 : b->_freq * double(inst_count); |
|
490 assert(!(cost < 0.0), "negative spill cost" ); |
490 IndexSetIterator elements(&liveout); |
491 IndexSetIterator elements(&liveout); |
491 uint lidx; |
492 uint lidx; |
492 while ((lidx = elements.next()) != 0) { |
493 while ((lidx = elements.next()) != 0) { |
493 LRG &lrg = lrgs(lidx); |
494 LRG &lrg = lrgs(lidx); |
494 lrg._area += cost; |
495 lrg._area += cost; |
588 } |
589 } |
589 |
590 |
590 } else { // Else it is live |
591 } else { // Else it is live |
591 // A DEF also ends 'area' partway through the block. |
592 // A DEF also ends 'area' partway through the block. |
592 lrgs(r)._area -= cost; |
593 lrgs(r)._area -= cost; |
593 assert( lrgs(r)._area >= 0, "negative spill area" ); |
594 assert(!(lrgs(r)._area < 0.0), "negative spill area" ); |
594 |
595 |
595 // Insure high score for immediate-use spill copies so they get a color |
596 // Insure high score for immediate-use spill copies so they get a color |
596 if( n->is_SpillCopy() |
597 if( n->is_SpillCopy() |
597 && lrgs(r).is_singledef() // MultiDef live range can still split |
598 && lrgs(r).is_singledef() // MultiDef live range can still split |
598 && n->outcnt() == 1 // and use must be in this block |
599 && n->outcnt() == 1 // and use must be in this block |
701 // compatible register sets. |
702 // compatible register sets. |
702 interfere_with_live(r,&liveout); |
703 interfere_with_live(r,&liveout); |
703 |
704 |
704 } // End of if normal register-allocated value |
705 } // End of if normal register-allocated value |
705 |
706 |
706 cost -= b->_freq; // Area remaining in the block |
707 // Area remaining in the block |
707 if( cost < 0.0 ) cost = 0.0; // Cost goes negative in the Phi area |
708 inst_count--; |
|
709 cost = (inst_count <= 0) ? 0.0 : b->_freq * double(inst_count); |
708 |
710 |
709 // Make all inputs live |
711 // Make all inputs live |
710 if( !n->is_Phi() ) { // Phi function uses come from prior block |
712 if( !n->is_Phi() ) { // Phi function uses come from prior block |
711 JVMState* jvms = n->jvms(); |
713 JVMState* jvms = n->jvms(); |
712 uint debug_start = jvms ? jvms->debug_start() : 999999; |
714 uint debug_start = jvms ? jvms->debug_start() : 999999; |
749 } |
751 } |
750 } |
752 } |
751 assert( pressure[0] == count_int_pressure (&liveout), "" ); |
753 assert( pressure[0] == count_int_pressure (&liveout), "" ); |
752 assert( pressure[1] == count_float_pressure(&liveout), "" ); |
754 assert( pressure[1] == count_float_pressure(&liveout), "" ); |
753 } |
755 } |
754 assert( lrg._area >= 0, "negative spill area" ); |
756 assert(!(lrg._area < 0.0), "negative spill area" ); |
755 } |
757 } |
756 } |
758 } |
757 } // End of reverse pass over all instructions in block |
759 } // End of reverse pass over all instructions in block |
758 |
760 |
759 // If we run off the top of the block with high pressure and |
761 // If we run off the top of the block with high pressure and |