Index: include/llvm/Bitcode/NaCl/NaClBitcodeBitsDist.h |
diff --git a/include/llvm/Bitcode/NaCl/NaClBitcodeBitsDist.h b/include/llvm/Bitcode/NaCl/NaClBitcodeBitsDist.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4c96aa9693c80f8966eceeba19bff117f5a08a55 |
--- /dev/null |
+++ b/include/llvm/Bitcode/NaCl/NaClBitcodeBitsDist.h |
@@ -0,0 +1,70 @@ |
+//===- NaClBitcodeBitsDist.h ------------------------------------*- C++ -*-===// |
+// Maps distributions of values and corresponding number of |
+// bits in PNaCl bitcode records. |
+// |
+// The LLVM Compiler Infrastructure |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+// |
+// Creates a (nestable) distribution map of values, and the correspdonding |
+// bits, in PNaCl bitcode records. These distributions are built directly |
+// on top of the NaClBitcodeDistElement class. |
+ |
+#ifndef LLVM_BITCODE_NACL_NACLBITCODEBITSDIST_H |
+#define LLVM_BITCODE_NACL_NACLBITCODEBITSDIST_H |
+ |
+#include "llvm/Bitcode/NaCl/NaClBitcodeDist.h" |
+ |
+namespace llvm { |
+ |
+/// Defines the element type of a PNaCl bitcode distribution map when |
+/// we want to count both the number of instances, and the number of |
+/// bits used by each record. Also tracks the number to times an |
+/// abbreviation was used to parse the corresponding record. |
+class NaClBitcodeBitsDistElement : public NaClBitcodeDistElement { |
+ NaClBitcodeBitsDistElement(const NaClBitcodeBitsDistElement&) |
+ LLVM_DELETED_FUNCTION; |
+ void operator=(const NaClBitcodeBitsDistElement&) |
+ LLVM_DELETED_FUNCTION; |
+ |
+public: |
+ static bool classof(const NaClBitcodeDistElement *Dist) { |
+ return Dist->getKind() >= RDE_BitsDist |
+ && Dist->getKind() < RDE_BitsDistLast; |
+ } |
+ |
+ // Create an element with no instances. |
+ explicit NaClBitcodeBitsDistElement( |
+ NaClBitcodeDistElementKind Kind=RDE_BitsDist) |
+ : NaClBitcodeDistElement(Kind), |
+ TotalBits(0) |
+ {} |
+ |
+ virtual ~NaClBitcodeBitsDistElement(); |
+ |
+ virtual void AddRecord(const NaClBitcodeRecord &Record); |
+ |
+ virtual void AddBlock(const NaClBitcodeBlock &Block); |
+ |
+ // Returns the total number of bits used to represent all instances |
+ // of this value. |
+ uint64_t GetTotalBits() const { |
+ return TotalBits; |
+ } |
+ |
+ virtual void PrintStatsHeader(raw_ostream &Stream) const; |
+ |
+ virtual void PrintRowStats(raw_ostream &Stream, |
+ const NaClBitcodeDist *Distribution) const; |
+ |
+private: |
+ // Number of bits used to represent all instances of the value. |
+ uint64_t TotalBits; |
+}; |
+ |
+} |
+ |
+#endif |