Index: include/llvm/Bitcode/NaCl/NaClCompressBlockDist.h |
diff --git a/include/llvm/Bitcode/NaCl/NaClCompressBlockDist.h b/include/llvm/Bitcode/NaCl/NaClCompressBlockDist.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..66c3bdc99b98330798eeac8ac20d80382cfcc0d2 |
--- /dev/null |
+++ b/include/llvm/Bitcode/NaCl/NaClCompressBlockDist.h |
@@ -0,0 +1,62 @@ |
+//===-- NaClCompressBlockDist.h -------------------------------------------===// |
+// Defines distribution maps used to collect block and record |
+// distributions for tool pnacl-bccompress. |
+// |
+// The LLVM Compiler Infrastructure |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#ifndef LLVM_BITCODE_NACL_NACLCOMPRESSBLOCKDIST_H |
+#define LLVM_BITCODE_NACL_NACLCOMPRESSBLOCKDIST_H |
+ |
+ |
+#include "llvm/Bitcode/NaCl/NaClBitcodeAbbrevDist.h" |
+#include "llvm/Bitcode/NaCl/NaClBitcodeBlockDist.h" |
+ |
+namespace llvm { |
+ |
+/// Nests record distributions within the block they appear in, |
+/// in a block distribution. The record distributions are refined |
+/// by separating record codes that use the same abbreviation. |
+class NaClCompressBlockDistElement : public NaClBitcodeBlockDistElement { |
+public: |
+ static bool classof(const NaClBitcodeDistElement *Element) { |
+ return Element->getKind() >= RDE_PNaClCompressBlockDist |
+ && Element->getKind() < RDE_PNaClCompressBlockDistLast; |
+ } |
+ |
+ explicit NaClCompressBlockDistElement(unsigned BlockID=0) |
+ : NaClBitcodeBlockDistElement(RDE_PNaClCompressBlockDist), |
+ AbbrevDist(BlockID) { |
+ NestedDists.push_back(&AbbrevDist); |
+ } |
+ |
+ virtual ~NaClCompressBlockDistElement(); |
+ |
+ virtual NaClBitcodeDistElement* |
+ CreateElement(NaClBitcodeDistValue Value) const; |
+ |
+ virtual const SmallVectorImpl<NaClBitcodeDist*> * |
+ GetNestedDistributions() const; |
+ |
+ NaClBitcodeDist &GetAbbrevDist() { |
+ return AbbrevDist; |
+ } |
+ |
+ // Sentinel for generating elements of this type. |
+ static NaClCompressBlockDistElement Sentinel; |
+ |
+private: |
+ // Nested blocks used by GetNestedDistributions. |
+ SmallVector<NaClBitcodeDist*, 1> NestedDists; |
+ |
+ // The abbreviations/records associated with the corresponding block. |
+ NaClBitcodeAbbrevDist AbbrevDist; |
+}; |
+ |
+} |
+ |
+#endif |