Index: lib/Bitcode/NaCl/Analysis/NaClAnalyzerBlockDist.cpp |
diff --git a/lib/Bitcode/NaCl/Analysis/NaClAnalyzerBlockDist.cpp b/lib/Bitcode/NaCl/Analysis/NaClAnalyzerBlockDist.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9841a0fe764a8665809e4bd0ccc7dcf1eb4235a3 |
--- /dev/null |
+++ b/lib/Bitcode/NaCl/Analysis/NaClAnalyzerBlockDist.cpp |
@@ -0,0 +1,48 @@ |
+//===-- NaClAnalyzerBlockDist.cpp -----------------------------------------===// |
+// implements distribution maps used to collect block and record |
+// distributions for tools pnacl-bcanalyzer and pnacl-benchmark. |
+// |
+// The LLVM Compiler Infrastructure |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#include "llvm/Bitcode/NaCl/NaClAnalyzerBlockDist.h" |
+ |
+using namespace llvm; |
+ |
+NaClAnalyzerBlockDistElement::~NaClAnalyzerBlockDistElement() {} |
+ |
+NaClBitcodeDistElement* NaClAnalyzerBlockDistElement:: |
+CreateElement(NaClBitcodeDistValue Value) const { |
+ return new NaClAnalyzerBlockDistElement(Value, OrderBlocksByID); |
+} |
+ |
+double NaClAnalyzerBlockDistElement:: |
+GetImportance(NaClBitcodeDistValue Value) const { |
+ if (OrderBlocksByID) |
+ // Negate importance to "undo" reverse ordering of sort. |
+ return -static_cast<double>(BlockID); |
+ else |
+ return NaClBitcodeBlockDistElement::GetImportance(Value); |
+} |
+ |
+const SmallVectorImpl<NaClBitcodeDist*> *NaClAnalyzerBlockDistElement:: |
+GetNestedDistributions() const { |
+ return &NestedDists; |
+} |
+ |
+void NaClAnalyzerBlockDist::AddRecord(const NaClBitcodeRecord &Record) { |
+ cast<NaClAnalyzerBlockDistElement>(GetElement(Record.GetBlockID())) |
+ ->GetRecordDist().AddRecord(Record); |
+} |
+ |
+void NaClAnalyzerBlockDist::AddBlock(const NaClBitcodeBlock &Block) { |
+ NaClBitcodeBlockDist::AddBlock(Block); |
+ if (const NaClBitcodeBlock *EncBlock = Block.GetEnclosingBlock()) { |
+ cast<NaClAnalyzerBlockDistElement>(GetElement(EncBlock->GetBlockID())) |
+ ->GetSubblockDist().AddBlock(Block); |
+ } |
+} |