aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Support/BlockFrequency.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Support/BlockFrequency.cpp')
-rw-r--r--lib/Support/BlockFrequency.cpp31
1 files changed, 11 insertions, 20 deletions
diff --git a/lib/Support/BlockFrequency.cpp b/lib/Support/BlockFrequency.cpp
index 00efe90..00cf75b 100644
--- a/lib/Support/BlockFrequency.cpp
+++ b/lib/Support/BlockFrequency.cpp
@@ -145,28 +145,19 @@ BlockFrequency::operator+(const BlockFrequency &Prob) const {
return Freq;
}
-uint32_t BlockFrequency::scale(const BranchProbability &Prob) {
- return scale(Prob.getNumerator(), Prob.getDenominator());
-}
-
-void BlockFrequency::print(raw_ostream &OS) const {
- // Convert fixed-point number to decimal.
- OS << Frequency / getEntryFrequency() << ".";
- uint64_t Rem = Frequency % getEntryFrequency();
- uint64_t Eps = 1;
- do {
- Rem *= 10;
- Eps *= 10;
- OS << Rem / getEntryFrequency();
- Rem = Rem % getEntryFrequency();
- } while (Rem >= Eps/2);
-}
+BlockFrequency &BlockFrequency::operator>>=(const unsigned count) {
+ // Frequency can never be 0 by design.
+ assert(Frequency != 0);
-namespace llvm {
+ // Shift right by count.
+ Frequency >>= count;
-raw_ostream &operator<<(raw_ostream &OS, const BlockFrequency &Freq) {
- Freq.print(OS);
- return OS;
+ // Saturate to 1 if we are 0.
+ Frequency |= Frequency == 0;
+ return *this;
}
+uint32_t BlockFrequency::scale(const BranchProbability &Prob) {
+ return scale(Prob.getNumerator(), Prob.getDenominator());
}
+