http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44334

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2010.12.19 11:43:48
     Ever Confirmed|0                           |1

--- Comment #14 from Jan Hubicka <hubicka at gcc dot gnu.org> 2010-12-19 
11:43:48 UTC ---
I finally got into some time to test the various solutions. easiest is probably
the following:
Index: predict.c
===================================================================
--- predict.c   (revision 168047)
+++ predict.c   (working copy)
@@ -126,7 +126,7 @@ maybe_hot_frequency_p (int freq)
   if (node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
       && freq <= (ENTRY_BLOCK_PTR->frequency * 2 / 3))
     return false;
-  if (freq < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
+  if (freq < ENTRY_BLOCK_PTR->frequency / PARAM_VALUE
(HOT_BB_FREQUENCY_FRACTION))
     return false;
   return true;
 }
It makes GCC to decide on cold basic blocks not based on the innermost loop
nest but on the entry block frequency - so many conditoinals or EH renders BB
cold but not the fact it is outside of very many BBs.

Could you try if this solves the problem?

Reply via email to