summaryrefslogtreecommitdiff
path: root/tools/llvm-bcanalyzer
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-06 22:44:40 +0000
committerChris Lattner <sabre@nondot.org>2009-04-06 22:44:40 +0000
commit3f75d3176b495f0a58a8b6cd0ebe1b50d0392fac (patch)
tree457b5e141013b88d55474bc6cd18617a0a199656 /tools/llvm-bcanalyzer
parent123f3848794b333063b478d38ff12e1bd3969125 (diff)
downloadllvm-3f75d3176b495f0a58a8b6cd0ebe1b50d0392fac.tar.gz
llvm-3f75d3176b495f0a58a8b6cd0ebe1b50d0392fac.tar.bz2
llvm-3f75d3176b495f0a58a8b6cd0ebe1b50d0392fac.tar.xz
stub out code for reading record with blobs as blobs. Not active yet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68472 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-bcanalyzer')
-rw-r--r--tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
index cde27fac48..2953e08afa 100644
--- a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
+++ b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
@@ -341,12 +341,33 @@ static bool ParseBlock(BitstreamReader &Stream, unsigned IndentLevel) {
++BlockStats.NumAbbrevs;
break;
default:
+ Record.clear();
+ bool HasBlob = false;
+
++BlockStats.NumRecords;
- if (AbbrevID != bitc::UNABBREV_RECORD)
+ if (AbbrevID != bitc::UNABBREV_RECORD) {
++BlockStats.NumAbbreviatedRecords;
-
- Record.clear();
- unsigned Code = Stream.ReadRecord(AbbrevID, Record);
+ const BitCodeAbbrev *Abbv = Stream.getAbbrev(AbbrevID);
+ if (Abbv->getNumOperandInfos() != 0) {
+ const BitCodeAbbrevOp &LastOp =
+ Abbv->getOperandInfo(Abbv->getNumOperandInfos()-1);
+ // If the last operand is a blob, then this record has blob data.
+ if (LastOp.isEncoding() &&
+ LastOp.getEncoding() == BitCodeAbbrevOp::Blob)
+ HasBlob = true;
+ }
+ }
+
+ unsigned Code;
+ const char *BlobStart = 0;
+ unsigned BlobLen = 0;
+ if (!HasBlob)
+ Code = Stream.ReadRecord(AbbrevID, Record);
+ else {
+ Code = Stream.ReadRecord(AbbrevID, Record);
+ BlobStart = BlobStart;
+ BlobLen = BlobLen;
+ }
// Increment the # occurrences of this code.
if (BlockStats.CodeFreq.size() <= Code)