Index: include/llvm/Bitcode/NaCl/NaClBitcodeCodeDist.h |
diff --git a/include/llvm/Bitcode/NaCl/NaClBitcodeCodeDist.h b/include/llvm/Bitcode/NaCl/NaClBitcodeCodeDist.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7181851c081afa05eb8751f96d987e7a274e78ad |
--- /dev/null |
+++ b/include/llvm/Bitcode/NaCl/NaClBitcodeCodeDist.h |
@@ -0,0 +1,113 @@ |
+//===-- NaClBitcodeCodeDist.h ---------------------------------------------===// |
+// Defines distribution maps for various values in bitcode records. |
+// |
+// The LLVM Compiler Infrastructure |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+// |
+// Defines simple (non-nested) distribution maps for record codes |
+// appearing in bitcode records (instances of class NaClBitcodeRecord |
+// in NaClBitcodeParser.h). |
+ |
+#ifndef LLVM_BITCODE_NACL_NACLBITCODECODEDIST_H |
+#define LLVM_BITCODE_NACL_NACLBITCODECODEDIST_H |
+ |
+#include "llvm/Bitcode/NaCl/NaClBitcodeBitsAndAbbrevsDist.h" |
+ |
+namespace llvm { |
+ |
+// Collects the distribution of record codes/number of bits used for a |
+// particular blockID and Code ID. |
+class NaClBitcodeCodeDistElement |
+ : public NaClBitcodeBitsAndAbbrevsDistElement { |
+ NaClBitcodeCodeDistElement(const NaClBitcodeCodeDistElement&) |
+ LLVM_DELETED_FUNCTION; |
+ void operator=(const NaClBitcodeCodeDistElement&) |
+ LLVM_DELETED_FUNCTION; |
+ |
+public: |
+ static bool classof(const NaClBitcodeDistElement *Element) { |
+ return Element->getKind() >= RDE_CodeDist |
+ && Element->getKind() < RDE_CodeDistLast; |
+ } |
+ |
+ explicit NaClBitcodeCodeDistElement( |
+ NaClBitcodeDistElementKind Kind=RDE_CodeDist) |
+ : NaClBitcodeBitsAndAbbrevsDistElement(Kind) |
+ {} |
+ |
+ virtual ~NaClBitcodeCodeDistElement(); |
+ |
+ virtual NaClBitcodeDistElement *CreateElement( |
+ NaClBitcodeDistValue Value) const; |
+ |
+ virtual void GetValueList(const NaClBitcodeRecord &Record, |
+ ValueListType &ValueList) const; |
+ |
+ virtual const char *GetTitle() const; |
+ |
+ virtual const char *GetValueHeader() const; |
+ |
+ virtual void PrintRowValue(raw_ostream &Stream, |
+ NaClBitcodeDistValue Value, |
+ const NaClBitcodeDist *Distribution) const; |
+}; |
+ |
+// Collects the distribution of record codes/number of bits used for a |
+// particular blockID. Assumes distribution elements are instances of |
+// NaClBitcodeCodeDistElement. |
+class NaClBitcodeCodeDist : public NaClBitcodeDist { |
+ NaClBitcodeCodeDist(const NaClBitcodeCodeDist&) |
+ LLVM_DELETED_FUNCTION; |
+ void operator=(const NaClBitcodeCodeDist&) |
+ LLVM_DELETED_FUNCTION; |
+ |
+public: |
+ static bool classof(const NaClBitcodeDist *Dist) { |
+ return Dist->getKind() >= RD_CodeDist |
+ && Dist->getKind() < RD_CodeDistLast; |
+ } |
+ |
+protected: |
+ NaClBitcodeCodeDist(NaClBitcodeDistElement *Sentinal, |
+ unsigned BlockID, |
+ NaClBitcodeDistKind Kind=RD_CodeDist) |
+ : NaClBitcodeDist(RecordStorage, Sentinal, Kind), BlockID(BlockID) |
+ {} |
+ |
+ static NaClBitcodeCodeDistElement DefaultSentinel; |
+ |
+public: |
+ explicit NaClBitcodeCodeDist( |
+ unsigned BlockID, |
+ NaClBitcodeCodeDistElement *Sentinel = &DefaultSentinel, |
+ NaClBitcodeDistKind Kind=RD_CodeDist) |
+ : NaClBitcodeDist(RecordStorage, Sentinel, Kind), |
+ BlockID(BlockID) |
+ {} |
+ |
+ virtual ~NaClBitcodeCodeDist(); |
+ |
+ unsigned GetBlockID() const { |
+ return BlockID; |
+ } |
+ |
+ // Returns the printable name for record code CodeID in blocks |
+ // associated with BlockID. |
+ // |
+ // Note: If the name is not known, an "UnknownCode" name is |
+ // generated and return. |
+ static std::string GetCodeName(unsigned CodeID, unsigned BlockID); |
+ |
+private: |
+ // The blockID associated with the record code distribution. |
+ // Used so that we can look up the print name for each record code. |
+ unsigned BlockID; |
+}; |
+ |
+} |
+ |
+#endif |