Skip to content

Commit

Permalink
[LoopUtils][NFC] Minor refactoring in getLoopEstimatedTripCount.
Browse files Browse the repository at this point in the history
  • Loading branch information
ebrevnov committed Jan 9, 2020
1 parent 459ad8e commit f0abe82
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
5 changes: 5 additions & 0 deletions llvm/include/llvm/Support/MathExtras.h
Expand Up @@ -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) {
Expand Down
14 changes: 7 additions & 7 deletions llvm/lib/Transforms/Utils/LoopUtils.cpp
Expand Up @@ -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,
Expand Down

0 comments on commit f0abe82

Please sign in to comment.