https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114589

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
This is the "old" issue with the bogus

  /* If BEST_BB is at the same nesting level, then require it to have
     significantly lower execution frequency to avoid gratuitous movement.  */
  if (bb_loop_depth (best_bb) == bb_loop_depth (early_bb)
      /* If result of comparsion is unknown, prefer EARLY_BB.
         Thus use !(...>=..) rather than (...<...)  */
      && !(best_bb->count * 100 >= early_bb->count * threshold))
    return best_bb;

check.  We have a BB2 count of 118111600 and BB5 we'd sink to has 105119324
which is higher than 75% of BB2.

This was supposed to prevent sinking across if (x) unlikely (); blocks
but it has odd side-effects like this one.

IIRC there's duplicates for this.

I'll note that we probably want to avoid sinking to a post-dominator
unless it sinks out of a loop (that's cross-BB scheduling).  But we no
longer compute post-dominators.  Without re-introducing those and
limiting sinking this way removing the odd code will cause regressions.

Reply via email to