mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[LoopUtils][NFC] Minor refactoring in getLoopEstimatedTripCount.
This commit is contained in:
parent
ea4efaf94d
commit
a8c4082764
@ -732,6 +732,11 @@ inline uint64_t divideCeil(uint64_t Numerator, uint64_t Denominator) {
|
||||
return alignTo(Numerator, Denominator) / Denominator;
|
||||
}
|
||||
|
||||
/// Returns the integer nearest(Numerator / Denominator).
|
||||
inline uint64_t divideNearest(uint64_t Numerator, uint64_t Denominator) {
|
||||
return (Numerator + (Denominator / 2)) / Denominator;
|
||||
}
|
||||
|
||||
/// Returns the largest uint64_t less than or equal to \p Value and is
|
||||
/// \p Skew mod \p Align. \p Align must be non-zero
|
||||
inline uint64_t alignDown(uint64_t Value, uint64_t Align, uint64_t Skew = 0) {
|
||||
|
@ -714,19 +714,19 @@ Optional<unsigned> llvm::getLoopEstimatedTripCount(Loop *L) {
|
||||
// To estimate the number of times the loop body was executed, we want to
|
||||
// know the number of times the backedge was taken, vs. the number of times
|
||||
// we exited the loop.
|
||||
uint64_t TrueVal, FalseVal;
|
||||
if (!LatchBR->extractProfMetadata(TrueVal, FalseVal))
|
||||
uint64_t BackedgeTakenWeight, LatchExitWeight;
|
||||
if (!LatchBR->extractProfMetadata(BackedgeTakenWeight, LatchExitWeight))
|
||||
return None;
|
||||
|
||||
if (!TrueVal || !FalseVal)
|
||||
if (LatchBR->getSuccessor(0) != L->getHeader())
|
||||
std::swap(BackedgeTakenWeight, LatchExitWeight);
|
||||
|
||||
if (!BackedgeTakenWeight || !LatchExitWeight)
|
||||
return 0;
|
||||
|
||||
// Divide the count of the backedge by the count of the edge exiting the loop,
|
||||
// rounding to nearest.
|
||||
if (LatchBR->getSuccessor(0) == L->getHeader())
|
||||
return (TrueVal + (FalseVal / 2)) / FalseVal;
|
||||
else
|
||||
return (FalseVal + (TrueVal / 2)) / TrueVal;
|
||||
return llvm::divideNearest(BackedgeTakenWeight, LatchExitWeight);
|
||||
}
|
||||
|
||||
bool llvm::hasIterationCountInvariantInParent(Loop *InnerLoop,
|
||||
|
Loading…
Reference in New Issue
Block a user