Merge
authornever
Tue Jan 13 14:02:19 2009 -0800 (14 months ago)
changeset 55478144dc3db03
parent 553041fe019d769
parent 552011517bbcd7b
child 55535ae4dd6c27c
Merge
--- 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
@@ -28,6 +28,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
@@ -1380,6 +1383,13 @@ void PhaseCFG::Estimate_Block_Frequency(
}
}
+#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 @@ void CFGLoop::scale_freq() {
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) {