diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-06-21 19:30:05 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-06-21 19:30:05 +0000 |
commit | bd0f1079298c66201f89b83cbbe168fb90bc3534 (patch) | |
tree | 1c68131a2182a89728d7cb4d891a590d40c1542f /llvm/unittests/Support/BlockFrequencyTest.cpp | |
parent | f040118167db7c2f8ab8926628bafbac6370cfa8 (diff) | |
download | bcm5719-llvm-bd0f1079298c66201f89b83cbbe168fb90bc3534.tar.gz bcm5719-llvm-bd0f1079298c66201f89b83cbbe168fb90bc3534.zip |
BlockFrequency: Saturate at 1 instead of 0 when multiplying a frequency with a branch probability.
Zero is used by BlockFrequencyInfo as a special "don't know" value. It also
causes a sink for frequencies as you can't ever get off a zero frequency with
more multiplies.
This recovers a 10% regression on MultiSource/Benchmarks/7zip. A zero frequency
was propagated into an inner loop causing excessive spilling.
PR16402.
llvm-svn: 184584
Diffstat (limited to 'llvm/unittests/Support/BlockFrequencyTest.cpp')
-rw-r--r-- | llvm/unittests/Support/BlockFrequencyTest.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/unittests/Support/BlockFrequencyTest.cpp b/llvm/unittests/Support/BlockFrequencyTest.cpp index ff66bc4e45a..bcb88c88950 100644 --- a/llvm/unittests/Support/BlockFrequencyTest.cpp +++ b/llvm/unittests/Support/BlockFrequencyTest.cpp @@ -8,11 +8,22 @@ using namespace llvm; namespace { +TEST(BlockFrequencyTest, ZeroToZero) { + BlockFrequency Freq(0); + BranchProbability Prob(UINT32_MAX - 1, UINT32_MAX); + Freq *= Prob; + EXPECT_EQ(Freq.getFrequency(), 0u); + + Freq = 1; + Freq *= BranchProbability::getZero(); + EXPECT_EQ(Freq.getFrequency(), 0u); +} + TEST(BlockFrequencyTest, OneToZero) { BlockFrequency Freq(1); BranchProbability Prob(UINT32_MAX - 1, UINT32_MAX); Freq *= Prob; - EXPECT_EQ(Freq.getFrequency(), 0u); + EXPECT_EQ(Freq.getFrequency(), 1u); } TEST(BlockFrequencyTest, OneToOne) { |