--- a/hotspot/src/share/vm/opto/gcm.cpp Thu Mar 26 14:39:39 2009 -0700
+++ b/hotspot/src/share/vm/opto/gcm.cpp Thu Mar 26 15:04:55 2009 -0700
@@ -1374,6 +1374,9 @@
_root_loop->_freq = 1.0;
_root_loop->scale_freq();
+ // Save outmost loop frequency for LRG frequency threshold
+ _outer_loop_freq = _root_loop->outer_loop_freq();
+
// force paths ending at uncommon traps to be infrequent
if (!C->do_freq_based_layout()) {
Block_List worklist;
@@ -1898,6 +1901,7 @@
// Do a top down traversal of loop tree (visit outer loops first.)
void CFGLoop::scale_freq() {
float loop_freq = _freq * trip_count();
+ _freq = loop_freq;
for (int i = 0; i < _members.length(); i++) {
CFGElement* s = _members.at(i);
float block_freq = s->_freq * loop_freq;
@@ -1912,6 +1916,14 @@
}
}
+// Frequency of outer loop
+float CFGLoop::outer_loop_freq() const {
+ if (_child != NULL) {
+ return _child->_freq;
+ }
+ return _freq;
+}
+
#ifndef PRODUCT
//------------------------------dump_tree--------------------------------------
void CFGLoop::dump_tree() const {