blob: bcb88c889507e7ac117da82c024b3f966727aba3 [file] [log] [blame]
Jakub Staszak0031b4f2011-07-27 18:57:40 +00001#include "llvm/Support/BlockFrequency.h"
2#include "llvm/Support/BranchProbability.h"
Chandler Carruth5a88dda2012-12-04 10:23:08 +00003#include "llvm/Support/DataTypes.h"
Jakub Staszak0031b4f2011-07-27 18:57:40 +00004#include "gtest/gtest.h"
5#include <climits>
6
7using namespace llvm;
8
9namespace {
10
Benjamin Kramer93702a32013-06-21 19:30:05 +000011TEST(BlockFrequencyTest, ZeroToZero) {
12 BlockFrequency Freq(0);
13 BranchProbability Prob(UINT32_MAX - 1, UINT32_MAX);
14 Freq *= Prob;
15 EXPECT_EQ(Freq.getFrequency(), 0u);
16
17 Freq = 1;
18 Freq *= BranchProbability::getZero();
19 EXPECT_EQ(Freq.getFrequency(), 0u);
20}
21
Jakub Staszak0031b4f2011-07-27 18:57:40 +000022TEST(BlockFrequencyTest, OneToZero) {
23 BlockFrequency Freq(1);
24 BranchProbability Prob(UINT32_MAX - 1, UINT32_MAX);
25 Freq *= Prob;
Benjamin Kramer93702a32013-06-21 19:30:05 +000026 EXPECT_EQ(Freq.getFrequency(), 1u);
Jakub Staszak0031b4f2011-07-27 18:57:40 +000027}
28
29TEST(BlockFrequencyTest, OneToOne) {
30 BlockFrequency Freq(1);
31 BranchProbability Prob(UINT32_MAX, UINT32_MAX);
32 Freq *= Prob;
33 EXPECT_EQ(Freq.getFrequency(), 1u);
34}
35
36TEST(BlockFrequencyTest, ThreeToOne) {
37 BlockFrequency Freq(3);
38 BranchProbability Prob(3000000, 9000000);
39 Freq *= Prob;
40 EXPECT_EQ(Freq.getFrequency(), 1u);
41}
42
43TEST(BlockFrequencyTest, MaxToHalfMax) {
44 BlockFrequency Freq(UINT64_MAX);
45 BranchProbability Prob(UINT32_MAX / 2, UINT32_MAX);
46 Freq *= Prob;
Benjamin Kramer3b6752e2012-06-17 14:53:53 +000047 EXPECT_EQ(Freq.getFrequency(), 9223372034707292159ULL);
Jakub Staszak0031b4f2011-07-27 18:57:40 +000048}
49
50TEST(BlockFrequencyTest, BigToBig) {
51 const uint64_t Big = 387246523487234346LL;
52 const uint32_t P = 123456789;
53 BlockFrequency Freq(Big);
54 BranchProbability Prob(P, P);
55 Freq *= Prob;
56 EXPECT_EQ(Freq.getFrequency(), Big);
57}
58
59TEST(BlockFrequencyTest, MaxToMax) {
60 BlockFrequency Freq(UINT64_MAX);
61 BranchProbability Prob(UINT32_MAX, UINT32_MAX);
62 Freq *= Prob;
63 EXPECT_EQ(Freq.getFrequency(), UINT64_MAX);
64}
65
Benjamin Kramer341473c2011-10-23 11:19:14 +000066TEST(BlockFrequencyTest, ProbabilityCompare) {
67 BranchProbability A(4, 5);
68 BranchProbability B(4U << 29, 5U << 29);
69 BranchProbability C(3, 4);
70
71 EXPECT_TRUE(A == B);
72 EXPECT_FALSE(A != B);
73 EXPECT_FALSE(A < B);
74 EXPECT_FALSE(A > B);
75 EXPECT_TRUE(A <= B);
76 EXPECT_TRUE(A >= B);
77
78 EXPECT_FALSE(B == C);
79 EXPECT_TRUE(B != C);
80 EXPECT_FALSE(B < C);
81 EXPECT_TRUE(B > C);
82 EXPECT_FALSE(B <= C);
83 EXPECT_TRUE(B >= C);
Benjamin Kramer13b10732011-10-24 13:50:56 +000084
85 BranchProbability BigZero(0, UINT32_MAX);
86 BranchProbability BigOne(UINT32_MAX, UINT32_MAX);
87 EXPECT_FALSE(BigZero == BigOne);
88 EXPECT_TRUE(BigZero != BigOne);
89 EXPECT_TRUE(BigZero < BigOne);
90 EXPECT_FALSE(BigZero > BigOne);
91 EXPECT_TRUE(BigZero <= BigOne);
92 EXPECT_FALSE(BigZero >= BigOne);
Benjamin Kramer341473c2011-10-23 11:19:14 +000093}
94
Jakub Staszak0031b4f2011-07-27 18:57:40 +000095}