Skip to content
  1. Dec 20, 2011
  2. Nov 14, 2011
    • Chandler Carruth's avatar
      Reuse the logic in getEdgeProbability within getHotSucc in order to · a9e71faa
      Chandler Carruth authored
      correctly handle blocks whose successor weights sum to more than
      UINT32_MAX. This is slightly less efficient, but the entire thing is
      already linear on the number of successors. Calling it within any hot
      routine is a mistake, and indeed no one is calling it. It also
      simplifies the code.
      
      llvm-svn: 144527
      a9e71faa
    • Chandler Carruth's avatar
      Fix an overflow bug in MachineBranchProbabilityInfo. This pass relied on · ed5aa547
      Chandler Carruth authored
      the sum of the edge weights not overflowing uint32, and crashed when
      they did. This is generally safe as BranchProbabilityInfo tries to
      provide this guarantee. However, the CFG can get modified during codegen
      in a way that grows the *sum* of the edge weights. This doesn't seem
      unreasonable (imagine just adding more blocks all with the default
      weight of 16), but it is hard to come up with a case that actually
      triggers 32-bit overflow. Fortuately, the single-source GCC build is
      good at this. The solution isn't very pretty, but its no worse than the
      previous code. We're already summing all of the edge weights on each
      query, we can sum them, check for an overflow, compute a scale, and sum
      them again.
      
      I've included a *greatly* reduced test case out of the GCC source that
      triggers it. It's a pretty lame test, as it clearly is just barely
      triggering the overflow. I'd like to have something that is much more
      definitive, but I don't understand the fundamental pattern that triggers
      an explosion in the edge weight sums.
      
      The buggy code is duplicated within this file. I'll colapse them into
      a single implementation in a subsequent commit.
      
      llvm-svn: 144526
      ed5aa547
  3. Oct 28, 2011
  4. Jun 16, 2011
Loading