forked from OSchip/llvm-project
Let += and -= operators in BranchProbability have saturation behaviors.
This commit is for a later patch that is depend on it. The sum of two branch probabilities can be greater than 1 due to rounding. It is safer to saturate the results of sum and subtraction. llvm-svn: 253421
This commit is contained in:
parent
2a40fb78c0
commit
e8c455d90e
|
@ -92,16 +92,14 @@ public:
|
|||
uint64_t scaleByInverse(uint64_t Num) const;
|
||||
|
||||
BranchProbability &operator+=(BranchProbability RHS) {
|
||||
assert(N <= D - RHS.N &&
|
||||
"The sum of branch probabilities should not exceed one!");
|
||||
N += RHS.N;
|
||||
// Saturate the result in case of overflow.
|
||||
N = (uint64_t(N) + RHS.N > D) ? D : N + RHS.N;
|
||||
return *this;
|
||||
}
|
||||
|
||||
BranchProbability &operator-=(BranchProbability RHS) {
|
||||
assert(N >= RHS.N &&
|
||||
"Can only subtract a smaller probability from a larger one!");
|
||||
N -= RHS.N;
|
||||
// Saturate the result in case of underflow.
|
||||
N = N < RHS.N ? 0 : N - RHS.N;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue