mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-12 15:51:40 +00:00
[ARM] Use BranchProbability::scale() to scale an integer with a probability in ARMBaseInstrInfo.cpp,
Previously in isProfitableToIfCvt() in ARMBaseInstrInfo.cpp, the multiplication between an integer and a branch probability is done manually in an unsafe way that may lead to overflow. This patch corrects those cases by using BranchProbability's member function scale() to avoid overflow (which stores the intermediate result in int64). Differential Revision: http://reviews.llvm.org/D12295 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246106 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6dc18d8d3a
commit
b99373e1a6
@ -1670,8 +1670,7 @@ isProfitableToIfCvt(MachineBasicBlock &MBB,
|
||||
}
|
||||
|
||||
// Attempt to estimate the relative costs of predication versus branching.
|
||||
unsigned UnpredCost = Probability.getNumerator() * NumCycles;
|
||||
UnpredCost /= Probability.getDenominator();
|
||||
unsigned UnpredCost = Probability.scale(NumCycles);
|
||||
UnpredCost += 1; // The branch itself
|
||||
UnpredCost += Subtarget.getMispredictionPenalty() / 10;
|
||||
|
||||
@ -1688,13 +1687,8 @@ isProfitableToIfCvt(MachineBasicBlock &TMBB,
|
||||
return false;
|
||||
|
||||
// Attempt to estimate the relative costs of predication versus branching.
|
||||
unsigned TUnpredCost = Probability.getNumerator() * TCycles;
|
||||
TUnpredCost /= Probability.getDenominator();
|
||||
|
||||
uint32_t Comp = Probability.getDenominator() - Probability.getNumerator();
|
||||
unsigned FUnpredCost = Comp * FCycles;
|
||||
FUnpredCost /= Probability.getDenominator();
|
||||
|
||||
unsigned TUnpredCost = Probability.scale(TCycles);
|
||||
unsigned FUnpredCost = Probability.getCompl().scale(FCycles);
|
||||
unsigned UnpredCost = TUnpredCost + FUnpredCost;
|
||||
UnpredCost += 1; // The branch itself
|
||||
UnpredCost += Subtarget.getMispredictionPenalty() / 10;
|
||||
|
Loading…
x
Reference in New Issue
Block a user