Coverage Report

Created: 2017-10-03 07:32

/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/lib/Support/BlockFrequency.cpp
Line
Count
Source
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
10.1M
BlockFrequency &BlockFrequency::operator*=(BranchProbability Prob) {
21
10.1M
  Frequency = Prob.scale(Frequency);
22
10.1M
  return *this;
23
10.1M
}
24
25
9.72M
BlockFrequency BlockFrequency::operator*(BranchProbability Prob) const {
26
9.72M
  BlockFrequency Freq(Frequency);
27
9.72M
  Freq *= Prob;
28
9.72M
  return Freq;
29
9.72M
}
30
31
202k
BlockFrequency &BlockFrequency::operator/=(BranchProbability Prob) {
32
202k
  Frequency = Prob.scaleByInverse(Frequency);
33
202k
  return *this;
34
202k
}
35
36
184k
BlockFrequency BlockFrequency::operator/(BranchProbability Prob) const {
37
184k
  BlockFrequency Freq(Frequency);
38
184k
  Freq /= Prob;
39
184k
  return Freq;
40
184k
}
41
42
973M
BlockFrequency &BlockFrequency::operator+=(BlockFrequency Freq) {
43
973M
  uint64_t Before = Freq.Frequency;
44
973M
  Frequency += Freq.Frequency;
45
973M
46
973M
  // If overflow, set frequency to the maximum value.
47
973M
  if (Frequency < Before)
48
1.67M
    Frequency = UINT64_MAX;
49
973M
50
973M
  return *this;
51
973M
}
52
53
368M
BlockFrequency BlockFrequency::operator+(BlockFrequency Freq) const {
54
368M
  BlockFrequency NewFreq(Frequency);
55
368M
  NewFreq += Freq;
56
368M
  return NewFreq;
57
368M
}
58
59
291k
BlockFrequency &BlockFrequency::operator-=(BlockFrequency Freq) {
60
291k
  // If underflow, set frequency to 0.
61
291k
  if (Frequency <= Freq.Frequency)
62
58.5k
    Frequency = 0;
63
291k
  else
64
233k
    Frequency -= Freq.Frequency;
65
291k
  return *this;
66
291k
}
67
68
291k
BlockFrequency BlockFrequency::operator-(BlockFrequency Freq) const {
69
291k
  BlockFrequency NewFreq(Frequency);
70
291k
  NewFreq -= Freq;
71
291k
  return NewFreq;
72
291k
}
73
74
2
BlockFrequency &BlockFrequency::operator>>=(const unsigned count) {
75
2
  // Frequency can never be 0 by design.
76
2
  assert(Frequency != 0);
77
2
78
2
  // Shift right by count.
79
2
  Frequency >>= count;
80
2
81
2
  // Saturate to 1 if we are 0.
82
2
  Frequency |= Frequency == 0;
83
2
  return *this;
84
2
}