[block-freq] Add a print method on BlockFrequencyImpl for printing block frequencies...
authorMichael Gottesman <mgottesman@apple.com>
Fri, 13 Dec 2013 23:59:44 +0000 (23:59 +0000)
committerMichael Gottesman <mgottesman@apple.com>
Fri, 13 Dec 2013 23:59:44 +0000 (23:59 +0000)
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

index 8be75e604997a13a7cadfeb7ee6b881e7a77c5ad..95ce4aab8ec2cb7dca29eb1dcd0a7a0d5db5b9c5 100644 (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;
+  }
+
 };
 
 }