diff options
author | Cong Hou <congh@google.com> | 2015-12-17 22:27:07 +0000 |
---|---|---|
committer | Cong Hou <congh@google.com> | 2015-12-17 22:27:07 +0000 |
commit | 7308f42d91c42235be963d16cd27b18b62175ce0 (patch) | |
tree | ac64fa0d0f0095aaad6cbfced260b0ae3b2a7c6c /llvm/unittests/Support/BranchProbabilityTest.cpp | |
parent | 8e9ba042a68ed50d507c7deec249072508bab769 (diff) | |
download | bcm5719-llvm-7308f42d91c42235be963d16cd27b18b62175ce0.tar.gz bcm5719-llvm-7308f42d91c42235be963d16cd27b18b62175ce0.zip |
[BranchProbability] Remove the restriction that known and unknown probabilities cannot coexist when being normalized.
The current BranchProbability::normalizeProbabilities() forbids known and
unknown probabilities to coexist in the list. This was once used to help
capture probability exceptions but has caused some reported build
failures (https://llvm.org/bugs/show_bug.cgi?id=25838).
This patch removes this restriction by evenly distributing the complement
of the sum of all known probabilities to unknown ones. We could still
treat this as an abnormal behavior, but it is better to emit warnings in
our future profile validator.
Differential revision: http://reviews.llvm.org/D15548
llvm-svn: 255934
Diffstat (limited to 'llvm/unittests/Support/BranchProbabilityTest.cpp')
-rw-r--r-- | llvm/unittests/Support/BranchProbabilityTest.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/unittests/Support/BranchProbabilityTest.cpp b/llvm/unittests/Support/BranchProbabilityTest.cpp index 847661d21b3..e90e7f8ff11 100644 --- a/llvm/unittests/Support/BranchProbabilityTest.cpp +++ b/llvm/unittests/Support/BranchProbabilityTest.cpp @@ -288,6 +288,7 @@ TEST(BranchProbabilityTest, scaleBruteForce) { } TEST(BranchProbabilityTest, NormalizeProbabilities) { + const auto UnknownProb = BranchProbability::getUnknown(); { SmallVector<BranchProbability, 2> Probs{{0, 1}, {0, 1}}; BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end()); @@ -322,6 +323,36 @@ TEST(BranchProbabilityTest, NormalizeProbabilities) { EXPECT_EQ(BranchProbability::getDenominator() / 3 + 1, Probs[2].getNumerator()); } + { + SmallVector<BranchProbability, 2> Probs{{0, 1}, UnknownProb}; + BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end()); + EXPECT_EQ(0, Probs[0].getNumerator()); + EXPECT_EQ(BranchProbability::getDenominator(), Probs[1].getNumerator()); + } + { + SmallVector<BranchProbability, 2> Probs{{1, 1}, UnknownProb}; + BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end()); + EXPECT_EQ(BranchProbability::getDenominator(), Probs[0].getNumerator()); + EXPECT_EQ(0, Probs[1].getNumerator()); + } + { + SmallVector<BranchProbability, 2> Probs{{1, 2}, UnknownProb}; + BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end()); + EXPECT_EQ(BranchProbability::getDenominator() / 2, Probs[0].getNumerator()); + EXPECT_EQ(BranchProbability::getDenominator() / 2, Probs[1].getNumerator()); + } + { + SmallVector<BranchProbability, 4> Probs{ + {1, 2}, {1, 2}, {1, 2}, UnknownProb}; + BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end()); + EXPECT_EQ(BranchProbability::getDenominator() / 3 + 1, + Probs[0].getNumerator()); + EXPECT_EQ(BranchProbability::getDenominator() / 3 + 1, + Probs[1].getNumerator()); + EXPECT_EQ(BranchProbability::getDenominator() / 3 + 1, + Probs[2].getNumerator()); + EXPECT_EQ(0, Probs[3].getNumerator()); + } } } |