mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
Allow 0-weight branches in BranchProbabilityInfo.
Summary: When computing branch weights in BPI, we used to disallow branches with weight 0. This is a minor nuisance, because a branch with weight 0 is different to "don't have information". In the context of instrumentation, it may mean "never executed", in the context of sampling, it means "never or seldom executed". In allowing 0 weight branches, I ran into issues with the switch expansion code in selection DAG. It is currently hardwired to not handle branches with weight 0. To maintain the current behaviour, I changed it to use 1 when it finds 0, but perhaps the algorithm needs changes to tolerate branches with weight zero. Reviewers: hansw Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9533 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236617 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -8009,7 +8009,11 @@ void SelectionDAGBuilder::visitSwitch(const SwitchInst &SI) {
|
||||
const ConstantInt *CaseVal = I.getCaseValue();
|
||||
uint32_t Weight = 1;
|
||||
if (BPI) {
|
||||
Weight = BPI->getEdgeWeight(SI.getParent(), I.getSuccessorIndex());
|
||||
// TODO - BPI used to guarantee non-zero weights, but this produces
|
||||
// information loss (see PR 22718). Since we can't handle zero weights
|
||||
// here, use the same flooring mechanism previously used by BPI.
|
||||
Weight = std::max(
|
||||
1u, BPI->getEdgeWeight(SI.getParent(), I.getSuccessorIndex()));
|
||||
assert(Weight <= UINT32_MAX / SI.getNumSuccessors());
|
||||
}
|
||||
Clusters.push_back(CaseCluster::range(CaseVal, CaseVal, Succ, Weight));
|
||||
|
Reference in New Issue
Block a user