1#include "llvm/Support/DataTypes.h"
2#include "llvm/Support/BlockFrequency.h"
3#include "llvm/Support/BranchProbability.h"
4
5#include "gtest/gtest.h"
6#include <climits>
7
8using namespace llvm;
9
10namespace {
11
12TEST(BlockFrequencyTest, OneToZero) {
13  BlockFrequency Freq(1);
14  BranchProbability Prob(UINT32_MAX - 1, UINT32_MAX);
15  Freq *= Prob;
16  EXPECT_EQ(Freq.getFrequency(), 0u);
17}
18
19TEST(BlockFrequencyTest, OneToOne) {
20  BlockFrequency Freq(1);
21  BranchProbability Prob(UINT32_MAX, UINT32_MAX);
22  Freq *= Prob;
23  EXPECT_EQ(Freq.getFrequency(), 1u);
24}
25
26TEST(BlockFrequencyTest, ThreeToOne) {
27  BlockFrequency Freq(3);
28  BranchProbability Prob(3000000, 9000000);
29  Freq *= Prob;
30  EXPECT_EQ(Freq.getFrequency(), 1u);
31}
32
33TEST(BlockFrequencyTest, MaxToHalfMax) {
34  BlockFrequency Freq(UINT64_MAX);
35  BranchProbability Prob(UINT32_MAX / 2, UINT32_MAX);
36  Freq *= Prob;
37  EXPECT_EQ(Freq.getFrequency(), 9223372034707292159ULL);
38}
39
40TEST(BlockFrequencyTest, BigToBig) {
41  const uint64_t Big = 387246523487234346LL;
42  const uint32_t P = 123456789;
43  BlockFrequency Freq(Big);
44  BranchProbability Prob(P, P);
45  Freq *= Prob;
46  EXPECT_EQ(Freq.getFrequency(), Big);
47}
48
49TEST(BlockFrequencyTest, MaxToMax) {
50  BlockFrequency Freq(UINT64_MAX);
51  BranchProbability Prob(UINT32_MAX, UINT32_MAX);
52  Freq *= Prob;
53  EXPECT_EQ(Freq.getFrequency(), UINT64_MAX);
54}
55
56TEST(BlockFrequencyTest, ProbabilityCompare) {
57  BranchProbability A(4, 5);
58  BranchProbability B(4U << 29, 5U << 29);
59  BranchProbability C(3, 4);
60
61  EXPECT_TRUE(A == B);
62  EXPECT_FALSE(A != B);
63  EXPECT_FALSE(A < B);
64  EXPECT_FALSE(A > B);
65  EXPECT_TRUE(A <= B);
66  EXPECT_TRUE(A >= B);
67
68  EXPECT_FALSE(B == C);
69  EXPECT_TRUE(B != C);
70  EXPECT_FALSE(B < C);
71  EXPECT_TRUE(B > C);
72  EXPECT_FALSE(B <= C);
73  EXPECT_TRUE(B >= C);
74
75  BranchProbability BigZero(0, UINT32_MAX);
76  BranchProbability BigOne(UINT32_MAX, UINT32_MAX);
77  EXPECT_FALSE(BigZero == BigOne);
78  EXPECT_TRUE(BigZero != BigOne);
79  EXPECT_TRUE(BigZero < BigOne);
80  EXPECT_FALSE(BigZero > BigOne);
81  EXPECT_TRUE(BigZero <= BigOne);
82  EXPECT_FALSE(BigZero >= BigOne);
83}
84
85}
86