BlockFrequencyTest.cpp 2.0 KB

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