1 #include "llvm/Support/BlockFrequency.h" 2 #include "llvm/Support/BranchProbability.h" 3 #include "llvm/Support/DataTypes.h" 4 #include "gtest/gtest.h" 5 #include <climits> 6 7 using namespace llvm; 8 9 namespace { 10 11 TEST(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 22 TEST(BlockFrequencyTest, OneToZero) { 23 BlockFrequency Freq(1); 24 BranchProbability Prob(UINT32_MAX - 1, UINT32_MAX); 25 Freq *= Prob; 26 EXPECT_EQ(Freq.getFrequency(), 1u); 27 } 28 29 TEST(BlockFrequencyTest, OneToOne) { 30 BlockFrequency Freq(1); 31 BranchProbability Prob(UINT32_MAX, UINT32_MAX); 32 Freq *= Prob; 33 EXPECT_EQ(Freq.getFrequency(), 1u); 34 } 35 36 TEST(BlockFrequencyTest, ThreeToOne) { 37 BlockFrequency Freq(3); 38 BranchProbability Prob(3000000, 9000000); 39 Freq *= Prob; 40 EXPECT_EQ(Freq.getFrequency(), 1u); 41 } 42 43 TEST(BlockFrequencyTest, MaxToHalfMax) { 44 BlockFrequency Freq(UINT64_MAX); 45 BranchProbability Prob(UINT32_MAX / 2, UINT32_MAX); 46 Freq *= Prob; 47 EXPECT_EQ(Freq.getFrequency(), 9223372034707292159ULL); 48 } 49 50 TEST(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 59 TEST(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 66 TEST(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); 84 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); 93 } 94 95 } 96