Revert r247692: Replace Triple with a new TargetTuple in MCTargetDesc/* and related...
[oota-llvm.git] / lib / Support / BlockFrequency.cpp
1 //====--------------- lib/Support/BlockFrequency.cpp -----------*- C++ -*-====//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements Block Frequency class.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Support/BlockFrequency.h"
15 #include "llvm/Support/raw_ostream.h"
16 #include <cassert>
17
18 using namespace llvm;
19
20 BlockFrequency &BlockFrequency::operator*=(BranchProbability Prob) {
21   Frequency = Prob.scale(Frequency);
22   return *this;
23 }
24
25 const BlockFrequency
26 BlockFrequency::operator*(BranchProbability Prob) const {
27   BlockFrequency Freq(Frequency);
28   Freq *= Prob;
29   return Freq;
30 }
31
32 BlockFrequency &BlockFrequency::operator/=(BranchProbability Prob) {
33   Frequency = Prob.scaleByInverse(Frequency);
34   return *this;
35 }
36
37 BlockFrequency BlockFrequency::operator/(BranchProbability Prob) const {
38   BlockFrequency Freq(Frequency);
39   Freq /= Prob;
40   return Freq;
41 }
42
43 BlockFrequency &BlockFrequency::operator+=(const BlockFrequency &Freq) {
44   uint64_t Before = Freq.Frequency;
45   Frequency += Freq.Frequency;
46
47   // If overflow, set frequency to the maximum value.
48   if (Frequency < Before)
49     Frequency = UINT64_MAX;
50
51   return *this;
52 }
53
54 const BlockFrequency
55 BlockFrequency::operator+(const BlockFrequency &Prob) const {
56   BlockFrequency Freq(Frequency);
57   Freq += Prob;
58   return Freq;
59 }
60
61 BlockFrequency &BlockFrequency::operator>>=(const unsigned count) {
62   // Frequency can never be 0 by design.
63   assert(Frequency != 0);
64
65   // Shift right by count.
66   Frequency >>= count;
67
68   // Saturate to 1 if we are 0.
69   Frequency |= Frequency == 0;
70   return *this;
71 }