[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.

llvm-svn: 197285
This commit is contained in:
Michael Gottesman 2013-12-13 23:59:44 +00:00
parent 120701f137
commit b8cd4a1199
1 changed files with 24 additions and 0 deletions

View File

@ -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;
}
};
}