src/share/vm/opto/gcm.cpp

changeset 987
011517bbcd7b
parent 853
72c5366e5d86
child 1014
0fbdb4381b99
child 1036
523ded093c31
     1.1 --- a/src/share/vm/opto/gcm.cpp	Wed Jan 07 11:23:28 2009 -0800
     1.2 +++ b/src/share/vm/opto/gcm.cpp	Tue Jan 13 11:10:00 2009 -0800
     1.3 @@ -29,6 +29,9 @@
     1.4  #include "incls/_precompiled.incl"
     1.5  #include "incls/_gcm.cpp.incl"
     1.6  
     1.7 +// To avoid float value underflow
     1.8 +#define MIN_BLOCK_FREQUENCY 1.e-35f
     1.9 +
    1.10  //----------------------------schedule_node_into_block-------------------------
    1.11  // Insert node n into block b. Look for projections of n and make sure they
    1.12  // are in b also.
    1.13 @@ -1380,6 +1383,13 @@
    1.14      }
    1.15    }
    1.16  
    1.17 +#ifdef ASSERT
    1.18 +  for (uint i = 0; i < _num_blocks; i++ ) {
    1.19 +    Block *b = _blocks[i];
    1.20 +    assert(b->_freq >= MIN_BLOCK_FREQUENCY, "Register Allocator requiers meaningful block frequency");
    1.21 +  }
    1.22 +#endif
    1.23 +
    1.24  #ifndef PRODUCT
    1.25    if (PrintCFGBlockFreq) {
    1.26      tty->print_cr("CFG Block Frequencies");
    1.27 @@ -1877,7 +1887,9 @@
    1.28    float loop_freq = _freq * trip_count();
    1.29    for (int i = 0; i < _members.length(); i++) {
    1.30      CFGElement* s = _members.at(i);
    1.31 -    s->_freq *= loop_freq;
    1.32 +    float block_freq = s->_freq * loop_freq;
    1.33 +    if (block_freq < MIN_BLOCK_FREQUENCY) block_freq = MIN_BLOCK_FREQUENCY;
    1.34 +    s->_freq = block_freq;
    1.35    }
    1.36    CFGLoop* ch = _child;
    1.37    while (ch != NULL) {

mercurial