Mercurial > hg > truffle
diff src/share/vm/opto/gcm.cpp @ 673:fbc12e71c476
6810845: Performance regression in mpegaudio on x64
Summary: Used the outer loop frequency in frequencies checks in RA.
Reviewed-by: never, twisti
author | kvn |
---|---|
date | Thu, 26 Mar 2009 15:04:55 -0700 |
parents | 7bb995fbd3c0 |
children | fbde8ec322d0 |
line wrap: on
line diff
--- a/src/share/vm/opto/gcm.cpp Thu Mar 26 14:39:39 2009 -0700 +++ b/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 {