aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-05-04 20:40:50 +0000
committerChris Lattner <sabre@nondot.org>2007-05-04 20:40:50 +0000
commit8d42fc3da2afb33ded8a24b3c92bd9aa3c869b3e (patch)
tree34a392f8e822d8d8291a6360bd3e3e9df72e7eae
parent4222d806faae71ecc794cfdaa873817873c2f3d8 (diff)
use a template to eliminate manual code duplication
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36757 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Bitcode/BitstreamWriter.h49
1 files changed, 2 insertions, 47 deletions
diff --git a/include/llvm/Bitcode/BitstreamWriter.h b/include/llvm/Bitcode/BitstreamWriter.h
index bcae8e5467..b774181628 100644
--- a/include/llvm/Bitcode/BitstreamWriter.h
+++ b/include/llvm/Bitcode/BitstreamWriter.h
@@ -217,7 +217,8 @@ public:
/// EmitRecord - Emit the specified record to the stream, using an abbrev if
/// we have one to compress the output.
- void EmitRecord(unsigned Code, SmallVectorImpl<uint64_t> &Vals,
+ template<typename uintty>
+ void EmitRecord(unsigned Code, SmallVectorImpl<uintty> &Vals,
unsigned Abbrev = 0) {
if (Abbrev) {
unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
@@ -261,52 +262,6 @@ public:
}
}
- /// EmitRecord - Emit the specified record to the stream, using an abbrev if
- /// we have one to compress the output.
- void EmitRecord(unsigned Code, SmallVectorImpl<unsigned> &Vals,
- unsigned Abbrev = 0) {
- if (Abbrev) {
- unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
- assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
- BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
-
- EmitCode(Abbrev);
-
- // Insert the code into Vals to treat it uniformly.
- Vals.insert(Vals.begin(), Code);
-
- unsigned RecordIdx = 0;
- for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) {
- assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
- const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
-
- if (Op.isLiteral() || Op.getEncoding() != BitCodeAbbrevOp::Array) {
- EmitAbbreviatedField(Op, Vals[RecordIdx]);
- ++RecordIdx;
- } else {
- assert(i+2 == e && "array op not second to last?");
- const BitCodeAbbrevOp &EltEnc = Abbv->getOperandInfo(++i);
-
- // Emit a vbr6 to indicate the number of elements present.
- EmitVBR(Vals.size()-RecordIdx, 6);
-
- // Emit each field.
- for (; RecordIdx != Vals.size(); ++RecordIdx)
- EmitAbbreviatedField(EltEnc, Vals[RecordIdx]);
- }
- }
- assert(RecordIdx == Vals.size() && "Not all record operands emitted!");
- } else {
- // If we don't have an abbrev to use, emit this in its fully unabbreviated
- // form.
- EmitCode(bitc::UNABBREV_RECORD);
- EmitVBR(Code, 6);
- EmitVBR(Vals.size(), 6);
- for (unsigned i = 0, e = Vals.size(); i != e; ++i)
- EmitVBR(Vals[i], 6);
- }
- }
-
//===--------------------------------------------------------------------===//
// Abbrev Emission
//===--------------------------------------------------------------------===//