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