]> granicus.if.org Git - llvm/commit
Fix information loss in branch probability computation.
authorDiego Novillo <dnovillo@google.com>
Thu, 7 May 2015 17:22:06 +0000 (17:22 +0000)
committerDiego Novillo <dnovillo@google.com>
Thu, 7 May 2015 17:22:06 +0000 (17:22 +0000)
commitaa46024ea3f5190bf6b5ae5a2c2af03ad947efd3
treea99629e33767536c90e61e7f46622c19687e2b15
parent8359916759a53e51f36e2e450db0b3ed10fb0664
Fix information loss in branch probability computation.

Summary:
This addresses PR 22718. When branch weights are too large, they were
being clamped to the range [1, MaxWeightForBB]. But this clamping is
only applied to edges that go outside the range, so it distorts the
relative branch probabilities.

This patch changes the weight calculation to scale every branch so the
relative probabilities are preserved. The scaling is done differently
now. First, all the branch weights are added up, and if the sum exceeds
32 bits, it computes an integer scale to bring all the weights within
the range.

The patch fixes an existing test that had slightly wrong branch
probabilities due to the previous clamping. It now gets branch weights
scaled accordingly.

Reviewers: dexonsmith

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D9442

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236750 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/BranchProbabilityInfo.cpp
test/Analysis/BranchProbabilityInfo/pr22718.ll [new file with mode: 0644]
test/CodeGen/X86/MachineBranchProb.ll