------- Comment #10 from ebotcazou at gcc dot gnu dot org  2007-11-06 15:14 
-------
Things start to go awry much earlier though, at the end of the first VRP pass
when jumps are threaded.  More specifically in update_bb_profile_for_threading

  if (prob > taken_edge->probability)
    {
      if (dump_file)
        fprintf (dump_file, "Jump threading proved probability of edge "
                 "%i->%i too small (it is %i, should be %i).\n",
                 taken_edge->src->index, taken_edge->dest->index,
                 taken_edge->probability, prob);
      prob = taken_edge->probability;
    }

is triggered a bunch times.  Now, that it is triggered means that the local
update of block frequency doesn't work and a global update would be needed.

So we end up with a bunch of predecessors of the EXIT block with frequency
greater than BB_FREQ_MAX / 2, which doesn't make much sense.


-- 


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

Reply via email to