Avoid modifying ValueEnumerator's MD ValueList by choosing which function-local MD...
[oota-llvm.git] / lib / Bitcode / Writer / BitcodeWriter.cpp
1 //===--- Bitcode/Writer/BitcodeWriter.cpp - Bitcode Writer ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Bitcode writer implementation.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Bitcode/ReaderWriter.h"
15 #include "llvm/Bitcode/BitstreamWriter.h"
16 #include "llvm/Bitcode/LLVMBitCodes.h"
17 #include "ValueEnumerator.h"
18 #include "llvm/Constants.h"
19 #include "llvm/DerivedTypes.h"
20 #include "llvm/InlineAsm.h"
21 #include "llvm/Instructions.h"
22 #include "llvm/Module.h"
23 #include "llvm/Operator.h"
24 #include "llvm/TypeSymbolTable.h"
25 #include "llvm/ValueSymbolTable.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Support/MathExtras.h"
28 #include "llvm/Support/raw_ostream.h"
29 #include "llvm/System/Program.h"
30 using namespace llvm;
31
32 /// These are manifest constants used by the bitcode writer. They do not need to
33 /// be kept in sync with the reader, but need to be consistent within this file.
34 enum {
35   CurVersion = 0,
36
37   // VALUE_SYMTAB_BLOCK abbrev id's.
38   VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
39   VST_ENTRY_7_ABBREV,
40   VST_ENTRY_6_ABBREV,
41   VST_BBENTRY_6_ABBREV,
42
43   // CONSTANTS_BLOCK abbrev id's.
44   CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
45   CONSTANTS_INTEGER_ABBREV,
46   CONSTANTS_CE_CAST_Abbrev,
47   CONSTANTS_NULL_Abbrev,
48
49   // FUNCTION_BLOCK abbrev id's.
50   FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
51   FUNCTION_INST_BINOP_ABBREV,
52   FUNCTION_INST_BINOP_FLAGS_ABBREV,
53   FUNCTION_INST_CAST_ABBREV,
54   FUNCTION_INST_RET_VOID_ABBREV,
55   FUNCTION_INST_RET_VAL_ABBREV,
56   FUNCTION_INST_UNREACHABLE_ABBREV
57 };
58
59
60 static unsigned GetEncodedCastOpcode(unsigned Opcode) {
61   switch (Opcode) {
62   default: llvm_unreachable("Unknown cast instruction!");
63   case Instruction::Trunc   : return bitc::CAST_TRUNC;
64   case Instruction::ZExt    : return bitc::CAST_ZEXT;
65   case Instruction::SExt    : return bitc::CAST_SEXT;
66   case Instruction::FPToUI  : return bitc::CAST_FPTOUI;
67   case Instruction::FPToSI  : return bitc::CAST_FPTOSI;
68   case Instruction::UIToFP  : return bitc::CAST_UITOFP;
69   case Instruction::SIToFP  : return bitc::CAST_SITOFP;
70   case Instruction::FPTrunc : return bitc::CAST_FPTRUNC;
71   case Instruction::FPExt   : return bitc::CAST_FPEXT;
72   case Instruction::PtrToInt: return bitc::CAST_PTRTOINT;
73   case Instruction::IntToPtr: return bitc::CAST_INTTOPTR;
74   case Instruction::BitCast : return bitc::CAST_BITCAST;
75   }
76 }
77
78 static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
79   switch (Opcode) {
80   default: llvm_unreachable("Unknown binary instruction!");
81   case Instruction::Add:
82   case Instruction::FAdd: return bitc::BINOP_ADD;
83   case Instruction::Sub:
84   case Instruction::FSub: return bitc::BINOP_SUB;
85   case Instruction::Mul:
86   case Instruction::FMul: return bitc::BINOP_MUL;
87   case Instruction::UDiv: return bitc::BINOP_UDIV;
88   case Instruction::FDiv:
89   case Instruction::SDiv: return bitc::BINOP_SDIV;
90   case Instruction::URem: return bitc::BINOP_UREM;
91   case Instruction::FRem:
92   case Instruction::SRem: return bitc::BINOP_SREM;
93   case Instruction::Shl:  return bitc::BINOP_SHL;
94   case Instruction::LShr: return bitc::BINOP_LSHR;
95   case Instruction::AShr: return bitc::BINOP_ASHR;
96   case Instruction::And:  return bitc::BINOP_AND;
97   case Instruction::Or:   return bitc::BINOP_OR;
98   case Instruction::Xor:  return bitc::BINOP_XOR;
99   }
100 }
101
102
103
104 static void WriteStringRecord(unsigned Code, const std::string &Str,
105                               unsigned AbbrevToUse, BitstreamWriter &Stream) {
106   SmallVector<unsigned, 64> Vals;
107
108   // Code: [strchar x N]
109   for (unsigned i = 0, e = Str.size(); i != e; ++i)
110     Vals.push_back(Str[i]);
111
112   // Emit the finished record.
113   Stream.EmitRecord(Code, Vals, AbbrevToUse);
114 }
115
116 // Emit information about parameter attributes.
117 static void WriteAttributeTable(const ValueEnumerator &VE,
118                                 BitstreamWriter &Stream) {
119   const std::vector<AttrListPtr> &Attrs = VE.getAttributes();
120   if (Attrs.empty()) return;
121
122   Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3);
123
124   SmallVector<uint64_t, 64> Record;
125   for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
126     const AttrListPtr &A = Attrs[i];
127     for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i) {
128       const AttributeWithIndex &PAWI = A.getSlot(i);
129       Record.push_back(PAWI.Index);
130
131       // FIXME: remove in LLVM 3.0
132       // Store the alignment in the bitcode as a 16-bit raw value instead of a
133       // 5-bit log2 encoded value. Shift the bits above the alignment up by
134       // 11 bits.
135       uint64_t FauxAttr = PAWI.Attrs & 0xffff;
136       if (PAWI.Attrs & Attribute::Alignment)
137         FauxAttr |= (1ull<<16)<<(((PAWI.Attrs & Attribute::Alignment)-1) >> 16);
138       FauxAttr |= (PAWI.Attrs & (0x3FFull << 21)) << 11;
139
140       Record.push_back(FauxAttr);
141     }
142
143     Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY, Record);
144     Record.clear();
145   }
146
147   Stream.ExitBlock();
148 }
149
150 /// WriteTypeTable - Write out the type table for a module.
151 static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) {
152   const ValueEnumerator::TypeList &TypeList = VE.getTypes();
153
154   Stream.EnterSubblock(bitc::TYPE_BLOCK_ID, 4 /*count from # abbrevs */);
155   SmallVector<uint64_t, 64> TypeVals;
156
157   // Abbrev for TYPE_CODE_POINTER.
158   BitCodeAbbrev *Abbv = new BitCodeAbbrev();
159   Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
160   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
161                             Log2_32_Ceil(VE.getTypes().size()+1)));
162   Abbv->Add(BitCodeAbbrevOp(0));  // Addrspace = 0
163   unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
164
165   // Abbrev for TYPE_CODE_FUNCTION.
166   Abbv = new BitCodeAbbrev();
167   Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION));
168   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // isvararg
169   Abbv->Add(BitCodeAbbrevOp(0));  // FIXME: DEAD value, remove in LLVM 3.0
170   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
171   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
172                             Log2_32_Ceil(VE.getTypes().size()+1)));
173   unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv);
174
175   // Abbrev for TYPE_CODE_STRUCT.
176   Abbv = new BitCodeAbbrev();
177   Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT));
178   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
179   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
180   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
181                             Log2_32_Ceil(VE.getTypes().size()+1)));
182   unsigned StructAbbrev = Stream.EmitAbbrev(Abbv);
183
184   // Abbrev for TYPE_CODE_ARRAY.
185   Abbv = new BitCodeAbbrev();
186   Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY));
187   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));   // size
188   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
189                             Log2_32_Ceil(VE.getTypes().size()+1)));
190   unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv);
191
192   // Emit an entry count so the reader can reserve space.
193   TypeVals.push_back(TypeList.size());
194   Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals);
195   TypeVals.clear();
196
197   // Loop over all of the types, emitting each in turn.
198   for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
199     const Type *T = TypeList[i].first;
200     int AbbrevToUse = 0;
201     unsigned Code = 0;
202
203     switch (T->getTypeID()) {
204     default: llvm_unreachable("Unknown type!");
205     case Type::VoidTyID:   Code = bitc::TYPE_CODE_VOID;   break;
206     case Type::FloatTyID:  Code = bitc::TYPE_CODE_FLOAT;  break;
207     case Type::DoubleTyID: Code = bitc::TYPE_CODE_DOUBLE; break;
208     case Type::X86_FP80TyID: Code = bitc::TYPE_CODE_X86_FP80; break;
209     case Type::FP128TyID: Code = bitc::TYPE_CODE_FP128; break;
210     case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
211     case Type::LabelTyID:  Code = bitc::TYPE_CODE_LABEL;  break;
212     case Type::OpaqueTyID: Code = bitc::TYPE_CODE_OPAQUE; break;
213     case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break;
214     case Type::IntegerTyID:
215       // INTEGER: [width]
216       Code = bitc::TYPE_CODE_INTEGER;
217       TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
218       break;
219     case Type::PointerTyID: {
220       const PointerType *PTy = cast<PointerType>(T);
221       // POINTER: [pointee type, address space]
222       Code = bitc::TYPE_CODE_POINTER;
223       TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
224       unsigned AddressSpace = PTy->getAddressSpace();
225       TypeVals.push_back(AddressSpace);
226       if (AddressSpace == 0) AbbrevToUse = PtrAbbrev;
227       break;
228     }
229     case Type::FunctionTyID: {
230       const FunctionType *FT = cast<FunctionType>(T);
231       // FUNCTION: [isvararg, attrid, retty, paramty x N]
232       Code = bitc::TYPE_CODE_FUNCTION;
233       TypeVals.push_back(FT->isVarArg());
234       TypeVals.push_back(0);  // FIXME: DEAD: remove in llvm 3.0
235       TypeVals.push_back(VE.getTypeID(FT->getReturnType()));
236       for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
237         TypeVals.push_back(VE.getTypeID(FT->getParamType(i)));
238       AbbrevToUse = FunctionAbbrev;
239       break;
240     }
241     case Type::StructTyID: {
242       const StructType *ST = cast<StructType>(T);
243       // STRUCT: [ispacked, eltty x N]
244       Code = bitc::TYPE_CODE_STRUCT;
245       TypeVals.push_back(ST->isPacked());
246       // Output all of the element types.
247       for (StructType::element_iterator I = ST->element_begin(),
248            E = ST->element_end(); I != E; ++I)
249         TypeVals.push_back(VE.getTypeID(*I));
250       AbbrevToUse = StructAbbrev;
251       break;
252     }
253     case Type::ArrayTyID: {
254       const ArrayType *AT = cast<ArrayType>(T);
255       // ARRAY: [numelts, eltty]
256       Code = bitc::TYPE_CODE_ARRAY;
257       TypeVals.push_back(AT->getNumElements());
258       TypeVals.push_back(VE.getTypeID(AT->getElementType()));
259       AbbrevToUse = ArrayAbbrev;
260       break;
261     }
262     case Type::VectorTyID: {
263       const VectorType *VT = cast<VectorType>(T);
264       // VECTOR [numelts, eltty]
265       Code = bitc::TYPE_CODE_VECTOR;
266       TypeVals.push_back(VT->getNumElements());
267       TypeVals.push_back(VE.getTypeID(VT->getElementType()));
268       break;
269     }
270     }
271
272     // Emit the finished record.
273     Stream.EmitRecord(Code, TypeVals, AbbrevToUse);
274     TypeVals.clear();
275   }
276
277   Stream.ExitBlock();
278 }
279
280 static unsigned getEncodedLinkage(const GlobalValue *GV) {
281   switch (GV->getLinkage()) {
282   default: llvm_unreachable("Invalid linkage!");
283   case GlobalValue::GhostLinkage:  // Map ghost linkage onto external.
284   case GlobalValue::ExternalLinkage:            return 0;
285   case GlobalValue::WeakAnyLinkage:             return 1;
286   case GlobalValue::AppendingLinkage:           return 2;
287   case GlobalValue::InternalLinkage:            return 3;
288   case GlobalValue::LinkOnceAnyLinkage:         return 4;
289   case GlobalValue::DLLImportLinkage:           return 5;
290   case GlobalValue::DLLExportLinkage:           return 6;
291   case GlobalValue::ExternalWeakLinkage:        return 7;
292   case GlobalValue::CommonLinkage:              return 8;
293   case GlobalValue::PrivateLinkage:             return 9;
294   case GlobalValue::WeakODRLinkage:             return 10;
295   case GlobalValue::LinkOnceODRLinkage:         return 11;
296   case GlobalValue::AvailableExternallyLinkage: return 12;
297   case GlobalValue::LinkerPrivateLinkage:       return 13;
298   }
299 }
300
301 static unsigned getEncodedVisibility(const GlobalValue *GV) {
302   switch (GV->getVisibility()) {
303   default: llvm_unreachable("Invalid visibility!");
304   case GlobalValue::DefaultVisibility:   return 0;
305   case GlobalValue::HiddenVisibility:    return 1;
306   case GlobalValue::ProtectedVisibility: return 2;
307   }
308 }
309
310 // Emit top-level description of module, including target triple, inline asm,
311 // descriptors for global variables, and function prototype info.
312 static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,
313                             BitstreamWriter &Stream) {
314   // Emit the list of dependent libraries for the Module.
315   for (Module::lib_iterator I = M->lib_begin(), E = M->lib_end(); I != E; ++I)
316     WriteStringRecord(bitc::MODULE_CODE_DEPLIB, *I, 0/*TODO*/, Stream);
317
318   // Emit various pieces of data attached to a module.
319   if (!M->getTargetTriple().empty())
320     WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(),
321                       0/*TODO*/, Stream);
322   if (!M->getDataLayout().empty())
323     WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, M->getDataLayout(),
324                       0/*TODO*/, Stream);
325   if (!M->getModuleInlineAsm().empty())
326     WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
327                       0/*TODO*/, Stream);
328
329   // Emit information about sections and GC, computing how many there are. Also
330   // compute the maximum alignment value.
331   std::map<std::string, unsigned> SectionMap;
332   std::map<std::string, unsigned> GCMap;
333   unsigned MaxAlignment = 0;
334   unsigned MaxGlobalType = 0;
335   for (Module::const_global_iterator GV = M->global_begin(),E = M->global_end();
336        GV != E; ++GV) {
337     MaxAlignment = std::max(MaxAlignment, GV->getAlignment());
338     MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV->getType()));
339
340     if (!GV->hasSection()) continue;
341     // Give section names unique ID's.
342     unsigned &Entry = SectionMap[GV->getSection()];
343     if (Entry != 0) continue;
344     WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV->getSection(),
345                       0/*TODO*/, Stream);
346     Entry = SectionMap.size();
347   }
348   for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) {
349     MaxAlignment = std::max(MaxAlignment, F->getAlignment());
350     if (F->hasSection()) {
351       // Give section names unique ID's.
352       unsigned &Entry = SectionMap[F->getSection()];
353       if (!Entry) {
354         WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F->getSection(),
355                           0/*TODO*/, Stream);
356         Entry = SectionMap.size();
357       }
358     }
359     if (F->hasGC()) {
360       // Same for GC names.
361       unsigned &Entry = GCMap[F->getGC()];
362       if (!Entry) {
363         WriteStringRecord(bitc::MODULE_CODE_GCNAME, F->getGC(),
364                           0/*TODO*/, Stream);
365         Entry = GCMap.size();
366       }
367     }
368   }
369
370   // Emit abbrev for globals, now that we know # sections and max alignment.
371   unsigned SimpleGVarAbbrev = 0;
372   if (!M->global_empty()) {
373     // Add an abbrev for common globals with no visibility or thread localness.
374     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
375     Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR));
376     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
377                               Log2_32_Ceil(MaxGlobalType+1)));
378     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));      // Constant.
379     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));        // Initializer.
380     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));      // Linkage.
381     if (MaxAlignment == 0)                                      // Alignment.
382       Abbv->Add(BitCodeAbbrevOp(0));
383     else {
384       unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1;
385       Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
386                                Log2_32_Ceil(MaxEncAlignment+1)));
387     }
388     if (SectionMap.empty())                                    // Section.
389       Abbv->Add(BitCodeAbbrevOp(0));
390     else
391       Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
392                                Log2_32_Ceil(SectionMap.size()+1)));
393     // Don't bother emitting vis + thread local.
394     SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv);
395   }
396
397   // Emit the global variable information.
398   SmallVector<unsigned, 64> Vals;
399   for (Module::const_global_iterator GV = M->global_begin(),E = M->global_end();
400        GV != E; ++GV) {
401     unsigned AbbrevToUse = 0;
402
403     // GLOBALVAR: [type, isconst, initid,
404     //             linkage, alignment, section, visibility, threadlocal]
405     Vals.push_back(VE.getTypeID(GV->getType()));
406     Vals.push_back(GV->isConstant());
407     Vals.push_back(GV->isDeclaration() ? 0 :
408                    (VE.getValueID(GV->getInitializer()) + 1));
409     Vals.push_back(getEncodedLinkage(GV));
410     Vals.push_back(Log2_32(GV->getAlignment())+1);
411     Vals.push_back(GV->hasSection() ? SectionMap[GV->getSection()] : 0);
412     if (GV->isThreadLocal() ||
413         GV->getVisibility() != GlobalValue::DefaultVisibility) {
414       Vals.push_back(getEncodedVisibility(GV));
415       Vals.push_back(GV->isThreadLocal());
416     } else {
417       AbbrevToUse = SimpleGVarAbbrev;
418     }
419
420     Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse);
421     Vals.clear();
422   }
423
424   // Emit the function proto information.
425   for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) {
426     // FUNCTION:  [type, callingconv, isproto, paramattr,
427     //             linkage, alignment, section, visibility, gc]
428     Vals.push_back(VE.getTypeID(F->getType()));
429     Vals.push_back(F->getCallingConv());
430     Vals.push_back(F->isDeclaration());
431     Vals.push_back(getEncodedLinkage(F));
432     Vals.push_back(VE.getAttributeID(F->getAttributes()));
433     Vals.push_back(Log2_32(F->getAlignment())+1);
434     Vals.push_back(F->hasSection() ? SectionMap[F->getSection()] : 0);
435     Vals.push_back(getEncodedVisibility(F));
436     Vals.push_back(F->hasGC() ? GCMap[F->getGC()] : 0);
437
438     unsigned AbbrevToUse = 0;
439     Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);
440     Vals.clear();
441   }
442
443
444   // Emit the alias information.
445   for (Module::const_alias_iterator AI = M->alias_begin(), E = M->alias_end();
446        AI != E; ++AI) {
447     Vals.push_back(VE.getTypeID(AI->getType()));
448     Vals.push_back(VE.getValueID(AI->getAliasee()));
449     Vals.push_back(getEncodedLinkage(AI));
450     Vals.push_back(getEncodedVisibility(AI));
451     unsigned AbbrevToUse = 0;
452     Stream.EmitRecord(bitc::MODULE_CODE_ALIAS, Vals, AbbrevToUse);
453     Vals.clear();
454   }
455 }
456
457 static uint64_t GetOptimizationFlags(const Value *V) {
458   uint64_t Flags = 0;
459
460   if (const OverflowingBinaryOperator *OBO =
461         dyn_cast<OverflowingBinaryOperator>(V)) {
462     if (OBO->hasNoSignedWrap())
463       Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;
464     if (OBO->hasNoUnsignedWrap())
465       Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP;
466   } else if (const SDivOperator *Div = dyn_cast<SDivOperator>(V)) {
467     if (Div->isExact())
468       Flags |= 1 << bitc::SDIV_EXACT;
469   }
470
471   return Flags;
472 }
473
474 static void WriteMDNode(const MDNode *N,
475                         const ValueEnumerator &VE,
476                         BitstreamWriter &Stream,
477                         SmallVector<uint64_t, 64> &Record) {
478   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
479     if (N->getOperand(i)) {
480       Record.push_back(VE.getTypeID(N->getOperand(i)->getType()));
481       Record.push_back(VE.getValueID(N->getOperand(i)));
482     } else {
483       Record.push_back(VE.getTypeID(Type::getVoidTy(N->getContext())));
484       Record.push_back(0);
485     }
486   }
487   unsigned MDCode = N->isFunctionLocal() ? bitc::METADATA_FN_NODE :
488                                            bitc::METADATA_NODE;
489   Stream.EmitRecord(MDCode, Record, 0);
490   Record.clear();
491 }
492
493 static void WriteModuleMetadata(const ValueEnumerator &VE,
494                                 BitstreamWriter &Stream) {
495   const ValueEnumerator::ValueList &Vals = VE.getMDValues();
496   bool StartedMetadataBlock = false;
497   unsigned MDSAbbrev = 0;
498   SmallVector<uint64_t, 64> Record;
499   for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
500
501     if (const MDNode *N = dyn_cast<MDNode>(Vals[i].first)) {
502       if (!N->isFunctionLocal()) {
503         if (!StartedMetadataBlock) {
504           Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
505           StartedMetadataBlock = true;
506         }
507         WriteMDNode(N, VE, Stream, Record);
508       }
509     } else if (const MDString *MDS = dyn_cast<MDString>(Vals[i].first)) {
510       if (!StartedMetadataBlock)  {
511         Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
512
513         // Abbrev for METADATA_STRING.
514         BitCodeAbbrev *Abbv = new BitCodeAbbrev();
515         Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING));
516         Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
517         Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
518         MDSAbbrev = Stream.EmitAbbrev(Abbv);
519         StartedMetadataBlock = true;
520       }
521
522       // Code: [strchar x N]
523       Record.append(MDS->begin(), MDS->end());
524
525       // Emit the finished record.
526       Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev);
527       Record.clear();
528     } else if (const NamedMDNode *NMD = dyn_cast<NamedMDNode>(Vals[i].first)) {
529       if (!StartedMetadataBlock)  {
530         Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
531         StartedMetadataBlock = true;
532       }
533
534       // Write name.
535       StringRef Str = NMD->getName();
536       for (unsigned i = 0, e = Str.size(); i != e; ++i)
537         Record.push_back(Str[i]);
538       Stream.EmitRecord(bitc::METADATA_NAME, Record, 0/*TODO*/);
539       Record.clear();
540
541       // Write named metadata operands.
542       for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
543         if (NMD->getOperand(i))
544           Record.push_back(VE.getValueID(NMD->getOperand(i)));
545         else
546           Record.push_back(~0U);
547       }
548       Stream.EmitRecord(bitc::METADATA_NAMED_NODE, Record, 0);
549       Record.clear();
550     }
551   }
552
553   if (StartedMetadataBlock)
554     Stream.ExitBlock();
555 }
556
557 static void WriteFunctionLocalMetadata(const Function &F,
558                                        const ValueEnumerator &VE,
559                                        BitstreamWriter &Stream) {
560   bool StartedMetadataBlock = false;
561   SmallVector<uint64_t, 64> Record;
562   const ValueEnumerator::ValueList &Vals = VE.getMDValues();
563   
564   for (unsigned i = 0, e = Vals.size(); i != e; ++i)
565     if (const MDNode *N = dyn_cast<MDNode>(Vals[i].first))
566       if (N->getFunction() == &F) {
567         if (!StartedMetadataBlock) {
568           Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
569           StartedMetadataBlock = true;
570         }
571         WriteMDNode(N, VE, Stream, Record);
572       }
573
574   if (StartedMetadataBlock)
575     Stream.ExitBlock();
576 }
577
578 static void WriteMetadataAttachment(const Function &F,
579                                     const ValueEnumerator &VE,
580                                     BitstreamWriter &Stream) {
581   bool StartedMetadataBlock = false;
582   SmallVector<uint64_t, 64> Record;
583
584   // Write metadata attachments
585   // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
586   SmallVector<std::pair<unsigned, MDNode*>, 4> MDs;
587   
588   for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
589     for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
590          I != E; ++I) {
591       MDs.clear();
592       I->getAllMetadata(MDs);
593       
594       // If no metadata, ignore instruction.
595       if (MDs.empty()) continue;
596
597       Record.push_back(VE.getInstructionID(I));
598       
599       for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
600         Record.push_back(MDs[i].first);
601         Record.push_back(VE.getValueID(MDs[i].second));
602       }
603       if (!StartedMetadataBlock)  {
604         Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3);
605         StartedMetadataBlock = true;
606       }
607       Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
608       Record.clear();
609     }
610
611   if (StartedMetadataBlock)
612     Stream.ExitBlock();
613 }
614
615 static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) {
616   SmallVector<uint64_t, 64> Record;
617
618   // Write metadata kinds
619   // METADATA_KIND - [n x [id, name]]
620   SmallVector<StringRef, 4> Names;
621   M->getMDKindNames(Names);
622   
623   assert(Names[0] == "" && "MDKind #0 is invalid");
624   if (Names.size() == 1) return;
625
626   Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
627   
628   for (unsigned MDKindID = 1, e = Names.size(); MDKindID != e; ++MDKindID) {
629     Record.push_back(MDKindID);
630     StringRef KName = Names[MDKindID];
631     Record.append(KName.begin(), KName.end());
632     
633     Stream.EmitRecord(bitc::METADATA_KIND, Record, 0);
634     Record.clear();
635   }
636
637   Stream.ExitBlock();
638 }
639
640 static void WriteConstants(unsigned FirstVal, unsigned LastVal,
641                            const ValueEnumerator &VE,
642                            BitstreamWriter &Stream, bool isGlobal) {
643   if (FirstVal == LastVal) return;
644
645   Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4);
646
647   unsigned AggregateAbbrev = 0;
648   unsigned String8Abbrev = 0;
649   unsigned CString7Abbrev = 0;
650   unsigned CString6Abbrev = 0;
651   // If this is a constant pool for the module, emit module-specific abbrevs.
652   if (isGlobal) {
653     // Abbrev for CST_CODE_AGGREGATE.
654     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
655     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE));
656     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
657     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1)));
658     AggregateAbbrev = Stream.EmitAbbrev(Abbv);
659
660     // Abbrev for CST_CODE_STRING.
661     Abbv = new BitCodeAbbrev();
662     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
663     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
664     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
665     String8Abbrev = Stream.EmitAbbrev(Abbv);
666     // Abbrev for CST_CODE_CSTRING.
667     Abbv = new BitCodeAbbrev();
668     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
669     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
670     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
671     CString7Abbrev = Stream.EmitAbbrev(Abbv);
672     // Abbrev for CST_CODE_CSTRING.
673     Abbv = new BitCodeAbbrev();
674     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
675     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
676     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
677     CString6Abbrev = Stream.EmitAbbrev(Abbv);
678   }
679
680   SmallVector<uint64_t, 64> Record;
681
682   const ValueEnumerator::ValueList &Vals = VE.getValues();
683   const Type *LastTy = 0;
684   for (unsigned i = FirstVal; i != LastVal; ++i) {
685     const Value *V = Vals[i].first;
686     // If we need to switch types, do so now.
687     if (V->getType() != LastTy) {
688       LastTy = V->getType();
689       Record.push_back(VE.getTypeID(LastTy));
690       Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record,
691                         CONSTANTS_SETTYPE_ABBREV);
692       Record.clear();
693     }
694
695     if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
696       Record.push_back(unsigned(IA->hasSideEffects()) |
697                        unsigned(IA->isAlignStack()) << 1);
698
699       // Add the asm string.
700       const std::string &AsmStr = IA->getAsmString();
701       Record.push_back(AsmStr.size());
702       for (unsigned i = 0, e = AsmStr.size(); i != e; ++i)
703         Record.push_back(AsmStr[i]);
704
705       // Add the constraint string.
706       const std::string &ConstraintStr = IA->getConstraintString();
707       Record.push_back(ConstraintStr.size());
708       for (unsigned i = 0, e = ConstraintStr.size(); i != e; ++i)
709         Record.push_back(ConstraintStr[i]);
710       Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record);
711       Record.clear();
712       continue;
713     }
714     const Constant *C = cast<Constant>(V);
715     unsigned Code = -1U;
716     unsigned AbbrevToUse = 0;
717     if (C->isNullValue()) {
718       Code = bitc::CST_CODE_NULL;
719     } else if (isa<UndefValue>(C)) {
720       Code = bitc::CST_CODE_UNDEF;
721     } else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) {
722       if (IV->getBitWidth() <= 64) {
723         int64_t V = IV->getSExtValue();
724         if (V >= 0)
725           Record.push_back(V << 1);
726         else
727           Record.push_back((-V << 1) | 1);
728         Code = bitc::CST_CODE_INTEGER;
729         AbbrevToUse = CONSTANTS_INTEGER_ABBREV;
730       } else {                             // Wide integers, > 64 bits in size.
731         // We have an arbitrary precision integer value to write whose
732         // bit width is > 64. However, in canonical unsigned integer
733         // format it is likely that the high bits are going to be zero.
734         // So, we only write the number of active words.
735         unsigned NWords = IV->getValue().getActiveWords();
736         const uint64_t *RawWords = IV->getValue().getRawData();
737         for (unsigned i = 0; i != NWords; ++i) {
738           int64_t V = RawWords[i];
739           if (V >= 0)
740             Record.push_back(V << 1);
741           else
742             Record.push_back((-V << 1) | 1);
743         }
744         Code = bitc::CST_CODE_WIDE_INTEGER;
745       }
746     } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
747       Code = bitc::CST_CODE_FLOAT;
748       const Type *Ty = CFP->getType();
749       if (Ty->isFloatTy() || Ty->isDoubleTy()) {
750         Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue());
751       } else if (Ty->isX86_FP80Ty()) {
752         // api needed to prevent premature destruction
753         // bits are not in the same order as a normal i80 APInt, compensate.
754         APInt api = CFP->getValueAPF().bitcastToAPInt();
755         const uint64_t *p = api.getRawData();
756         Record.push_back((p[1] << 48) | (p[0] >> 16));
757         Record.push_back(p[0] & 0xffffLL);
758       } else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) {
759         APInt api = CFP->getValueAPF().bitcastToAPInt();
760         const uint64_t *p = api.getRawData();
761         Record.push_back(p[0]);
762         Record.push_back(p[1]);
763       } else {
764         assert (0 && "Unknown FP type!");
765       }
766     } else if (isa<ConstantArray>(C) && cast<ConstantArray>(C)->isString()) {
767       const ConstantArray *CA = cast<ConstantArray>(C);
768       // Emit constant strings specially.
769       unsigned NumOps = CA->getNumOperands();
770       // If this is a null-terminated string, use the denser CSTRING encoding.
771       if (CA->getOperand(NumOps-1)->isNullValue()) {
772         Code = bitc::CST_CODE_CSTRING;
773         --NumOps;  // Don't encode the null, which isn't allowed by char6.
774       } else {
775         Code = bitc::CST_CODE_STRING;
776         AbbrevToUse = String8Abbrev;
777       }
778       bool isCStr7 = Code == bitc::CST_CODE_CSTRING;
779       bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING;
780       for (unsigned i = 0; i != NumOps; ++i) {
781         unsigned char V = cast<ConstantInt>(CA->getOperand(i))->getZExtValue();
782         Record.push_back(V);
783         isCStr7 &= (V & 128) == 0;
784         if (isCStrChar6)
785           isCStrChar6 = BitCodeAbbrevOp::isChar6(V);
786       }
787
788       if (isCStrChar6)
789         AbbrevToUse = CString6Abbrev;
790       else if (isCStr7)
791         AbbrevToUse = CString7Abbrev;
792     } else if (isa<ConstantArray>(C) || isa<ConstantStruct>(V) ||
793                isa<ConstantVector>(V)) {
794       Code = bitc::CST_CODE_AGGREGATE;
795       for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i)
796         Record.push_back(VE.getValueID(C->getOperand(i)));
797       AbbrevToUse = AggregateAbbrev;
798     } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
799       switch (CE->getOpcode()) {
800       default:
801         if (Instruction::isCast(CE->getOpcode())) {
802           Code = bitc::CST_CODE_CE_CAST;
803           Record.push_back(GetEncodedCastOpcode(CE->getOpcode()));
804           Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
805           Record.push_back(VE.getValueID(C->getOperand(0)));
806           AbbrevToUse = CONSTANTS_CE_CAST_Abbrev;
807         } else {
808           assert(CE->getNumOperands() == 2 && "Unknown constant expr!");
809           Code = bitc::CST_CODE_CE_BINOP;
810           Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode()));
811           Record.push_back(VE.getValueID(C->getOperand(0)));
812           Record.push_back(VE.getValueID(C->getOperand(1)));
813           uint64_t Flags = GetOptimizationFlags(CE);
814           if (Flags != 0)
815             Record.push_back(Flags);
816         }
817         break;
818       case Instruction::GetElementPtr:
819         Code = bitc::CST_CODE_CE_GEP;
820         if (cast<GEPOperator>(C)->isInBounds())
821           Code = bitc::CST_CODE_CE_INBOUNDS_GEP;
822         for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
823           Record.push_back(VE.getTypeID(C->getOperand(i)->getType()));
824           Record.push_back(VE.getValueID(C->getOperand(i)));
825         }
826         break;
827       case Instruction::Select:
828         Code = bitc::CST_CODE_CE_SELECT;
829         Record.push_back(VE.getValueID(C->getOperand(0)));
830         Record.push_back(VE.getValueID(C->getOperand(1)));
831         Record.push_back(VE.getValueID(C->getOperand(2)));
832         break;
833       case Instruction::ExtractElement:
834         Code = bitc::CST_CODE_CE_EXTRACTELT;
835         Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
836         Record.push_back(VE.getValueID(C->getOperand(0)));
837         Record.push_back(VE.getValueID(C->getOperand(1)));
838         break;
839       case Instruction::InsertElement:
840         Code = bitc::CST_CODE_CE_INSERTELT;
841         Record.push_back(VE.getValueID(C->getOperand(0)));
842         Record.push_back(VE.getValueID(C->getOperand(1)));
843         Record.push_back(VE.getValueID(C->getOperand(2)));
844         break;
845       case Instruction::ShuffleVector:
846         // If the return type and argument types are the same, this is a
847         // standard shufflevector instruction.  If the types are different,
848         // then the shuffle is widening or truncating the input vectors, and
849         // the argument type must also be encoded.
850         if (C->getType() == C->getOperand(0)->getType()) {
851           Code = bitc::CST_CODE_CE_SHUFFLEVEC;
852         } else {
853           Code = bitc::CST_CODE_CE_SHUFVEC_EX;
854           Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
855         }
856         Record.push_back(VE.getValueID(C->getOperand(0)));
857         Record.push_back(VE.getValueID(C->getOperand(1)));
858         Record.push_back(VE.getValueID(C->getOperand(2)));
859         break;
860       case Instruction::ICmp:
861       case Instruction::FCmp:
862         Code = bitc::CST_CODE_CE_CMP;
863         Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
864         Record.push_back(VE.getValueID(C->getOperand(0)));
865         Record.push_back(VE.getValueID(C->getOperand(1)));
866         Record.push_back(CE->getPredicate());
867         break;
868       }
869     } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
870       assert(BA->getFunction() == BA->getBasicBlock()->getParent() &&
871              "Malformed blockaddress");
872       Code = bitc::CST_CODE_BLOCKADDRESS;
873       Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
874       Record.push_back(VE.getValueID(BA->getFunction()));
875       Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock()));
876     } else {
877       llvm_unreachable("Unknown constant!");
878     }
879     Stream.EmitRecord(Code, Record, AbbrevToUse);
880     Record.clear();
881   }
882
883   Stream.ExitBlock();
884 }
885
886 static void WriteModuleConstants(const ValueEnumerator &VE,
887                                  BitstreamWriter &Stream) {
888   const ValueEnumerator::ValueList &Vals = VE.getValues();
889
890   // Find the first constant to emit, which is the first non-globalvalue value.
891   // We know globalvalues have been emitted by WriteModuleInfo.
892   for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
893     if (!isa<GlobalValue>(Vals[i].first)) {
894       WriteConstants(i, Vals.size(), VE, Stream, true);
895       return;
896     }
897   }
898 }
899
900 /// PushValueAndType - The file has to encode both the value and type id for
901 /// many values, because we need to know what type to create for forward
902 /// references.  However, most operands are not forward references, so this type
903 /// field is not needed.
904 ///
905 /// This function adds V's value ID to Vals.  If the value ID is higher than the
906 /// instruction ID, then it is a forward reference, and it also includes the
907 /// type ID.
908 static bool PushValueAndType(const Value *V, unsigned InstID,
909                              SmallVector<unsigned, 64> &Vals,
910                              ValueEnumerator &VE) {
911   unsigned ValID = VE.getValueID(V);
912   Vals.push_back(ValID);
913   if (ValID >= InstID) {
914     Vals.push_back(VE.getTypeID(V->getType()));
915     return true;
916   }
917   return false;
918 }
919
920 /// WriteInstruction - Emit an instruction to the specified stream.
921 static void WriteInstruction(const Instruction &I, unsigned InstID,
922                              ValueEnumerator &VE, BitstreamWriter &Stream,
923                              SmallVector<unsigned, 64> &Vals) {
924   unsigned Code = 0;
925   unsigned AbbrevToUse = 0;
926   VE.setInstructionID(&I);
927   switch (I.getOpcode()) {
928   default:
929     if (Instruction::isCast(I.getOpcode())) {
930       Code = bitc::FUNC_CODE_INST_CAST;
931       if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
932         AbbrevToUse = FUNCTION_INST_CAST_ABBREV;
933       Vals.push_back(VE.getTypeID(I.getType()));
934       Vals.push_back(GetEncodedCastOpcode(I.getOpcode()));
935     } else {
936       assert(isa<BinaryOperator>(I) && "Unknown instruction!");
937       Code = bitc::FUNC_CODE_INST_BINOP;
938       if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
939         AbbrevToUse = FUNCTION_INST_BINOP_ABBREV;
940       Vals.push_back(VE.getValueID(I.getOperand(1)));
941       Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
942       uint64_t Flags = GetOptimizationFlags(&I);
943       if (Flags != 0) {
944         if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV)
945           AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV;
946         Vals.push_back(Flags);
947       }
948     }
949     break;
950
951   case Instruction::GetElementPtr:
952     Code = bitc::FUNC_CODE_INST_GEP;
953     if (cast<GEPOperator>(&I)->isInBounds())
954       Code = bitc::FUNC_CODE_INST_INBOUNDS_GEP;
955     for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
956       PushValueAndType(I.getOperand(i), InstID, Vals, VE);
957     break;
958   case Instruction::ExtractValue: {
959     Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
960     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
961     const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
962     for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
963       Vals.push_back(*i);
964     break;
965   }
966   case Instruction::InsertValue: {
967     Code = bitc::FUNC_CODE_INST_INSERTVAL;
968     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
969     PushValueAndType(I.getOperand(1), InstID, Vals, VE);
970     const InsertValueInst *IVI = cast<InsertValueInst>(&I);
971     for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
972       Vals.push_back(*i);
973     break;
974   }
975   case Instruction::Select:
976     Code = bitc::FUNC_CODE_INST_VSELECT;
977     PushValueAndType(I.getOperand(1), InstID, Vals, VE);
978     Vals.push_back(VE.getValueID(I.getOperand(2)));
979     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
980     break;
981   case Instruction::ExtractElement:
982     Code = bitc::FUNC_CODE_INST_EXTRACTELT;
983     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
984     Vals.push_back(VE.getValueID(I.getOperand(1)));
985     break;
986   case Instruction::InsertElement:
987     Code = bitc::FUNC_CODE_INST_INSERTELT;
988     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
989     Vals.push_back(VE.getValueID(I.getOperand(1)));
990     Vals.push_back(VE.getValueID(I.getOperand(2)));
991     break;
992   case Instruction::ShuffleVector:
993     Code = bitc::FUNC_CODE_INST_SHUFFLEVEC;
994     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
995     Vals.push_back(VE.getValueID(I.getOperand(1)));
996     Vals.push_back(VE.getValueID(I.getOperand(2)));
997     break;
998   case Instruction::ICmp:
999   case Instruction::FCmp:
1000     // compare returning Int1Ty or vector of Int1Ty
1001     Code = bitc::FUNC_CODE_INST_CMP2;
1002     PushValueAndType(I.getOperand(0), InstID, Vals, VE);
1003     Vals.push_back(VE.getValueID(I.getOperand(1)));
1004     Vals.push_back(cast<CmpInst>(I).getPredicate());
1005     break;
1006
1007   case Instruction::Ret:
1008     {
1009       Code = bitc::FUNC_CODE_INST_RET;
1010       unsigned NumOperands = I.getNumOperands();
1011       if (NumOperands == 0)
1012         AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV;
1013       else if (NumOperands == 1) {
1014         if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
1015           AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV;
1016       } else {
1017         for (unsigned i = 0, e = NumOperands; i != e; ++i)
1018           PushValueAndType(I.getOperand(i), InstID, Vals, VE);
1019       }
1020     }
1021     break;
1022   case Instruction::Br:
1023     {
1024       Code = bitc::FUNC_CODE_INST_BR;
1025       BranchInst &II = cast<BranchInst>(I);
1026       Vals.push_back(VE.getValueID(II.getSuccessor(0)));
1027       if (II.isConditional()) {
1028         Vals.push_back(VE.getValueID(II.getSuccessor(1)));
1029         Vals.push_back(VE.getValueID(II.getCondition()));
1030       }
1031     }
1032     break;
1033   case Instruction::Switch:
1034     Code = bitc::FUNC_CODE_INST_SWITCH;
1035     Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
1036     for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
1037       Vals.push_back(VE.getValueID(I.getOperand(i)));
1038     break;
1039   case Instruction::IndirectBr:
1040     Code = bitc::FUNC_CODE_INST_INDIRECTBR;
1041     Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
1042     for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
1043       Vals.push_back(VE.getValueID(I.getOperand(i)));
1044     break;
1045       
1046   case Instruction::Invoke: {
1047     const InvokeInst *II = cast<InvokeInst>(&I);
1048     const Value *Callee(II->getCalledValue());
1049     const PointerType *PTy = cast<PointerType>(Callee->getType());
1050     const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
1051     Code = bitc::FUNC_CODE_INST_INVOKE;
1052
1053     Vals.push_back(VE.getAttributeID(II->getAttributes()));
1054     Vals.push_back(II->getCallingConv());
1055     Vals.push_back(VE.getValueID(II->getNormalDest()));
1056     Vals.push_back(VE.getValueID(II->getUnwindDest()));
1057     PushValueAndType(Callee, InstID, Vals, VE);
1058
1059     // Emit value #'s for the fixed parameters.
1060     for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
1061       Vals.push_back(VE.getValueID(I.getOperand(i+3)));  // fixed param.
1062
1063     // Emit type/value pairs for varargs params.
1064     if (FTy->isVarArg()) {
1065       for (unsigned i = 3+FTy->getNumParams(), e = I.getNumOperands();
1066            i != e; ++i)
1067         PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg
1068     }
1069     break;
1070   }
1071   case Instruction::Unwind:
1072     Code = bitc::FUNC_CODE_INST_UNWIND;
1073     break;
1074   case Instruction::Unreachable:
1075     Code = bitc::FUNC_CODE_INST_UNREACHABLE;
1076     AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV;
1077     break;
1078
1079   case Instruction::PHI:
1080     Code = bitc::FUNC_CODE_INST_PHI;
1081     Vals.push_back(VE.getTypeID(I.getType()));
1082     for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
1083       Vals.push_back(VE.getValueID(I.getOperand(i)));
1084     break;
1085
1086   case Instruction::Alloca:
1087     Code = bitc::FUNC_CODE_INST_ALLOCA;
1088     Vals.push_back(VE.getTypeID(I.getType()));
1089     Vals.push_back(VE.getValueID(I.getOperand(0))); // size.
1090     Vals.push_back(Log2_32(cast<AllocaInst>(I).getAlignment())+1);
1091     break;
1092
1093   case Instruction::Load:
1094     Code = bitc::FUNC_CODE_INST_LOAD;
1095     if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))  // ptr
1096       AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;
1097
1098     Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);
1099     Vals.push_back(cast<LoadInst>(I).isVolatile());
1100     break;
1101   case Instruction::Store:
1102     Code = bitc::FUNC_CODE_INST_STORE2;
1103     PushValueAndType(I.getOperand(1), InstID, Vals, VE);  // ptrty + ptr
1104     Vals.push_back(VE.getValueID(I.getOperand(0)));       // val.
1105     Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
1106     Vals.push_back(cast<StoreInst>(I).isVolatile());
1107     break;
1108   case Instruction::Call: {
1109     const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
1110     const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
1111
1112     Code = bitc::FUNC_CODE_INST_CALL;
1113
1114     const CallInst *CI = cast<CallInst>(&I);
1115     Vals.push_back(VE.getAttributeID(CI->getAttributes()));
1116     Vals.push_back((CI->getCallingConv() << 1) | unsigned(CI->isTailCall()));
1117     PushValueAndType(CI->getOperand(0), InstID, Vals, VE);  // Callee
1118
1119     // Emit value #'s for the fixed parameters.
1120     for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
1121       Vals.push_back(VE.getValueID(I.getOperand(i+1)));  // fixed param.
1122
1123     // Emit type/value pairs for varargs params.
1124     if (FTy->isVarArg()) {
1125       unsigned NumVarargs = I.getNumOperands()-1-FTy->getNumParams();
1126       for (unsigned i = I.getNumOperands()-NumVarargs, e = I.getNumOperands();
1127            i != e; ++i)
1128         PushValueAndType(I.getOperand(i), InstID, Vals, VE);  // varargs
1129     }
1130     break;
1131   }
1132   case Instruction::VAArg:
1133     Code = bitc::FUNC_CODE_INST_VAARG;
1134     Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));   // valistty
1135     Vals.push_back(VE.getValueID(I.getOperand(0))); // valist.
1136     Vals.push_back(VE.getTypeID(I.getType())); // restype.
1137     break;
1138   }
1139
1140   Stream.EmitRecord(Code, Vals, AbbrevToUse);
1141   Vals.clear();
1142 }
1143
1144 // Emit names for globals/functions etc.
1145 static void WriteValueSymbolTable(const ValueSymbolTable &VST,
1146                                   const ValueEnumerator &VE,
1147                                   BitstreamWriter &Stream) {
1148   if (VST.empty()) return;
1149   Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4);
1150
1151   // FIXME: Set up the abbrev, we know how many values there are!
1152   // FIXME: We know if the type names can use 7-bit ascii.
1153   SmallVector<unsigned, 64> NameVals;
1154
1155   for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end();
1156        SI != SE; ++SI) {
1157
1158     const ValueName &Name = *SI;
1159
1160     // Figure out the encoding to use for the name.
1161     bool is7Bit = true;
1162     bool isChar6 = true;
1163     for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength();
1164          C != E; ++C) {
1165       if (isChar6)
1166         isChar6 = BitCodeAbbrevOp::isChar6(*C);
1167       if ((unsigned char)*C & 128) {
1168         is7Bit = false;
1169         break;  // don't bother scanning the rest.
1170       }
1171     }
1172
1173     unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
1174
1175     // VST_ENTRY:   [valueid, namechar x N]
1176     // VST_BBENTRY: [bbid, namechar x N]
1177     unsigned Code;
1178     if (isa<BasicBlock>(SI->getValue())) {
1179       Code = bitc::VST_CODE_BBENTRY;
1180       if (isChar6)
1181         AbbrevToUse = VST_BBENTRY_6_ABBREV;
1182     } else {
1183       Code = bitc::VST_CODE_ENTRY;
1184       if (isChar6)
1185         AbbrevToUse = VST_ENTRY_6_ABBREV;
1186       else if (is7Bit)
1187         AbbrevToUse = VST_ENTRY_7_ABBREV;
1188     }
1189
1190     NameVals.push_back(VE.getValueID(SI->getValue()));
1191     for (const char *P = Name.getKeyData(),
1192          *E = Name.getKeyData()+Name.getKeyLength(); P != E; ++P)
1193       NameVals.push_back((unsigned char)*P);
1194
1195     // Emit the finished record.
1196     Stream.EmitRecord(Code, NameVals, AbbrevToUse);
1197     NameVals.clear();
1198   }
1199   Stream.ExitBlock();
1200 }
1201
1202 /// WriteFunction - Emit a function body to the module stream.
1203 static void WriteFunction(const Function &F, ValueEnumerator &VE,
1204                           BitstreamWriter &Stream) {
1205   Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4);
1206   VE.incorporateFunction(F);
1207
1208   SmallVector<unsigned, 64> Vals;
1209
1210   // Emit the number of basic blocks, so the reader can create them ahead of
1211   // time.
1212   Vals.push_back(VE.getBasicBlocks().size());
1213   Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals);
1214   Vals.clear();
1215
1216   // If there are function-local constants, emit them now.
1217   unsigned CstStart, CstEnd;
1218   VE.getFunctionConstantRange(CstStart, CstEnd);
1219   WriteConstants(CstStart, CstEnd, VE, Stream, false);
1220
1221   // If there is function-local metadata, emit it now.
1222   WriteFunctionLocalMetadata(F, VE, Stream);
1223
1224   // Keep a running idea of what the instruction ID is.
1225   unsigned InstID = CstEnd;
1226
1227   // Finally, emit all the instructions, in order.
1228   for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
1229     for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
1230          I != E; ++I) {
1231       WriteInstruction(*I, InstID, VE, Stream, Vals);
1232       if (!I->getType()->isVoidTy())
1233         ++InstID;
1234     }
1235
1236   // Emit names for all the instructions etc.
1237   WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
1238
1239   WriteMetadataAttachment(F, VE, Stream);
1240   VE.purgeFunction();
1241   Stream.ExitBlock();
1242 }
1243
1244 /// WriteTypeSymbolTable - Emit a block for the specified type symtab.
1245 static void WriteTypeSymbolTable(const TypeSymbolTable &TST,
1246                                  const ValueEnumerator &VE,
1247                                  BitstreamWriter &Stream) {
1248   if (TST.empty()) return;
1249
1250   Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3);
1251
1252   // 7-bit fixed width VST_CODE_ENTRY strings.
1253   BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1254   Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
1255   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
1256                             Log2_32_Ceil(VE.getTypes().size()+1)));
1257   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1258   Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
1259   unsigned V7Abbrev = Stream.EmitAbbrev(Abbv);
1260
1261   SmallVector<unsigned, 64> NameVals;
1262
1263   for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end();
1264        TI != TE; ++TI) {
1265     // TST_ENTRY: [typeid, namechar x N]
1266     NameVals.push_back(VE.getTypeID(TI->second));
1267
1268     const std::string &Str = TI->first;
1269     bool is7Bit = true;
1270     for (unsigned i = 0, e = Str.size(); i != e; ++i) {
1271       NameVals.push_back((unsigned char)Str[i]);
1272       if (Str[i] & 128)
1273         is7Bit = false;
1274     }
1275
1276     // Emit the finished record.
1277     Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, is7Bit ? V7Abbrev : 0);
1278     NameVals.clear();
1279   }
1280
1281   Stream.ExitBlock();
1282 }
1283
1284 // Emit blockinfo, which defines the standard abbreviations etc.
1285 static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) {
1286   // We only want to emit block info records for blocks that have multiple
1287   // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK.  Other
1288   // blocks can defined their abbrevs inline.
1289   Stream.EnterBlockInfoBlock(2);
1290
1291   { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
1292     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1293     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
1294     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
1295     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1296     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
1297     if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
1298                                    Abbv) != VST_ENTRY_8_ABBREV)
1299       llvm_unreachable("Unexpected abbrev ordering!");
1300   }
1301
1302   { // 7-bit fixed width VST_ENTRY strings.
1303     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1304     Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
1305     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
1306     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1307     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
1308     if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
1309                                    Abbv) != VST_ENTRY_7_ABBREV)
1310       llvm_unreachable("Unexpected abbrev ordering!");
1311   }
1312   { // 6-bit char6 VST_ENTRY strings.
1313     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1314     Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
1315     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
1316     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1317     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
1318     if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
1319                                    Abbv) != VST_ENTRY_6_ABBREV)
1320       llvm_unreachable("Unexpected abbrev ordering!");
1321   }
1322   { // 6-bit char6 VST_BBENTRY strings.
1323     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1324     Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY));
1325     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
1326     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
1327     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
1328     if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
1329                                    Abbv) != VST_BBENTRY_6_ABBREV)
1330       llvm_unreachable("Unexpected abbrev ordering!");
1331   }
1332
1333
1334
1335   { // SETTYPE abbrev for CONSTANTS_BLOCK.
1336     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1337     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE));
1338     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
1339                               Log2_32_Ceil(VE.getTypes().size()+1)));
1340     if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
1341                                    Abbv) != CONSTANTS_SETTYPE_ABBREV)
1342       llvm_unreachable("Unexpected abbrev ordering!");
1343   }
1344
1345   { // INTEGER abbrev for CONSTANTS_BLOCK.
1346     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1347     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER));
1348     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
1349     if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
1350                                    Abbv) != CONSTANTS_INTEGER_ABBREV)
1351       llvm_unreachable("Unexpected abbrev ordering!");
1352   }
1353
1354   { // CE_CAST abbrev for CONSTANTS_BLOCK.
1355     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1356     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST));
1357     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // cast opc
1358     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // typeid
1359                               Log2_32_Ceil(VE.getTypes().size()+1)));
1360     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));    // value id
1361
1362     if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
1363                                    Abbv) != CONSTANTS_CE_CAST_Abbrev)
1364       llvm_unreachable("Unexpected abbrev ordering!");
1365   }
1366   { // NULL abbrev for CONSTANTS_BLOCK.
1367     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1368     Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL));
1369     if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
1370                                    Abbv) != CONSTANTS_NULL_Abbrev)
1371       llvm_unreachable("Unexpected abbrev ordering!");
1372   }
1373
1374   // FIXME: This should only use space for first class types!
1375
1376   { // INST_LOAD abbrev for FUNCTION_BLOCK.
1377     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1378     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));
1379     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr
1380     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align
1381     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile
1382     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1383                                    Abbv) != FUNCTION_INST_LOAD_ABBREV)
1384       llvm_unreachable("Unexpected abbrev ordering!");
1385   }
1386   { // INST_BINOP abbrev for FUNCTION_BLOCK.
1387     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1388     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
1389     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
1390     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
1391     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
1392     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1393                                    Abbv) != FUNCTION_INST_BINOP_ABBREV)
1394       llvm_unreachable("Unexpected abbrev ordering!");
1395   }
1396   { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
1397     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1398     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
1399     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
1400     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
1401     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
1402     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags
1403     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1404                                    Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV)
1405       llvm_unreachable("Unexpected abbrev ordering!");
1406   }
1407   { // INST_CAST abbrev for FUNCTION_BLOCK.
1408     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1409     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST));
1410     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));    // OpVal
1411     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // dest ty
1412                               Log2_32_Ceil(VE.getTypes().size()+1)));
1413     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // opc
1414     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1415                                    Abbv) != FUNCTION_INST_CAST_ABBREV)
1416       llvm_unreachable("Unexpected abbrev ordering!");
1417   }
1418
1419   { // INST_RET abbrev for FUNCTION_BLOCK.
1420     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1421     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
1422     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1423                                    Abbv) != FUNCTION_INST_RET_VOID_ABBREV)
1424       llvm_unreachable("Unexpected abbrev ordering!");
1425   }
1426   { // INST_RET abbrev for FUNCTION_BLOCK.
1427     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1428     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
1429     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID
1430     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1431                                    Abbv) != FUNCTION_INST_RET_VAL_ABBREV)
1432       llvm_unreachable("Unexpected abbrev ordering!");
1433   }
1434   { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
1435     BitCodeAbbrev *Abbv = new BitCodeAbbrev();
1436     Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE));
1437     if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
1438                                    Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV)
1439       llvm_unreachable("Unexpected abbrev ordering!");
1440   }
1441
1442   Stream.ExitBlock();
1443 }
1444
1445
1446 /// WriteModule - Emit the specified module to the bitstream.
1447 static void WriteModule(const Module *M, BitstreamWriter &Stream) {
1448   Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
1449
1450   // Emit the version number if it is non-zero.
1451   if (CurVersion) {
1452     SmallVector<unsigned, 1> Vals;
1453     Vals.push_back(CurVersion);
1454     Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
1455   }
1456
1457   // Analyze the module, enumerating globals, functions, etc.
1458   ValueEnumerator VE(M);
1459
1460   // Emit blockinfo, which defines the standard abbreviations etc.
1461   WriteBlockInfo(VE, Stream);
1462
1463   // Emit information about parameter attributes.
1464   WriteAttributeTable(VE, Stream);
1465
1466   // Emit information describing all of the types in the module.
1467   WriteTypeTable(VE, Stream);
1468
1469   // Emit top-level description of module, including target triple, inline asm,
1470   // descriptors for global variables, and function prototype info.
1471   WriteModuleInfo(M, VE, Stream);
1472
1473   // Emit constants.
1474   WriteModuleConstants(VE, Stream);
1475
1476   // Emit metadata.
1477   WriteModuleMetadata(VE, Stream);
1478
1479   // Emit function bodies.
1480   for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
1481     if (!I->isDeclaration())
1482       WriteFunction(*I, VE, Stream);
1483
1484   // Emit metadata.
1485   WriteModuleMetadataStore(M, Stream);
1486
1487   // Emit the type symbol table information.
1488   WriteTypeSymbolTable(M->getTypeSymbolTable(), VE, Stream);
1489
1490   // Emit names for globals/functions etc.
1491   WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream);
1492
1493   Stream.ExitBlock();
1494 }
1495
1496 /// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
1497 /// header and trailer to make it compatible with the system archiver.  To do
1498 /// this we emit the following header, and then emit a trailer that pads the
1499 /// file out to be a multiple of 16 bytes.
1500 ///
1501 /// struct bc_header {
1502 ///   uint32_t Magic;         // 0x0B17C0DE
1503 ///   uint32_t Version;       // Version, currently always 0.
1504 ///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
1505 ///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
1506 ///   uint32_t CPUType;       // CPU specifier.
1507 ///   ... potentially more later ...
1508 /// };
1509 enum {
1510   DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size.
1511   DarwinBCHeaderSize = 5*4
1512 };
1513
1514 static void EmitDarwinBCHeader(BitstreamWriter &Stream,
1515                                const std::string &TT) {
1516   unsigned CPUType = ~0U;
1517
1518   // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*.  The CPUType is a
1519   // magic number from /usr/include/mach/machine.h.  It is ok to reproduce the
1520   // specific constants here because they are implicitly part of the Darwin ABI.
1521   enum {
1522     DARWIN_CPU_ARCH_ABI64      = 0x01000000,
1523     DARWIN_CPU_TYPE_X86        = 7,
1524     DARWIN_CPU_TYPE_POWERPC    = 18
1525   };
1526
1527   if (TT.find("x86_64-") == 0)
1528     CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64;
1529   else if (TT.size() >= 5 && TT[0] == 'i' && TT[2] == '8' && TT[3] == '6' &&
1530            TT[4] == '-' && TT[1] - '3' < 6)
1531     CPUType = DARWIN_CPU_TYPE_X86;
1532   else if (TT.find("powerpc-") == 0)
1533     CPUType = DARWIN_CPU_TYPE_POWERPC;
1534   else if (TT.find("powerpc64-") == 0)
1535     CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64;
1536
1537   // Traditional Bitcode starts after header.
1538   unsigned BCOffset = DarwinBCHeaderSize;
1539
1540   Stream.Emit(0x0B17C0DE, 32);
1541   Stream.Emit(0         , 32);  // Version.
1542   Stream.Emit(BCOffset  , 32);
1543   Stream.Emit(0         , 32);  // Filled in later.
1544   Stream.Emit(CPUType   , 32);
1545 }
1546
1547 /// EmitDarwinBCTrailer - Emit the darwin epilog after the bitcode file and
1548 /// finalize the header.
1549 static void EmitDarwinBCTrailer(BitstreamWriter &Stream, unsigned BufferSize) {
1550   // Update the size field in the header.
1551   Stream.BackpatchWord(DarwinBCSizeFieldOffset, BufferSize-DarwinBCHeaderSize);
1552
1553   // If the file is not a multiple of 16 bytes, insert dummy padding.
1554   while (BufferSize & 15) {
1555     Stream.Emit(0, 8);
1556     ++BufferSize;
1557   }
1558 }
1559
1560
1561 /// WriteBitcodeToFile - Write the specified module to the specified output
1562 /// stream.
1563 void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
1564   std::vector<unsigned char> Buffer;
1565   BitstreamWriter Stream(Buffer);
1566
1567   Buffer.reserve(256*1024);
1568
1569   WriteBitcodeToStream( M, Stream );
1570
1571   // If writing to stdout, set binary mode.
1572   if (&llvm::outs() == &Out)
1573     sys::Program::ChangeStdoutToBinary();
1574
1575   // Write the generated bitstream to "Out".
1576   Out.write((char*)&Buffer.front(), Buffer.size());
1577
1578   // Make sure it hits disk now.
1579   Out.flush();
1580 }
1581
1582 /// WriteBitcodeToStream - Write the specified module to the specified output
1583 /// stream.
1584 void llvm::WriteBitcodeToStream(const Module *M, BitstreamWriter &Stream) {
1585   // If this is darwin, emit a file header and trailer if needed.
1586   bool isDarwin = M->getTargetTriple().find("-darwin") != std::string::npos;
1587   if (isDarwin)
1588     EmitDarwinBCHeader(Stream, M->getTargetTriple());
1589
1590   // Emit the file header.
1591   Stream.Emit((unsigned)'B', 8);
1592   Stream.Emit((unsigned)'C', 8);
1593   Stream.Emit(0x0, 4);
1594   Stream.Emit(0xC, 4);
1595   Stream.Emit(0xE, 4);
1596   Stream.Emit(0xD, 4);
1597
1598   // Emit the module.
1599   WriteModule(M, Stream);
1600
1601   if (isDarwin)
1602     EmitDarwinBCTrailer(Stream, Stream.getBuffer().size());
1603 }