From 7ebb1848c305da4675c3cff707dc5a88c9088faa Mon Sep 17 00:00:00 2001 From: Cong Hou Date: Mon, 12 Oct 2015 18:34:00 +0000 Subject: [PATCH] Add - and -= operators to BlockFrequency using saturating arithmetic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@250077 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/BlockFrequency.h | 4 ++++ lib/Support/BlockFrequency.cpp | 15 +++++++++++++++ unittests/Support/BlockFrequencyTest.cpp | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/include/llvm/Support/BlockFrequency.h b/include/llvm/Support/BlockFrequency.h index 2dccfa26d89..1b45cc52973 100644 --- a/include/llvm/Support/BlockFrequency.h +++ b/include/llvm/Support/BlockFrequency.h @@ -49,6 +49,10 @@ public: BlockFrequency &operator+=(BlockFrequency Freq); BlockFrequency operator+(BlockFrequency Freq) const; + /// \brief Subtracts another block frequency using saturating arithmetic. + BlockFrequency &operator-=(BlockFrequency Freq); + BlockFrequency operator-(BlockFrequency Freq) const; + /// \brief Shift block frequency to the right by count digits saturating to 1. BlockFrequency &operator>>=(const unsigned count); diff --git a/lib/Support/BlockFrequency.cpp b/lib/Support/BlockFrequency.cpp index e0430c199eb..e7f3e1764c5 100644 --- a/lib/Support/BlockFrequency.cpp +++ b/lib/Support/BlockFrequency.cpp @@ -56,6 +56,21 @@ BlockFrequency BlockFrequency::operator+(BlockFrequency Freq) const { return NewFreq; } +BlockFrequency &BlockFrequency::operator-=(BlockFrequency Freq) { + // If underflow, set frequency to 0. + if (Frequency <= Freq.Frequency) + Frequency = 0; + else + Frequency -= Freq.Frequency; + return *this; +} + +BlockFrequency BlockFrequency::operator-(BlockFrequency Freq) const { + BlockFrequency NewFreq(Frequency); + NewFreq -= Freq; + return NewFreq; +} + BlockFrequency &BlockFrequency::operator>>=(const unsigned count) { // Frequency can never be 0 by design. assert(Frequency != 0); diff --git a/unittests/Support/BlockFrequencyTest.cpp b/unittests/Support/BlockFrequencyTest.cpp index c3273bf4ab2..c1f5671815b 100644 --- a/unittests/Support/BlockFrequencyTest.cpp +++ b/unittests/Support/BlockFrequencyTest.cpp @@ -88,6 +88,12 @@ TEST(BlockFrequencyTest, MaxToMax) { EXPECT_EQ(Freq.getFrequency(), UINT64_MAX); } +TEST(BlockFrequencyTest, Subtract) { + BlockFrequency Freq1(0), Freq2(1); + EXPECT_EQ((Freq1 - Freq2).getFrequency(), 0u); + EXPECT_EQ((Freq2 - Freq1).getFrequency(), 1u); +} + TEST(BlockFrequency, Divide) { BlockFrequency Freq(0x3333333333333333ULL); Freq /= BranchProbability(1, 2); -- 2.34.1