From 5efbda1437caa321775f240ea54ae4c16bdd3a6a Mon Sep 17 00:00:00 2001 From: Michael Gottesman Date: Fri, 13 Dec 2013 23:59:44 +0000 Subject: [PATCH] [block-freq] Add a print method on BlockFrequencyImpl for printing block frequencies and a convenience method for the common case of getting/printing a basic block. BlockFrequencies can only be printed relative to their entry frequency. Thus since the entry frequency is no longer necessarily a static constant on the BlockFrequency class and is instead a potentially dynamic value taken from BlockFrequencyImpl, we must necessarily print it via a method on BlockFrequencyImpl. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197285 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/BlockFrequencyImpl.h | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/include/llvm/Analysis/BlockFrequencyImpl.h b/include/llvm/Analysis/BlockFrequencyImpl.h index 8be75e60499..95ce4aab8ec 100644 --- a/include/llvm/Analysis/BlockFrequencyImpl.h +++ b/include/llvm/Analysis/BlockFrequencyImpl.h @@ -343,6 +343,30 @@ public: void dump() const { print(dbgs()); } + + // Utility method that looks up the block frequency associated with BB and + // prints it to OS. + raw_ostream &printBlockFreq(raw_ostream &OS, + const BlockT *BB) { + return printBlockFreq(OS, getBlockFreq(BB)); + } + + raw_ostream &printBlockFreq(raw_ostream &OS, + const BlockFrequency &Freq) const { + // Convert fixed-point number to decimal. + uint64_t Frequency = Freq.getFrequency(); + OS << Frequency / EntryFreq << "."; + uint64_t Rem = Frequency % EntryFreq; + uint64_t Eps = 1; + do { + Rem *= 10; + Eps *= 10; + OS << Rem / EntryFreq; + Rem = Rem % EntryFreq; + } while (Rem >= Eps/2); + return OS; + } + }; }