# HG changeset patch # User never # Date 1231884139 28800 # Node ID 78144dc3db038bf36fa8747bd32025aae943af2e # Parent 041fe019d7698eba3add15c4a3e10015fa24a1d5# Parent 011517bbcd7b48f4219babd2b95ca4f836b5456d Merge diff -r 041fe019d769 -r 78144dc3db03 src/share/vm/opto/gcm.cpp --- a/src/share/vm/opto/gcm.cpp Tue Jan 13 11:43:20 2009 -0800 +++ b/src/share/vm/opto/gcm.cpp Tue Jan 13 14:02:19 2009 -0800 @@ -29,6 +29,9 @@ #include "incls/_precompiled.incl" #include "incls/_gcm.cpp.incl" +// To avoid float value underflow +#define MIN_BLOCK_FREQUENCY 1.e-35f + //----------------------------schedule_node_into_block------------------------- // Insert node n into block b. Look for projections of n and make sure they // are in b also. @@ -1380,6 +1383,13 @@ } } +#ifdef ASSERT + for (uint i = 0; i < _num_blocks; i++ ) { + Block *b = _blocks[i]; + assert(b->_freq >= MIN_BLOCK_FREQUENCY, "Register Allocator requiers meaningful block frequency"); + } +#endif + #ifndef PRODUCT if (PrintCFGBlockFreq) { tty->print_cr("CFG Block Frequencies"); @@ -1877,7 +1887,9 @@ float loop_freq = _freq * trip_count(); for (int i = 0; i < _members.length(); i++) { CFGElement* s = _members.at(i); - s->_freq *= loop_freq; + float block_freq = s->_freq * loop_freq; + if (block_freq < MIN_BLOCK_FREQUENCY) block_freq = MIN_BLOCK_FREQUENCY; + s->_freq = block_freq; } CFGLoop* ch = _child; while (ch != NULL) {