~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/Bitcode/Writer/BitcodeWriter.cpp

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 "ValueEnumerator.h"
 
16
#include "llvm/ADT/Triple.h"
 
17
#include "llvm/Bitcode/BitstreamWriter.h"
 
18
#include "llvm/Bitcode/LLVMBitCodes.h"
 
19
#include "llvm/IR/Constants.h"
 
20
#include "llvm/IR/DebugInfoMetadata.h"
 
21
#include "llvm/IR/DerivedTypes.h"
 
22
#include "llvm/IR/InlineAsm.h"
 
23
#include "llvm/IR/Instructions.h"
 
24
#include "llvm/IR/Module.h"
 
25
#include "llvm/IR/Operator.h"
 
26
#include "llvm/IR/UseListOrder.h"
 
27
#include "llvm/IR/ValueSymbolTable.h"
 
28
#include "llvm/Support/CommandLine.h"
 
29
#include "llvm/Support/ErrorHandling.h"
 
30
#include "llvm/Support/MathExtras.h"
 
31
#include "llvm/Support/Program.h"
 
32
#include "llvm/Support/raw_ostream.h"
 
33
#include <cctype>
 
34
#include <map>
 
35
using namespace llvm;
 
36
 
 
37
/// These are manifest constants used by the bitcode writer. They do not need to
 
38
/// be kept in sync with the reader, but need to be consistent within this file.
 
39
enum {
 
40
  // VALUE_SYMTAB_BLOCK abbrev id's.
 
41
  VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
 
42
  VST_ENTRY_7_ABBREV,
 
43
  VST_ENTRY_6_ABBREV,
 
44
  VST_BBENTRY_6_ABBREV,
 
45
 
 
46
  // CONSTANTS_BLOCK abbrev id's.
 
47
  CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
 
48
  CONSTANTS_INTEGER_ABBREV,
 
49
  CONSTANTS_CE_CAST_Abbrev,
 
50
  CONSTANTS_NULL_Abbrev,
 
51
 
 
52
  // FUNCTION_BLOCK abbrev id's.
 
53
  FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
 
54
  FUNCTION_INST_BINOP_ABBREV,
 
55
  FUNCTION_INST_BINOP_FLAGS_ABBREV,
 
56
  FUNCTION_INST_CAST_ABBREV,
 
57
  FUNCTION_INST_RET_VOID_ABBREV,
 
58
  FUNCTION_INST_RET_VAL_ABBREV,
 
59
  FUNCTION_INST_UNREACHABLE_ABBREV,
 
60
  FUNCTION_INST_GEP_ABBREV,
 
61
};
 
62
 
 
63
static unsigned GetEncodedCastOpcode(unsigned Opcode) {
 
64
  switch (Opcode) {
 
65
  default: llvm_unreachable("Unknown cast instruction!");
 
66
  case Instruction::Trunc   : return bitc::CAST_TRUNC;
 
67
  case Instruction::ZExt    : return bitc::CAST_ZEXT;
 
68
  case Instruction::SExt    : return bitc::CAST_SEXT;
 
69
  case Instruction::FPToUI  : return bitc::CAST_FPTOUI;
 
70
  case Instruction::FPToSI  : return bitc::CAST_FPTOSI;
 
71
  case Instruction::UIToFP  : return bitc::CAST_UITOFP;
 
72
  case Instruction::SIToFP  : return bitc::CAST_SITOFP;
 
73
  case Instruction::FPTrunc : return bitc::CAST_FPTRUNC;
 
74
  case Instruction::FPExt   : return bitc::CAST_FPEXT;
 
75
  case Instruction::PtrToInt: return bitc::CAST_PTRTOINT;
 
76
  case Instruction::IntToPtr: return bitc::CAST_INTTOPTR;
 
77
  case Instruction::BitCast : return bitc::CAST_BITCAST;
 
78
  case Instruction::AddrSpaceCast: return bitc::CAST_ADDRSPACECAST;
 
79
  }
 
80
}
 
81
 
 
82
static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
 
83
  switch (Opcode) {
 
84
  default: llvm_unreachable("Unknown binary instruction!");
 
85
  case Instruction::Add:
 
86
  case Instruction::FAdd: return bitc::BINOP_ADD;
 
87
  case Instruction::Sub:
 
88
  case Instruction::FSub: return bitc::BINOP_SUB;
 
89
  case Instruction::Mul:
 
90
  case Instruction::FMul: return bitc::BINOP_MUL;
 
91
  case Instruction::UDiv: return bitc::BINOP_UDIV;
 
92
  case Instruction::FDiv:
 
93
  case Instruction::SDiv: return bitc::BINOP_SDIV;
 
94
  case Instruction::URem: return bitc::BINOP_UREM;
 
95
  case Instruction::FRem:
 
96
  case Instruction::SRem: return bitc::BINOP_SREM;
 
97
  case Instruction::Shl:  return bitc::BINOP_SHL;
 
98
  case Instruction::LShr: return bitc::BINOP_LSHR;
 
99
  case Instruction::AShr: return bitc::BINOP_ASHR;
 
100
  case Instruction::And:  return bitc::BINOP_AND;
 
101
  case Instruction::Or:   return bitc::BINOP_OR;
 
102
  case Instruction::Xor:  return bitc::BINOP_XOR;
 
103
  }
 
104
}
 
105
 
 
106
static unsigned GetEncodedRMWOperation(AtomicRMWInst::BinOp Op) {
 
107
  switch (Op) {
 
108
  default: llvm_unreachable("Unknown RMW operation!");
 
109
  case AtomicRMWInst::Xchg: return bitc::RMW_XCHG;
 
110
  case AtomicRMWInst::Add: return bitc::RMW_ADD;
 
111
  case AtomicRMWInst::Sub: return bitc::RMW_SUB;
 
112
  case AtomicRMWInst::And: return bitc::RMW_AND;
 
113
  case AtomicRMWInst::Nand: return bitc::RMW_NAND;
 
114
  case AtomicRMWInst::Or: return bitc::RMW_OR;
 
115
  case AtomicRMWInst::Xor: return bitc::RMW_XOR;
 
116
  case AtomicRMWInst::Max: return bitc::RMW_MAX;
 
117
  case AtomicRMWInst::Min: return bitc::RMW_MIN;
 
118
  case AtomicRMWInst::UMax: return bitc::RMW_UMAX;
 
119
  case AtomicRMWInst::UMin: return bitc::RMW_UMIN;
 
120
  }
 
121
}
 
122
 
 
123
static unsigned GetEncodedOrdering(AtomicOrdering Ordering) {
 
124
  switch (Ordering) {
 
125
  case NotAtomic: return bitc::ORDERING_NOTATOMIC;
 
126
  case Unordered: return bitc::ORDERING_UNORDERED;
 
127
  case Monotonic: return bitc::ORDERING_MONOTONIC;
 
128
  case Acquire: return bitc::ORDERING_ACQUIRE;
 
129
  case Release: return bitc::ORDERING_RELEASE;
 
130
  case AcquireRelease: return bitc::ORDERING_ACQREL;
 
131
  case SequentiallyConsistent: return bitc::ORDERING_SEQCST;
 
132
  }
 
133
  llvm_unreachable("Invalid ordering");
 
134
}
 
135
 
 
136
static unsigned GetEncodedSynchScope(SynchronizationScope SynchScope) {
 
137
  switch (SynchScope) {
 
138
  case SingleThread: return bitc::SYNCHSCOPE_SINGLETHREAD;
 
139
  case CrossThread: return bitc::SYNCHSCOPE_CROSSTHREAD;
 
140
  }
 
141
  llvm_unreachable("Invalid synch scope");
 
142
}
 
143
 
 
144
static void WriteStringRecord(unsigned Code, StringRef Str,
 
145
                              unsigned AbbrevToUse, BitstreamWriter &Stream) {
 
146
  SmallVector<unsigned, 64> Vals;
 
147
 
 
148
  // Code: [strchar x N]
 
149
  for (unsigned i = 0, e = Str.size(); i != e; ++i) {
 
150
    if (AbbrevToUse && !BitCodeAbbrevOp::isChar6(Str[i]))
 
151
      AbbrevToUse = 0;
 
152
    Vals.push_back(Str[i]);
 
153
  }
 
154
 
 
155
  // Emit the finished record.
 
156
  Stream.EmitRecord(Code, Vals, AbbrevToUse);
 
157
}
 
158
 
 
159
static uint64_t getAttrKindEncoding(Attribute::AttrKind Kind) {
 
160
  switch (Kind) {
 
161
  case Attribute::Alignment:
 
162
    return bitc::ATTR_KIND_ALIGNMENT;
 
163
  case Attribute::AlwaysInline:
 
164
    return bitc::ATTR_KIND_ALWAYS_INLINE;
 
165
  case Attribute::ArgMemOnly:
 
166
    return bitc::ATTR_KIND_ARGMEMONLY;
 
167
  case Attribute::Builtin:
 
168
    return bitc::ATTR_KIND_BUILTIN;
 
169
  case Attribute::ByVal:
 
170
    return bitc::ATTR_KIND_BY_VAL;
 
171
  case Attribute::Convergent:
 
172
    return bitc::ATTR_KIND_CONVERGENT;
 
173
  case Attribute::InAlloca:
 
174
    return bitc::ATTR_KIND_IN_ALLOCA;
 
175
  case Attribute::Cold:
 
176
    return bitc::ATTR_KIND_COLD;
 
177
  case Attribute::InlineHint:
 
178
    return bitc::ATTR_KIND_INLINE_HINT;
 
179
  case Attribute::InReg:
 
180
    return bitc::ATTR_KIND_IN_REG;
 
181
  case Attribute::JumpTable:
 
182
    return bitc::ATTR_KIND_JUMP_TABLE;
 
183
  case Attribute::MinSize:
 
184
    return bitc::ATTR_KIND_MIN_SIZE;
 
185
  case Attribute::Naked:
 
186
    return bitc::ATTR_KIND_NAKED;
 
187
  case Attribute::Nest:
 
188
    return bitc::ATTR_KIND_NEST;
 
189
  case Attribute::NoAlias:
 
190
    return bitc::ATTR_KIND_NO_ALIAS;
 
191
  case Attribute::NoBuiltin:
 
192
    return bitc::ATTR_KIND_NO_BUILTIN;
 
193
  case Attribute::NoCapture:
 
194
    return bitc::ATTR_KIND_NO_CAPTURE;
 
195
  case Attribute::NoDuplicate:
 
196
    return bitc::ATTR_KIND_NO_DUPLICATE;
 
197
  case Attribute::NoImplicitFloat:
 
198
    return bitc::ATTR_KIND_NO_IMPLICIT_FLOAT;
 
199
  case Attribute::NoInline:
 
200
    return bitc::ATTR_KIND_NO_INLINE;
 
201
  case Attribute::NonLazyBind:
 
202
    return bitc::ATTR_KIND_NON_LAZY_BIND;
 
203
  case Attribute::NonNull:
 
204
    return bitc::ATTR_KIND_NON_NULL;
 
205
  case Attribute::Dereferenceable:
 
206
    return bitc::ATTR_KIND_DEREFERENCEABLE;
 
207
  case Attribute::DereferenceableOrNull:
 
208
    return bitc::ATTR_KIND_DEREFERENCEABLE_OR_NULL;
 
209
  case Attribute::NoRedZone:
 
210
    return bitc::ATTR_KIND_NO_RED_ZONE;
 
211
  case Attribute::NoReturn:
 
212
    return bitc::ATTR_KIND_NO_RETURN;
 
213
  case Attribute::NoUnwind:
 
214
    return bitc::ATTR_KIND_NO_UNWIND;
 
215
  case Attribute::OptimizeForSize:
 
216
    return bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE;
 
217
  case Attribute::OptimizeNone:
 
218
    return bitc::ATTR_KIND_OPTIMIZE_NONE;
 
219
  case Attribute::ReadNone:
 
220
    return bitc::ATTR_KIND_READ_NONE;
 
221
  case Attribute::ReadOnly:
 
222
    return bitc::ATTR_KIND_READ_ONLY;
 
223
  case Attribute::Returned:
 
224
    return bitc::ATTR_KIND_RETURNED;
 
225
  case Attribute::ReturnsTwice:
 
226
    return bitc::ATTR_KIND_RETURNS_TWICE;
 
227
  case Attribute::SExt:
 
228
    return bitc::ATTR_KIND_S_EXT;
 
229
  case Attribute::StackAlignment:
 
230
    return bitc::ATTR_KIND_STACK_ALIGNMENT;
 
231
  case Attribute::StackProtect:
 
232
    return bitc::ATTR_KIND_STACK_PROTECT;
 
233
  case Attribute::StackProtectReq:
 
234
    return bitc::ATTR_KIND_STACK_PROTECT_REQ;
 
235
  case Attribute::StackProtectStrong:
 
236
    return bitc::ATTR_KIND_STACK_PROTECT_STRONG;
 
237
  case Attribute::SafeStack:
 
238
    return bitc::ATTR_KIND_SAFESTACK;
 
239
  case Attribute::StructRet:
 
240
    return bitc::ATTR_KIND_STRUCT_RET;
 
241
  case Attribute::SanitizeAddress:
 
242
    return bitc::ATTR_KIND_SANITIZE_ADDRESS;
 
243
  case Attribute::SanitizeThread:
 
244
    return bitc::ATTR_KIND_SANITIZE_THREAD;
 
245
  case Attribute::SanitizeMemory:
 
246
    return bitc::ATTR_KIND_SANITIZE_MEMORY;
 
247
  case Attribute::UWTable:
 
248
    return bitc::ATTR_KIND_UW_TABLE;
 
249
  case Attribute::ZExt:
 
250
    return bitc::ATTR_KIND_Z_EXT;
 
251
  case Attribute::EndAttrKinds:
 
252
    llvm_unreachable("Can not encode end-attribute kinds marker.");
 
253
  case Attribute::None:
 
254
    llvm_unreachable("Can not encode none-attribute.");
 
255
  }
 
256
 
 
257
  llvm_unreachable("Trying to encode unknown attribute");
 
258
}
 
259
 
 
260
static void WriteAttributeGroupTable(const ValueEnumerator &VE,
 
261
                                     BitstreamWriter &Stream) {
 
262
  const std::vector<AttributeSet> &AttrGrps = VE.getAttributeGroups();
 
263
  if (AttrGrps.empty()) return;
 
264
 
 
265
  Stream.EnterSubblock(bitc::PARAMATTR_GROUP_BLOCK_ID, 3);
 
266
 
 
267
  SmallVector<uint64_t, 64> Record;
 
268
  for (unsigned i = 0, e = AttrGrps.size(); i != e; ++i) {
 
269
    AttributeSet AS = AttrGrps[i];
 
270
    for (unsigned i = 0, e = AS.getNumSlots(); i != e; ++i) {
 
271
      AttributeSet A = AS.getSlotAttributes(i);
 
272
 
 
273
      Record.push_back(VE.getAttributeGroupID(A));
 
274
      Record.push_back(AS.getSlotIndex(i));
 
275
 
 
276
      for (AttributeSet::iterator I = AS.begin(0), E = AS.end(0);
 
277
           I != E; ++I) {
 
278
        Attribute Attr = *I;
 
279
        if (Attr.isEnumAttribute()) {
 
280
          Record.push_back(0);
 
281
          Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum()));
 
282
        } else if (Attr.isIntAttribute()) {
 
283
          Record.push_back(1);
 
284
          Record.push_back(getAttrKindEncoding(Attr.getKindAsEnum()));
 
285
          Record.push_back(Attr.getValueAsInt());
 
286
        } else {
 
287
          StringRef Kind = Attr.getKindAsString();
 
288
          StringRef Val = Attr.getValueAsString();
 
289
 
 
290
          Record.push_back(Val.empty() ? 3 : 4);
 
291
          Record.append(Kind.begin(), Kind.end());
 
292
          Record.push_back(0);
 
293
          if (!Val.empty()) {
 
294
            Record.append(Val.begin(), Val.end());
 
295
            Record.push_back(0);
 
296
          }
 
297
        }
 
298
      }
 
299
 
 
300
      Stream.EmitRecord(bitc::PARAMATTR_GRP_CODE_ENTRY, Record);
 
301
      Record.clear();
 
302
    }
 
303
  }
 
304
 
 
305
  Stream.ExitBlock();
 
306
}
 
307
 
 
308
static void WriteAttributeTable(const ValueEnumerator &VE,
 
309
                                BitstreamWriter &Stream) {
 
310
  const std::vector<AttributeSet> &Attrs = VE.getAttributes();
 
311
  if (Attrs.empty()) return;
 
312
 
 
313
  Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3);
 
314
 
 
315
  SmallVector<uint64_t, 64> Record;
 
316
  for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
 
317
    const AttributeSet &A = Attrs[i];
 
318
    for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i)
 
319
      Record.push_back(VE.getAttributeGroupID(A.getSlotAttributes(i)));
 
320
 
 
321
    Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY, Record);
 
322
    Record.clear();
 
323
  }
 
324
 
 
325
  Stream.ExitBlock();
 
326
}
 
327
 
 
328
/// WriteTypeTable - Write out the type table for a module.
 
329
static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) {
 
330
  const ValueEnumerator::TypeList &TypeList = VE.getTypes();
 
331
 
 
332
  Stream.EnterSubblock(bitc::TYPE_BLOCK_ID_NEW, 4 /*count from # abbrevs */);
 
333
  SmallVector<uint64_t, 64> TypeVals;
 
334
 
 
335
  uint64_t NumBits = VE.computeBitsRequiredForTypeIndicies();
 
336
 
 
337
  // Abbrev for TYPE_CODE_POINTER.
 
338
  BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
339
  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
 
340
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
 
341
  Abbv->Add(BitCodeAbbrevOp(0));  // Addrspace = 0
 
342
  unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
 
343
 
 
344
  // Abbrev for TYPE_CODE_FUNCTION.
 
345
  Abbv = new BitCodeAbbrev();
 
346
  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION));
 
347
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // isvararg
 
348
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
349
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
 
350
 
 
351
  unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv);
 
352
 
 
353
  // Abbrev for TYPE_CODE_STRUCT_ANON.
 
354
  Abbv = new BitCodeAbbrev();
 
355
  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_ANON));
 
356
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
 
357
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
358
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
 
359
 
 
360
  unsigned StructAnonAbbrev = Stream.EmitAbbrev(Abbv);
 
361
 
 
362
  // Abbrev for TYPE_CODE_STRUCT_NAME.
 
363
  Abbv = new BitCodeAbbrev();
 
364
  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAME));
 
365
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
366
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
 
367
  unsigned StructNameAbbrev = Stream.EmitAbbrev(Abbv);
 
368
 
 
369
  // Abbrev for TYPE_CODE_STRUCT_NAMED.
 
370
  Abbv = new BitCodeAbbrev();
 
371
  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAMED));
 
372
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
 
373
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
374
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
 
375
 
 
376
  unsigned StructNamedAbbrev = Stream.EmitAbbrev(Abbv);
 
377
 
 
378
  // Abbrev for TYPE_CODE_ARRAY.
 
379
  Abbv = new BitCodeAbbrev();
 
380
  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY));
 
381
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));   // size
 
382
  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
 
383
 
 
384
  unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv);
 
385
 
 
386
  // Emit an entry count so the reader can reserve space.
 
387
  TypeVals.push_back(TypeList.size());
 
388
  Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals);
 
389
  TypeVals.clear();
 
390
 
 
391
  // Loop over all of the types, emitting each in turn.
 
392
  for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
 
393
    Type *T = TypeList[i];
 
394
    int AbbrevToUse = 0;
 
395
    unsigned Code = 0;
 
396
 
 
397
    switch (T->getTypeID()) {
 
398
    case Type::VoidTyID:      Code = bitc::TYPE_CODE_VOID;      break;
 
399
    case Type::HalfTyID:      Code = bitc::TYPE_CODE_HALF;      break;
 
400
    case Type::FloatTyID:     Code = bitc::TYPE_CODE_FLOAT;     break;
 
401
    case Type::DoubleTyID:    Code = bitc::TYPE_CODE_DOUBLE;    break;
 
402
    case Type::X86_FP80TyID:  Code = bitc::TYPE_CODE_X86_FP80;  break;
 
403
    case Type::FP128TyID:     Code = bitc::TYPE_CODE_FP128;     break;
 
404
    case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
 
405
    case Type::LabelTyID:     Code = bitc::TYPE_CODE_LABEL;     break;
 
406
    case Type::MetadataTyID:  Code = bitc::TYPE_CODE_METADATA;  break;
 
407
    case Type::X86_MMXTyID:   Code = bitc::TYPE_CODE_X86_MMX;   break;
 
408
    case Type::IntegerTyID:
 
409
      // INTEGER: [width]
 
410
      Code = bitc::TYPE_CODE_INTEGER;
 
411
      TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
 
412
      break;
 
413
    case Type::PointerTyID: {
 
414
      PointerType *PTy = cast<PointerType>(T);
 
415
      // POINTER: [pointee type, address space]
 
416
      Code = bitc::TYPE_CODE_POINTER;
 
417
      TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
 
418
      unsigned AddressSpace = PTy->getAddressSpace();
 
419
      TypeVals.push_back(AddressSpace);
 
420
      if (AddressSpace == 0) AbbrevToUse = PtrAbbrev;
 
421
      break;
 
422
    }
 
423
    case Type::FunctionTyID: {
 
424
      FunctionType *FT = cast<FunctionType>(T);
 
425
      // FUNCTION: [isvararg, retty, paramty x N]
 
426
      Code = bitc::TYPE_CODE_FUNCTION;
 
427
      TypeVals.push_back(FT->isVarArg());
 
428
      TypeVals.push_back(VE.getTypeID(FT->getReturnType()));
 
429
      for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
 
430
        TypeVals.push_back(VE.getTypeID(FT->getParamType(i)));
 
431
      AbbrevToUse = FunctionAbbrev;
 
432
      break;
 
433
    }
 
434
    case Type::StructTyID: {
 
435
      StructType *ST = cast<StructType>(T);
 
436
      // STRUCT: [ispacked, eltty x N]
 
437
      TypeVals.push_back(ST->isPacked());
 
438
      // Output all of the element types.
 
439
      for (StructType::element_iterator I = ST->element_begin(),
 
440
           E = ST->element_end(); I != E; ++I)
 
441
        TypeVals.push_back(VE.getTypeID(*I));
 
442
 
 
443
      if (ST->isLiteral()) {
 
444
        Code = bitc::TYPE_CODE_STRUCT_ANON;
 
445
        AbbrevToUse = StructAnonAbbrev;
 
446
      } else {
 
447
        if (ST->isOpaque()) {
 
448
          Code = bitc::TYPE_CODE_OPAQUE;
 
449
        } else {
 
450
          Code = bitc::TYPE_CODE_STRUCT_NAMED;
 
451
          AbbrevToUse = StructNamedAbbrev;
 
452
        }
 
453
 
 
454
        // Emit the name if it is present.
 
455
        if (!ST->getName().empty())
 
456
          WriteStringRecord(bitc::TYPE_CODE_STRUCT_NAME, ST->getName(),
 
457
                            StructNameAbbrev, Stream);
 
458
      }
 
459
      break;
 
460
    }
 
461
    case Type::ArrayTyID: {
 
462
      ArrayType *AT = cast<ArrayType>(T);
 
463
      // ARRAY: [numelts, eltty]
 
464
      Code = bitc::TYPE_CODE_ARRAY;
 
465
      TypeVals.push_back(AT->getNumElements());
 
466
      TypeVals.push_back(VE.getTypeID(AT->getElementType()));
 
467
      AbbrevToUse = ArrayAbbrev;
 
468
      break;
 
469
    }
 
470
    case Type::VectorTyID: {
 
471
      VectorType *VT = cast<VectorType>(T);
 
472
      // VECTOR [numelts, eltty]
 
473
      Code = bitc::TYPE_CODE_VECTOR;
 
474
      TypeVals.push_back(VT->getNumElements());
 
475
      TypeVals.push_back(VE.getTypeID(VT->getElementType()));
 
476
      break;
 
477
    }
 
478
    }
 
479
 
 
480
    // Emit the finished record.
 
481
    Stream.EmitRecord(Code, TypeVals, AbbrevToUse);
 
482
    TypeVals.clear();
 
483
  }
 
484
 
 
485
  Stream.ExitBlock();
 
486
}
 
487
 
 
488
static unsigned getEncodedLinkage(const GlobalValue &GV) {
 
489
  switch (GV.getLinkage()) {
 
490
  case GlobalValue::ExternalLinkage:
 
491
    return 0;
 
492
  case GlobalValue::WeakAnyLinkage:
 
493
    return 16;
 
494
  case GlobalValue::AppendingLinkage:
 
495
    return 2;
 
496
  case GlobalValue::InternalLinkage:
 
497
    return 3;
 
498
  case GlobalValue::LinkOnceAnyLinkage:
 
499
    return 18;
 
500
  case GlobalValue::ExternalWeakLinkage:
 
501
    return 7;
 
502
  case GlobalValue::CommonLinkage:
 
503
    return 8;
 
504
  case GlobalValue::PrivateLinkage:
 
505
    return 9;
 
506
  case GlobalValue::WeakODRLinkage:
 
507
    return 17;
 
508
  case GlobalValue::LinkOnceODRLinkage:
 
509
    return 19;
 
510
  case GlobalValue::AvailableExternallyLinkage:
 
511
    return 12;
 
512
  }
 
513
  llvm_unreachable("Invalid linkage");
 
514
}
 
515
 
 
516
static unsigned getEncodedVisibility(const GlobalValue &GV) {
 
517
  switch (GV.getVisibility()) {
 
518
  case GlobalValue::DefaultVisibility:   return 0;
 
519
  case GlobalValue::HiddenVisibility:    return 1;
 
520
  case GlobalValue::ProtectedVisibility: return 2;
 
521
  }
 
522
  llvm_unreachable("Invalid visibility");
 
523
}
 
524
 
 
525
static unsigned getEncodedDLLStorageClass(const GlobalValue &GV) {
 
526
  switch (GV.getDLLStorageClass()) {
 
527
  case GlobalValue::DefaultStorageClass:   return 0;
 
528
  case GlobalValue::DLLImportStorageClass: return 1;
 
529
  case GlobalValue::DLLExportStorageClass: return 2;
 
530
  }
 
531
  llvm_unreachable("Invalid DLL storage class");
 
532
}
 
533
 
 
534
static unsigned getEncodedThreadLocalMode(const GlobalValue &GV) {
 
535
  switch (GV.getThreadLocalMode()) {
 
536
    case GlobalVariable::NotThreadLocal:         return 0;
 
537
    case GlobalVariable::GeneralDynamicTLSModel: return 1;
 
538
    case GlobalVariable::LocalDynamicTLSModel:   return 2;
 
539
    case GlobalVariable::InitialExecTLSModel:    return 3;
 
540
    case GlobalVariable::LocalExecTLSModel:      return 4;
 
541
  }
 
542
  llvm_unreachable("Invalid TLS model");
 
543
}
 
544
 
 
545
static unsigned getEncodedComdatSelectionKind(const Comdat &C) {
 
546
  switch (C.getSelectionKind()) {
 
547
  case Comdat::Any:
 
548
    return bitc::COMDAT_SELECTION_KIND_ANY;
 
549
  case Comdat::ExactMatch:
 
550
    return bitc::COMDAT_SELECTION_KIND_EXACT_MATCH;
 
551
  case Comdat::Largest:
 
552
    return bitc::COMDAT_SELECTION_KIND_LARGEST;
 
553
  case Comdat::NoDuplicates:
 
554
    return bitc::COMDAT_SELECTION_KIND_NO_DUPLICATES;
 
555
  case Comdat::SameSize:
 
556
    return bitc::COMDAT_SELECTION_KIND_SAME_SIZE;
 
557
  }
 
558
  llvm_unreachable("Invalid selection kind");
 
559
}
 
560
 
 
561
static void writeComdats(const ValueEnumerator &VE, BitstreamWriter &Stream) {
 
562
  SmallVector<uint16_t, 64> Vals;
 
563
  for (const Comdat *C : VE.getComdats()) {
 
564
    // COMDAT: [selection_kind, name]
 
565
    Vals.push_back(getEncodedComdatSelectionKind(*C));
 
566
    size_t Size = C->getName().size();
 
567
    assert(isUInt<16>(Size));
 
568
    Vals.push_back(Size);
 
569
    for (char Chr : C->getName())
 
570
      Vals.push_back((unsigned char)Chr);
 
571
    Stream.EmitRecord(bitc::MODULE_CODE_COMDAT, Vals, /*AbbrevToUse=*/0);
 
572
    Vals.clear();
 
573
  }
 
574
}
 
575
 
 
576
// Emit top-level description of module, including target triple, inline asm,
 
577
// descriptors for global variables, and function prototype info.
 
578
static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE,
 
579
                            BitstreamWriter &Stream) {
 
580
  // Emit various pieces of data attached to a module.
 
581
  if (!M->getTargetTriple().empty())
 
582
    WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(),
 
583
                      0/*TODO*/, Stream);
 
584
  const std::string &DL = M->getDataLayoutStr();
 
585
  if (!DL.empty())
 
586
    WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, DL, 0 /*TODO*/, Stream);
 
587
  if (!M->getModuleInlineAsm().empty())
 
588
    WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
 
589
                      0/*TODO*/, Stream);
 
590
 
 
591
  // Emit information about sections and GC, computing how many there are. Also
 
592
  // compute the maximum alignment value.
 
593
  std::map<std::string, unsigned> SectionMap;
 
594
  std::map<std::string, unsigned> GCMap;
 
595
  unsigned MaxAlignment = 0;
 
596
  unsigned MaxGlobalType = 0;
 
597
  for (const GlobalValue &GV : M->globals()) {
 
598
    MaxAlignment = std::max(MaxAlignment, GV.getAlignment());
 
599
    MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV.getValueType()));
 
600
    if (GV.hasSection()) {
 
601
      // Give section names unique ID's.
 
602
      unsigned &Entry = SectionMap[GV.getSection()];
 
603
      if (!Entry) {
 
604
        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV.getSection(),
 
605
                          0/*TODO*/, Stream);
 
606
        Entry = SectionMap.size();
 
607
      }
 
608
    }
 
609
  }
 
610
  for (const Function &F : *M) {
 
611
    MaxAlignment = std::max(MaxAlignment, F.getAlignment());
 
612
    if (F.hasSection()) {
 
613
      // Give section names unique ID's.
 
614
      unsigned &Entry = SectionMap[F.getSection()];
 
615
      if (!Entry) {
 
616
        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F.getSection(),
 
617
                          0/*TODO*/, Stream);
 
618
        Entry = SectionMap.size();
 
619
      }
 
620
    }
 
621
    if (F.hasGC()) {
 
622
      // Same for GC names.
 
623
      unsigned &Entry = GCMap[F.getGC()];
 
624
      if (!Entry) {
 
625
        WriteStringRecord(bitc::MODULE_CODE_GCNAME, F.getGC(),
 
626
                          0/*TODO*/, Stream);
 
627
        Entry = GCMap.size();
 
628
      }
 
629
    }
 
630
  }
 
631
 
 
632
  // Emit abbrev for globals, now that we know # sections and max alignment.
 
633
  unsigned SimpleGVarAbbrev = 0;
 
634
  if (!M->global_empty()) {
 
635
    // Add an abbrev for common globals with no visibility or thread localness.
 
636
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
637
    Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR));
 
638
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
 
639
                              Log2_32_Ceil(MaxGlobalType+1)));
 
640
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));   // AddrSpace << 2
 
641
                                                           //| explicitType << 1
 
642
                                                           //| constant
 
643
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));   // Initializer.
 
644
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 5)); // Linkage.
 
645
    if (MaxAlignment == 0)                                 // Alignment.
 
646
      Abbv->Add(BitCodeAbbrevOp(0));
 
647
    else {
 
648
      unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1;
 
649
      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
 
650
                               Log2_32_Ceil(MaxEncAlignment+1)));
 
651
    }
 
652
    if (SectionMap.empty())                                    // Section.
 
653
      Abbv->Add(BitCodeAbbrevOp(0));
 
654
    else
 
655
      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
 
656
                               Log2_32_Ceil(SectionMap.size()+1)));
 
657
    // Don't bother emitting vis + thread local.
 
658
    SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv);
 
659
  }
 
660
 
 
661
  // Emit the global variable information.
 
662
  SmallVector<unsigned, 64> Vals;
 
663
  for (const GlobalVariable &GV : M->globals()) {
 
664
    unsigned AbbrevToUse = 0;
 
665
 
 
666
    // GLOBALVAR: [type, isconst, initid,
 
667
    //             linkage, alignment, section, visibility, threadlocal,
 
668
    //             unnamed_addr, externally_initialized, dllstorageclass,
 
669
    //             comdat]
 
670
    Vals.push_back(VE.getTypeID(GV.getValueType()));
 
671
    Vals.push_back(GV.getType()->getAddressSpace() << 2 | 2 | GV.isConstant());
 
672
    Vals.push_back(GV.isDeclaration() ? 0 :
 
673
                   (VE.getValueID(GV.getInitializer()) + 1));
 
674
    Vals.push_back(getEncodedLinkage(GV));
 
675
    Vals.push_back(Log2_32(GV.getAlignment())+1);
 
676
    Vals.push_back(GV.hasSection() ? SectionMap[GV.getSection()] : 0);
 
677
    if (GV.isThreadLocal() ||
 
678
        GV.getVisibility() != GlobalValue::DefaultVisibility ||
 
679
        GV.hasUnnamedAddr() || GV.isExternallyInitialized() ||
 
680
        GV.getDLLStorageClass() != GlobalValue::DefaultStorageClass ||
 
681
        GV.hasComdat()) {
 
682
      Vals.push_back(getEncodedVisibility(GV));
 
683
      Vals.push_back(getEncodedThreadLocalMode(GV));
 
684
      Vals.push_back(GV.hasUnnamedAddr());
 
685
      Vals.push_back(GV.isExternallyInitialized());
 
686
      Vals.push_back(getEncodedDLLStorageClass(GV));
 
687
      Vals.push_back(GV.hasComdat() ? VE.getComdatID(GV.getComdat()) : 0);
 
688
    } else {
 
689
      AbbrevToUse = SimpleGVarAbbrev;
 
690
    }
 
691
 
 
692
    Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse);
 
693
    Vals.clear();
 
694
  }
 
695
 
 
696
  // Emit the function proto information.
 
697
  for (const Function &F : *M) {
 
698
    // FUNCTION:  [type, callingconv, isproto, linkage, paramattrs, alignment,
 
699
    //             section, visibility, gc, unnamed_addr, prologuedata,
 
700
    //             dllstorageclass, comdat, prefixdata, personalityfn]
 
701
    Vals.push_back(VE.getTypeID(F.getFunctionType()));
 
702
    Vals.push_back(F.getCallingConv());
 
703
    Vals.push_back(F.isDeclaration());
 
704
    Vals.push_back(getEncodedLinkage(F));
 
705
    Vals.push_back(VE.getAttributeID(F.getAttributes()));
 
706
    Vals.push_back(Log2_32(F.getAlignment())+1);
 
707
    Vals.push_back(F.hasSection() ? SectionMap[F.getSection()] : 0);
 
708
    Vals.push_back(getEncodedVisibility(F));
 
709
    Vals.push_back(F.hasGC() ? GCMap[F.getGC()] : 0);
 
710
    Vals.push_back(F.hasUnnamedAddr());
 
711
    Vals.push_back(F.hasPrologueData() ? (VE.getValueID(F.getPrologueData()) + 1)
 
712
                                       : 0);
 
713
    Vals.push_back(getEncodedDLLStorageClass(F));
 
714
    Vals.push_back(F.hasComdat() ? VE.getComdatID(F.getComdat()) : 0);
 
715
    Vals.push_back(F.hasPrefixData() ? (VE.getValueID(F.getPrefixData()) + 1)
 
716
                                     : 0);
 
717
    Vals.push_back(
 
718
        F.hasPersonalityFn() ? (VE.getValueID(F.getPersonalityFn()) + 1) : 0);
 
719
 
 
720
    unsigned AbbrevToUse = 0;
 
721
    Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);
 
722
    Vals.clear();
 
723
  }
 
724
 
 
725
  // Emit the alias information.
 
726
  for (const GlobalAlias &A : M->aliases()) {
 
727
    // ALIAS: [alias type, aliasee val#, linkage, visibility]
 
728
    Vals.push_back(VE.getTypeID(A.getType()));
 
729
    Vals.push_back(VE.getValueID(A.getAliasee()));
 
730
    Vals.push_back(getEncodedLinkage(A));
 
731
    Vals.push_back(getEncodedVisibility(A));
 
732
    Vals.push_back(getEncodedDLLStorageClass(A));
 
733
    Vals.push_back(getEncodedThreadLocalMode(A));
 
734
    Vals.push_back(A.hasUnnamedAddr());
 
735
    unsigned AbbrevToUse = 0;
 
736
    Stream.EmitRecord(bitc::MODULE_CODE_ALIAS, Vals, AbbrevToUse);
 
737
    Vals.clear();
 
738
  }
 
739
}
 
740
 
 
741
static uint64_t GetOptimizationFlags(const Value *V) {
 
742
  uint64_t Flags = 0;
 
743
 
 
744
  if (const auto *OBO = dyn_cast<OverflowingBinaryOperator>(V)) {
 
745
    if (OBO->hasNoSignedWrap())
 
746
      Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;
 
747
    if (OBO->hasNoUnsignedWrap())
 
748
      Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP;
 
749
  } else if (const auto *PEO = dyn_cast<PossiblyExactOperator>(V)) {
 
750
    if (PEO->isExact())
 
751
      Flags |= 1 << bitc::PEO_EXACT;
 
752
  } else if (const auto *FPMO = dyn_cast<FPMathOperator>(V)) {
 
753
    if (FPMO->hasUnsafeAlgebra())
 
754
      Flags |= FastMathFlags::UnsafeAlgebra;
 
755
    if (FPMO->hasNoNaNs())
 
756
      Flags |= FastMathFlags::NoNaNs;
 
757
    if (FPMO->hasNoInfs())
 
758
      Flags |= FastMathFlags::NoInfs;
 
759
    if (FPMO->hasNoSignedZeros())
 
760
      Flags |= FastMathFlags::NoSignedZeros;
 
761
    if (FPMO->hasAllowReciprocal())
 
762
      Flags |= FastMathFlags::AllowReciprocal;
 
763
  }
 
764
 
 
765
  return Flags;
 
766
}
 
767
 
 
768
static void WriteValueAsMetadata(const ValueAsMetadata *MD,
 
769
                                 const ValueEnumerator &VE,
 
770
                                 BitstreamWriter &Stream,
 
771
                                 SmallVectorImpl<uint64_t> &Record) {
 
772
  // Mimic an MDNode with a value as one operand.
 
773
  Value *V = MD->getValue();
 
774
  Record.push_back(VE.getTypeID(V->getType()));
 
775
  Record.push_back(VE.getValueID(V));
 
776
  Stream.EmitRecord(bitc::METADATA_VALUE, Record, 0);
 
777
  Record.clear();
 
778
}
 
779
 
 
780
static void WriteMDTuple(const MDTuple *N, const ValueEnumerator &VE,
 
781
                         BitstreamWriter &Stream,
 
782
                         SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
 
783
  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
 
784
    Metadata *MD = N->getOperand(i);
 
785
    assert(!(MD && isa<LocalAsMetadata>(MD)) &&
 
786
           "Unexpected function-local metadata");
 
787
    Record.push_back(VE.getMetadataOrNullID(MD));
 
788
  }
 
789
  Stream.EmitRecord(N->isDistinct() ? bitc::METADATA_DISTINCT_NODE
 
790
                                    : bitc::METADATA_NODE,
 
791
                    Record, Abbrev);
 
792
  Record.clear();
 
793
}
 
794
 
 
795
static void WriteDILocation(const DILocation *N, const ValueEnumerator &VE,
 
796
                            BitstreamWriter &Stream,
 
797
                            SmallVectorImpl<uint64_t> &Record,
 
798
                            unsigned Abbrev) {
 
799
  Record.push_back(N->isDistinct());
 
800
  Record.push_back(N->getLine());
 
801
  Record.push_back(N->getColumn());
 
802
  Record.push_back(VE.getMetadataID(N->getScope()));
 
803
  Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt()));
 
804
 
 
805
  Stream.EmitRecord(bitc::METADATA_LOCATION, Record, Abbrev);
 
806
  Record.clear();
 
807
}
 
808
 
 
809
static void WriteGenericDINode(const GenericDINode *N,
 
810
                               const ValueEnumerator &VE,
 
811
                               BitstreamWriter &Stream,
 
812
                               SmallVectorImpl<uint64_t> &Record,
 
813
                               unsigned Abbrev) {
 
814
  Record.push_back(N->isDistinct());
 
815
  Record.push_back(N->getTag());
 
816
  Record.push_back(0); // Per-tag version field; unused for now.
 
817
 
 
818
  for (auto &I : N->operands())
 
819
    Record.push_back(VE.getMetadataOrNullID(I));
 
820
 
 
821
  Stream.EmitRecord(bitc::METADATA_GENERIC_DEBUG, Record, Abbrev);
 
822
  Record.clear();
 
823
}
 
824
 
 
825
static uint64_t rotateSign(int64_t I) {
 
826
  uint64_t U = I;
 
827
  return I < 0 ? ~(U << 1) : U << 1;
 
828
}
 
829
 
 
830
static void WriteDISubrange(const DISubrange *N, const ValueEnumerator &,
 
831
                            BitstreamWriter &Stream,
 
832
                            SmallVectorImpl<uint64_t> &Record,
 
833
                            unsigned Abbrev) {
 
834
  Record.push_back(N->isDistinct());
 
835
  Record.push_back(N->getCount());
 
836
  Record.push_back(rotateSign(N->getLowerBound()));
 
837
 
 
838
  Stream.EmitRecord(bitc::METADATA_SUBRANGE, Record, Abbrev);
 
839
  Record.clear();
 
840
}
 
841
 
 
842
static void WriteDIEnumerator(const DIEnumerator *N, const ValueEnumerator &VE,
 
843
                              BitstreamWriter &Stream,
 
844
                              SmallVectorImpl<uint64_t> &Record,
 
845
                              unsigned Abbrev) {
 
846
  Record.push_back(N->isDistinct());
 
847
  Record.push_back(rotateSign(N->getValue()));
 
848
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
849
 
 
850
  Stream.EmitRecord(bitc::METADATA_ENUMERATOR, Record, Abbrev);
 
851
  Record.clear();
 
852
}
 
853
 
 
854
static void WriteDIBasicType(const DIBasicType *N, const ValueEnumerator &VE,
 
855
                             BitstreamWriter &Stream,
 
856
                             SmallVectorImpl<uint64_t> &Record,
 
857
                             unsigned Abbrev) {
 
858
  Record.push_back(N->isDistinct());
 
859
  Record.push_back(N->getTag());
 
860
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
861
  Record.push_back(N->getSizeInBits());
 
862
  Record.push_back(N->getAlignInBits());
 
863
  Record.push_back(N->getEncoding());
 
864
 
 
865
  Stream.EmitRecord(bitc::METADATA_BASIC_TYPE, Record, Abbrev);
 
866
  Record.clear();
 
867
}
 
868
 
 
869
static void WriteDIDerivedType(const DIDerivedType *N,
 
870
                               const ValueEnumerator &VE,
 
871
                               BitstreamWriter &Stream,
 
872
                               SmallVectorImpl<uint64_t> &Record,
 
873
                               unsigned Abbrev) {
 
874
  Record.push_back(N->isDistinct());
 
875
  Record.push_back(N->getTag());
 
876
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
877
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
878
  Record.push_back(N->getLine());
 
879
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
880
  Record.push_back(VE.getMetadataOrNullID(N->getBaseType()));
 
881
  Record.push_back(N->getSizeInBits());
 
882
  Record.push_back(N->getAlignInBits());
 
883
  Record.push_back(N->getOffsetInBits());
 
884
  Record.push_back(N->getFlags());
 
885
  Record.push_back(VE.getMetadataOrNullID(N->getExtraData()));
 
886
 
 
887
  Stream.EmitRecord(bitc::METADATA_DERIVED_TYPE, Record, Abbrev);
 
888
  Record.clear();
 
889
}
 
890
 
 
891
static void WriteDICompositeType(const DICompositeType *N,
 
892
                                 const ValueEnumerator &VE,
 
893
                                 BitstreamWriter &Stream,
 
894
                                 SmallVectorImpl<uint64_t> &Record,
 
895
                                 unsigned Abbrev) {
 
896
  Record.push_back(N->isDistinct());
 
897
  Record.push_back(N->getTag());
 
898
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
899
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
900
  Record.push_back(N->getLine());
 
901
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
902
  Record.push_back(VE.getMetadataOrNullID(N->getBaseType()));
 
903
  Record.push_back(N->getSizeInBits());
 
904
  Record.push_back(N->getAlignInBits());
 
905
  Record.push_back(N->getOffsetInBits());
 
906
  Record.push_back(N->getFlags());
 
907
  Record.push_back(VE.getMetadataOrNullID(N->getElements().get()));
 
908
  Record.push_back(N->getRuntimeLang());
 
909
  Record.push_back(VE.getMetadataOrNullID(N->getVTableHolder()));
 
910
  Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get()));
 
911
  Record.push_back(VE.getMetadataOrNullID(N->getRawIdentifier()));
 
912
 
 
913
  Stream.EmitRecord(bitc::METADATA_COMPOSITE_TYPE, Record, Abbrev);
 
914
  Record.clear();
 
915
}
 
916
 
 
917
static void WriteDISubroutineType(const DISubroutineType *N,
 
918
                                  const ValueEnumerator &VE,
 
919
                                  BitstreamWriter &Stream,
 
920
                                  SmallVectorImpl<uint64_t> &Record,
 
921
                                  unsigned Abbrev) {
 
922
  Record.push_back(N->isDistinct());
 
923
  Record.push_back(N->getFlags());
 
924
  Record.push_back(VE.getMetadataOrNullID(N->getTypeArray().get()));
 
925
 
 
926
  Stream.EmitRecord(bitc::METADATA_SUBROUTINE_TYPE, Record, Abbrev);
 
927
  Record.clear();
 
928
}
 
929
 
 
930
static void WriteDIFile(const DIFile *N, const ValueEnumerator &VE,
 
931
                        BitstreamWriter &Stream,
 
932
                        SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
 
933
  Record.push_back(N->isDistinct());
 
934
  Record.push_back(VE.getMetadataOrNullID(N->getRawFilename()));
 
935
  Record.push_back(VE.getMetadataOrNullID(N->getRawDirectory()));
 
936
 
 
937
  Stream.EmitRecord(bitc::METADATA_FILE, Record, Abbrev);
 
938
  Record.clear();
 
939
}
 
940
 
 
941
static void WriteDICompileUnit(const DICompileUnit *N,
 
942
                               const ValueEnumerator &VE,
 
943
                               BitstreamWriter &Stream,
 
944
                               SmallVectorImpl<uint64_t> &Record,
 
945
                               unsigned Abbrev) {
 
946
  Record.push_back(N->isDistinct());
 
947
  Record.push_back(N->getSourceLanguage());
 
948
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
949
  Record.push_back(VE.getMetadataOrNullID(N->getRawProducer()));
 
950
  Record.push_back(N->isOptimized());
 
951
  Record.push_back(VE.getMetadataOrNullID(N->getRawFlags()));
 
952
  Record.push_back(N->getRuntimeVersion());
 
953
  Record.push_back(VE.getMetadataOrNullID(N->getRawSplitDebugFilename()));
 
954
  Record.push_back(N->getEmissionKind());
 
955
  Record.push_back(VE.getMetadataOrNullID(N->getEnumTypes().get()));
 
956
  Record.push_back(VE.getMetadataOrNullID(N->getRetainedTypes().get()));
 
957
  Record.push_back(VE.getMetadataOrNullID(N->getSubprograms().get()));
 
958
  Record.push_back(VE.getMetadataOrNullID(N->getGlobalVariables().get()));
 
959
  Record.push_back(VE.getMetadataOrNullID(N->getImportedEntities().get()));
 
960
  Record.push_back(N->getDWOId());
 
961
 
 
962
  Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev);
 
963
  Record.clear();
 
964
}
 
965
 
 
966
static void WriteDISubprogram(const DISubprogram *N, const ValueEnumerator &VE,
 
967
                              BitstreamWriter &Stream,
 
968
                              SmallVectorImpl<uint64_t> &Record,
 
969
                              unsigned Abbrev) {
 
970
  Record.push_back(N->isDistinct());
 
971
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
972
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
973
  Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName()));
 
974
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
975
  Record.push_back(N->getLine());
 
976
  Record.push_back(VE.getMetadataOrNullID(N->getType()));
 
977
  Record.push_back(N->isLocalToUnit());
 
978
  Record.push_back(N->isDefinition());
 
979
  Record.push_back(N->getScopeLine());
 
980
  Record.push_back(VE.getMetadataOrNullID(N->getContainingType()));
 
981
  Record.push_back(N->getVirtuality());
 
982
  Record.push_back(N->getVirtualIndex());
 
983
  Record.push_back(N->getFlags());
 
984
  Record.push_back(N->isOptimized());
 
985
  Record.push_back(VE.getMetadataOrNullID(N->getRawFunction()));
 
986
  Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get()));
 
987
  Record.push_back(VE.getMetadataOrNullID(N->getDeclaration()));
 
988
  Record.push_back(VE.getMetadataOrNullID(N->getVariables().get()));
 
989
 
 
990
  Stream.EmitRecord(bitc::METADATA_SUBPROGRAM, Record, Abbrev);
 
991
  Record.clear();
 
992
}
 
993
 
 
994
static void WriteDILexicalBlock(const DILexicalBlock *N,
 
995
                                const ValueEnumerator &VE,
 
996
                                BitstreamWriter &Stream,
 
997
                                SmallVectorImpl<uint64_t> &Record,
 
998
                                unsigned Abbrev) {
 
999
  Record.push_back(N->isDistinct());
 
1000
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
1001
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
1002
  Record.push_back(N->getLine());
 
1003
  Record.push_back(N->getColumn());
 
1004
 
 
1005
  Stream.EmitRecord(bitc::METADATA_LEXICAL_BLOCK, Record, Abbrev);
 
1006
  Record.clear();
 
1007
}
 
1008
 
 
1009
static void WriteDILexicalBlockFile(const DILexicalBlockFile *N,
 
1010
                                    const ValueEnumerator &VE,
 
1011
                                    BitstreamWriter &Stream,
 
1012
                                    SmallVectorImpl<uint64_t> &Record,
 
1013
                                    unsigned Abbrev) {
 
1014
  Record.push_back(N->isDistinct());
 
1015
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
1016
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
1017
  Record.push_back(N->getDiscriminator());
 
1018
 
 
1019
  Stream.EmitRecord(bitc::METADATA_LEXICAL_BLOCK_FILE, Record, Abbrev);
 
1020
  Record.clear();
 
1021
}
 
1022
 
 
1023
static void WriteDINamespace(const DINamespace *N, const ValueEnumerator &VE,
 
1024
                             BitstreamWriter &Stream,
 
1025
                             SmallVectorImpl<uint64_t> &Record,
 
1026
                             unsigned Abbrev) {
 
1027
  Record.push_back(N->isDistinct());
 
1028
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
1029
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
1030
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1031
  Record.push_back(N->getLine());
 
1032
 
 
1033
  Stream.EmitRecord(bitc::METADATA_NAMESPACE, Record, Abbrev);
 
1034
  Record.clear();
 
1035
}
 
1036
 
 
1037
static void WriteDIModule(const DIModule *N, const ValueEnumerator &VE,
 
1038
                          BitstreamWriter &Stream,
 
1039
                          SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
 
1040
  Record.push_back(N->isDistinct());
 
1041
  for (auto &I : N->operands())
 
1042
    Record.push_back(VE.getMetadataOrNullID(I));
 
1043
 
 
1044
  Stream.EmitRecord(bitc::METADATA_MODULE, Record, Abbrev);
 
1045
  Record.clear();
 
1046
}
 
1047
 
 
1048
static void WriteDITemplateTypeParameter(const DITemplateTypeParameter *N,
 
1049
                                         const ValueEnumerator &VE,
 
1050
                                         BitstreamWriter &Stream,
 
1051
                                         SmallVectorImpl<uint64_t> &Record,
 
1052
                                         unsigned Abbrev) {
 
1053
  Record.push_back(N->isDistinct());
 
1054
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1055
  Record.push_back(VE.getMetadataOrNullID(N->getType()));
 
1056
 
 
1057
  Stream.EmitRecord(bitc::METADATA_TEMPLATE_TYPE, Record, Abbrev);
 
1058
  Record.clear();
 
1059
}
 
1060
 
 
1061
static void WriteDITemplateValueParameter(const DITemplateValueParameter *N,
 
1062
                                          const ValueEnumerator &VE,
 
1063
                                          BitstreamWriter &Stream,
 
1064
                                          SmallVectorImpl<uint64_t> &Record,
 
1065
                                          unsigned Abbrev) {
 
1066
  Record.push_back(N->isDistinct());
 
1067
  Record.push_back(N->getTag());
 
1068
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1069
  Record.push_back(VE.getMetadataOrNullID(N->getType()));
 
1070
  Record.push_back(VE.getMetadataOrNullID(N->getValue()));
 
1071
 
 
1072
  Stream.EmitRecord(bitc::METADATA_TEMPLATE_VALUE, Record, Abbrev);
 
1073
  Record.clear();
 
1074
}
 
1075
 
 
1076
static void WriteDIGlobalVariable(const DIGlobalVariable *N,
 
1077
                                  const ValueEnumerator &VE,
 
1078
                                  BitstreamWriter &Stream,
 
1079
                                  SmallVectorImpl<uint64_t> &Record,
 
1080
                                  unsigned Abbrev) {
 
1081
  Record.push_back(N->isDistinct());
 
1082
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
1083
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1084
  Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName()));
 
1085
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
1086
  Record.push_back(N->getLine());
 
1087
  Record.push_back(VE.getMetadataOrNullID(N->getType()));
 
1088
  Record.push_back(N->isLocalToUnit());
 
1089
  Record.push_back(N->isDefinition());
 
1090
  Record.push_back(VE.getMetadataOrNullID(N->getRawVariable()));
 
1091
  Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration()));
 
1092
 
 
1093
  Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev);
 
1094
  Record.clear();
 
1095
}
 
1096
 
 
1097
static void WriteDILocalVariable(const DILocalVariable *N,
 
1098
                                 const ValueEnumerator &VE,
 
1099
                                 BitstreamWriter &Stream,
 
1100
                                 SmallVectorImpl<uint64_t> &Record,
 
1101
                                 unsigned Abbrev) {
 
1102
  Record.push_back(N->isDistinct());
 
1103
  Record.push_back(N->getTag());
 
1104
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
1105
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1106
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
1107
  Record.push_back(N->getLine());
 
1108
  Record.push_back(VE.getMetadataOrNullID(N->getType()));
 
1109
  Record.push_back(N->getArg());
 
1110
  Record.push_back(N->getFlags());
 
1111
 
 
1112
  Stream.EmitRecord(bitc::METADATA_LOCAL_VAR, Record, Abbrev);
 
1113
  Record.clear();
 
1114
}
 
1115
 
 
1116
static void WriteDIExpression(const DIExpression *N, const ValueEnumerator &,
 
1117
                              BitstreamWriter &Stream,
 
1118
                              SmallVectorImpl<uint64_t> &Record,
 
1119
                              unsigned Abbrev) {
 
1120
  Record.reserve(N->getElements().size() + 1);
 
1121
 
 
1122
  Record.push_back(N->isDistinct());
 
1123
  Record.append(N->elements_begin(), N->elements_end());
 
1124
 
 
1125
  Stream.EmitRecord(bitc::METADATA_EXPRESSION, Record, Abbrev);
 
1126
  Record.clear();
 
1127
}
 
1128
 
 
1129
static void WriteDIObjCProperty(const DIObjCProperty *N,
 
1130
                                const ValueEnumerator &VE,
 
1131
                                BitstreamWriter &Stream,
 
1132
                                SmallVectorImpl<uint64_t> &Record,
 
1133
                                unsigned Abbrev) {
 
1134
  Record.push_back(N->isDistinct());
 
1135
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1136
  Record.push_back(VE.getMetadataOrNullID(N->getFile()));
 
1137
  Record.push_back(N->getLine());
 
1138
  Record.push_back(VE.getMetadataOrNullID(N->getRawSetterName()));
 
1139
  Record.push_back(VE.getMetadataOrNullID(N->getRawGetterName()));
 
1140
  Record.push_back(N->getAttributes());
 
1141
  Record.push_back(VE.getMetadataOrNullID(N->getType()));
 
1142
 
 
1143
  Stream.EmitRecord(bitc::METADATA_OBJC_PROPERTY, Record, Abbrev);
 
1144
  Record.clear();
 
1145
}
 
1146
 
 
1147
static void WriteDIImportedEntity(const DIImportedEntity *N,
 
1148
                                  const ValueEnumerator &VE,
 
1149
                                  BitstreamWriter &Stream,
 
1150
                                  SmallVectorImpl<uint64_t> &Record,
 
1151
                                  unsigned Abbrev) {
 
1152
  Record.push_back(N->isDistinct());
 
1153
  Record.push_back(N->getTag());
 
1154
  Record.push_back(VE.getMetadataOrNullID(N->getScope()));
 
1155
  Record.push_back(VE.getMetadataOrNullID(N->getEntity()));
 
1156
  Record.push_back(N->getLine());
 
1157
  Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
 
1158
 
 
1159
  Stream.EmitRecord(bitc::METADATA_IMPORTED_ENTITY, Record, Abbrev);
 
1160
  Record.clear();
 
1161
}
 
1162
 
 
1163
static void WriteModuleMetadata(const Module *M,
 
1164
                                const ValueEnumerator &VE,
 
1165
                                BitstreamWriter &Stream) {
 
1166
  const auto &MDs = VE.getMDs();
 
1167
  if (MDs.empty() && M->named_metadata_empty())
 
1168
    return;
 
1169
 
 
1170
  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
 
1171
 
 
1172
  unsigned MDSAbbrev = 0;
 
1173
  if (VE.hasMDString()) {
 
1174
    // Abbrev for METADATA_STRING.
 
1175
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
1176
    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING));
 
1177
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1178
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
 
1179
    MDSAbbrev = Stream.EmitAbbrev(Abbv);
 
1180
  }
 
1181
 
 
1182
  // Initialize MDNode abbreviations.
 
1183
#define HANDLE_MDNODE_LEAF(CLASS) unsigned CLASS##Abbrev = 0;
 
1184
#include "llvm/IR/Metadata.def"
 
1185
 
 
1186
  if (VE.hasDILocation()) {
 
1187
    // Abbrev for METADATA_LOCATION.
 
1188
    //
 
1189
    // Assume the column is usually under 128, and always output the inlined-at
 
1190
    // location (it's never more expensive than building an array size 1).
 
1191
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
1192
    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_LOCATION));
 
1193
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
 
1194
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
1195
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
 
1196
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
1197
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
1198
    DILocationAbbrev = Stream.EmitAbbrev(Abbv);
 
1199
  }
 
1200
 
 
1201
  if (VE.hasGenericDINode()) {
 
1202
    // Abbrev for METADATA_GENERIC_DEBUG.
 
1203
    //
 
1204
    // Assume the column is usually under 128, and always output the inlined-at
 
1205
    // location (it's never more expensive than building an array size 1).
 
1206
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
1207
    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_GENERIC_DEBUG));
 
1208
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
 
1209
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
1210
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
 
1211
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
1212
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1213
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
1214
    GenericDINodeAbbrev = Stream.EmitAbbrev(Abbv);
 
1215
  }
 
1216
 
 
1217
  unsigned NameAbbrev = 0;
 
1218
  if (!M->named_metadata_empty()) {
 
1219
    // Abbrev for METADATA_NAME.
 
1220
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
1221
    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME));
 
1222
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1223
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
 
1224
    NameAbbrev = Stream.EmitAbbrev(Abbv);
 
1225
  }
 
1226
 
 
1227
  SmallVector<uint64_t, 64> Record;
 
1228
  for (const Metadata *MD : MDs) {
 
1229
    if (const MDNode *N = dyn_cast<MDNode>(MD)) {
 
1230
      assert(N->isResolved() && "Expected forward references to be resolved");
 
1231
 
 
1232
      switch (N->getMetadataID()) {
 
1233
      default:
 
1234
        llvm_unreachable("Invalid MDNode subclass");
 
1235
#define HANDLE_MDNODE_LEAF(CLASS)                                              \
 
1236
  case Metadata::CLASS##Kind:                                                  \
 
1237
    Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev);           \
 
1238
    continue;
 
1239
#include "llvm/IR/Metadata.def"
 
1240
      }
 
1241
    }
 
1242
    if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
 
1243
      WriteValueAsMetadata(MDC, VE, Stream, Record);
 
1244
      continue;
 
1245
    }
 
1246
    const MDString *MDS = cast<MDString>(MD);
 
1247
    // Code: [strchar x N]
 
1248
    Record.append(MDS->bytes_begin(), MDS->bytes_end());
 
1249
 
 
1250
    // Emit the finished record.
 
1251
    Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev);
 
1252
    Record.clear();
 
1253
  }
 
1254
 
 
1255
  // Write named metadata.
 
1256
  for (const NamedMDNode &NMD : M->named_metadata()) {
 
1257
    // Write name.
 
1258
    StringRef Str = NMD.getName();
 
1259
    Record.append(Str.bytes_begin(), Str.bytes_end());
 
1260
    Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev);
 
1261
    Record.clear();
 
1262
 
 
1263
    // Write named metadata operands.
 
1264
    for (const MDNode *N : NMD.operands())
 
1265
      Record.push_back(VE.getMetadataID(N));
 
1266
    Stream.EmitRecord(bitc::METADATA_NAMED_NODE, Record, 0);
 
1267
    Record.clear();
 
1268
  }
 
1269
 
 
1270
  Stream.ExitBlock();
 
1271
}
 
1272
 
 
1273
static void WriteFunctionLocalMetadata(const Function &F,
 
1274
                                       const ValueEnumerator &VE,
 
1275
                                       BitstreamWriter &Stream) {
 
1276
  bool StartedMetadataBlock = false;
 
1277
  SmallVector<uint64_t, 64> Record;
 
1278
  const SmallVectorImpl<const LocalAsMetadata *> &MDs =
 
1279
      VE.getFunctionLocalMDs();
 
1280
  for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
 
1281
    assert(MDs[i] && "Expected valid function-local metadata");
 
1282
    if (!StartedMetadataBlock) {
 
1283
      Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
 
1284
      StartedMetadataBlock = true;
 
1285
    }
 
1286
    WriteValueAsMetadata(MDs[i], VE, Stream, Record);
 
1287
  }
 
1288
 
 
1289
  if (StartedMetadataBlock)
 
1290
    Stream.ExitBlock();
 
1291
}
 
1292
 
 
1293
static void WriteMetadataAttachment(const Function &F,
 
1294
                                    const ValueEnumerator &VE,
 
1295
                                    BitstreamWriter &Stream) {
 
1296
  Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3);
 
1297
 
 
1298
  SmallVector<uint64_t, 64> Record;
 
1299
 
 
1300
  // Write metadata attachments
 
1301
  // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
 
1302
  SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
 
1303
  F.getAllMetadata(MDs);
 
1304
  if (!MDs.empty()) {
 
1305
    for (const auto &I : MDs) {
 
1306
      Record.push_back(I.first);
 
1307
      Record.push_back(VE.getMetadataID(I.second));
 
1308
    }
 
1309
    Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
 
1310
    Record.clear();
 
1311
  }
 
1312
 
 
1313
  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
 
1314
    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
 
1315
         I != E; ++I) {
 
1316
      MDs.clear();
 
1317
      I->getAllMetadataOtherThanDebugLoc(MDs);
 
1318
 
 
1319
      // If no metadata, ignore instruction.
 
1320
      if (MDs.empty()) continue;
 
1321
 
 
1322
      Record.push_back(VE.getInstructionID(I));
 
1323
 
 
1324
      for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
 
1325
        Record.push_back(MDs[i].first);
 
1326
        Record.push_back(VE.getMetadataID(MDs[i].second));
 
1327
      }
 
1328
      Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
 
1329
      Record.clear();
 
1330
    }
 
1331
 
 
1332
  Stream.ExitBlock();
 
1333
}
 
1334
 
 
1335
static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) {
 
1336
  SmallVector<uint64_t, 64> Record;
 
1337
 
 
1338
  // Write metadata kinds
 
1339
  // METADATA_KIND - [n x [id, name]]
 
1340
  SmallVector<StringRef, 8> Names;
 
1341
  M->getMDKindNames(Names);
 
1342
 
 
1343
  if (Names.empty()) return;
 
1344
 
 
1345
  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
 
1346
 
 
1347
  for (unsigned MDKindID = 0, e = Names.size(); MDKindID != e; ++MDKindID) {
 
1348
    Record.push_back(MDKindID);
 
1349
    StringRef KName = Names[MDKindID];
 
1350
    Record.append(KName.begin(), KName.end());
 
1351
 
 
1352
    Stream.EmitRecord(bitc::METADATA_KIND, Record, 0);
 
1353
    Record.clear();
 
1354
  }
 
1355
 
 
1356
  Stream.ExitBlock();
 
1357
}
 
1358
 
 
1359
static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) {
 
1360
  if ((int64_t)V >= 0)
 
1361
    Vals.push_back(V << 1);
 
1362
  else
 
1363
    Vals.push_back((-V << 1) | 1);
 
1364
}
 
1365
 
 
1366
static void WriteConstants(unsigned FirstVal, unsigned LastVal,
 
1367
                           const ValueEnumerator &VE,
 
1368
                           BitstreamWriter &Stream, bool isGlobal) {
 
1369
  if (FirstVal == LastVal) return;
 
1370
 
 
1371
  Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4);
 
1372
 
 
1373
  unsigned AggregateAbbrev = 0;
 
1374
  unsigned String8Abbrev = 0;
 
1375
  unsigned CString7Abbrev = 0;
 
1376
  unsigned CString6Abbrev = 0;
 
1377
  // If this is a constant pool for the module, emit module-specific abbrevs.
 
1378
  if (isGlobal) {
 
1379
    // Abbrev for CST_CODE_AGGREGATE.
 
1380
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
1381
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE));
 
1382
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1383
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1)));
 
1384
    AggregateAbbrev = Stream.EmitAbbrev(Abbv);
 
1385
 
 
1386
    // Abbrev for CST_CODE_STRING.
 
1387
    Abbv = new BitCodeAbbrev();
 
1388
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
 
1389
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1390
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
 
1391
    String8Abbrev = Stream.EmitAbbrev(Abbv);
 
1392
    // Abbrev for CST_CODE_CSTRING.
 
1393
    Abbv = new BitCodeAbbrev();
 
1394
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
 
1395
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1396
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
 
1397
    CString7Abbrev = Stream.EmitAbbrev(Abbv);
 
1398
    // Abbrev for CST_CODE_CSTRING.
 
1399
    Abbv = new BitCodeAbbrev();
 
1400
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
 
1401
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
1402
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
 
1403
    CString6Abbrev = Stream.EmitAbbrev(Abbv);
 
1404
  }
 
1405
 
 
1406
  SmallVector<uint64_t, 64> Record;
 
1407
 
 
1408
  const ValueEnumerator::ValueList &Vals = VE.getValues();
 
1409
  Type *LastTy = nullptr;
 
1410
  for (unsigned i = FirstVal; i != LastVal; ++i) {
 
1411
    const Value *V = Vals[i].first;
 
1412
    // If we need to switch types, do so now.
 
1413
    if (V->getType() != LastTy) {
 
1414
      LastTy = V->getType();
 
1415
      Record.push_back(VE.getTypeID(LastTy));
 
1416
      Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record,
 
1417
                        CONSTANTS_SETTYPE_ABBREV);
 
1418
      Record.clear();
 
1419
    }
 
1420
 
 
1421
    if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
 
1422
      Record.push_back(unsigned(IA->hasSideEffects()) |
 
1423
                       unsigned(IA->isAlignStack()) << 1 |
 
1424
                       unsigned(IA->getDialect()&1) << 2);
 
1425
 
 
1426
      // Add the asm string.
 
1427
      const std::string &AsmStr = IA->getAsmString();
 
1428
      Record.push_back(AsmStr.size());
 
1429
      Record.append(AsmStr.begin(), AsmStr.end());
 
1430
 
 
1431
      // Add the constraint string.
 
1432
      const std::string &ConstraintStr = IA->getConstraintString();
 
1433
      Record.push_back(ConstraintStr.size());
 
1434
      Record.append(ConstraintStr.begin(), ConstraintStr.end());
 
1435
      Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record);
 
1436
      Record.clear();
 
1437
      continue;
 
1438
    }
 
1439
    const Constant *C = cast<Constant>(V);
 
1440
    unsigned Code = -1U;
 
1441
    unsigned AbbrevToUse = 0;
 
1442
    if (C->isNullValue()) {
 
1443
      Code = bitc::CST_CODE_NULL;
 
1444
    } else if (isa<UndefValue>(C)) {
 
1445
      Code = bitc::CST_CODE_UNDEF;
 
1446
    } else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) {
 
1447
      if (IV->getBitWidth() <= 64) {
 
1448
        uint64_t V = IV->getSExtValue();
 
1449
        emitSignedInt64(Record, V);
 
1450
        Code = bitc::CST_CODE_INTEGER;
 
1451
        AbbrevToUse = CONSTANTS_INTEGER_ABBREV;
 
1452
      } else {                             // Wide integers, > 64 bits in size.
 
1453
        // We have an arbitrary precision integer value to write whose
 
1454
        // bit width is > 64. However, in canonical unsigned integer
 
1455
        // format it is likely that the high bits are going to be zero.
 
1456
        // So, we only write the number of active words.
 
1457
        unsigned NWords = IV->getValue().getActiveWords();
 
1458
        const uint64_t *RawWords = IV->getValue().getRawData();
 
1459
        for (unsigned i = 0; i != NWords; ++i) {
 
1460
          emitSignedInt64(Record, RawWords[i]);
 
1461
        }
 
1462
        Code = bitc::CST_CODE_WIDE_INTEGER;
 
1463
      }
 
1464
    } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
 
1465
      Code = bitc::CST_CODE_FLOAT;
 
1466
      Type *Ty = CFP->getType();
 
1467
      if (Ty->isHalfTy() || Ty->isFloatTy() || Ty->isDoubleTy()) {
 
1468
        Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue());
 
1469
      } else if (Ty->isX86_FP80Ty()) {
 
1470
        // api needed to prevent premature destruction
 
1471
        // bits are not in the same order as a normal i80 APInt, compensate.
 
1472
        APInt api = CFP->getValueAPF().bitcastToAPInt();
 
1473
        const uint64_t *p = api.getRawData();
 
1474
        Record.push_back((p[1] << 48) | (p[0] >> 16));
 
1475
        Record.push_back(p[0] & 0xffffLL);
 
1476
      } else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) {
 
1477
        APInt api = CFP->getValueAPF().bitcastToAPInt();
 
1478
        const uint64_t *p = api.getRawData();
 
1479
        Record.push_back(p[0]);
 
1480
        Record.push_back(p[1]);
 
1481
      } else {
 
1482
        assert (0 && "Unknown FP type!");
 
1483
      }
 
1484
    } else if (isa<ConstantDataSequential>(C) &&
 
1485
               cast<ConstantDataSequential>(C)->isString()) {
 
1486
      const ConstantDataSequential *Str = cast<ConstantDataSequential>(C);
 
1487
      // Emit constant strings specially.
 
1488
      unsigned NumElts = Str->getNumElements();
 
1489
      // If this is a null-terminated string, use the denser CSTRING encoding.
 
1490
      if (Str->isCString()) {
 
1491
        Code = bitc::CST_CODE_CSTRING;
 
1492
        --NumElts;  // Don't encode the null, which isn't allowed by char6.
 
1493
      } else {
 
1494
        Code = bitc::CST_CODE_STRING;
 
1495
        AbbrevToUse = String8Abbrev;
 
1496
      }
 
1497
      bool isCStr7 = Code == bitc::CST_CODE_CSTRING;
 
1498
      bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING;
 
1499
      for (unsigned i = 0; i != NumElts; ++i) {
 
1500
        unsigned char V = Str->getElementAsInteger(i);
 
1501
        Record.push_back(V);
 
1502
        isCStr7 &= (V & 128) == 0;
 
1503
        if (isCStrChar6)
 
1504
          isCStrChar6 = BitCodeAbbrevOp::isChar6(V);
 
1505
      }
 
1506
 
 
1507
      if (isCStrChar6)
 
1508
        AbbrevToUse = CString6Abbrev;
 
1509
      else if (isCStr7)
 
1510
        AbbrevToUse = CString7Abbrev;
 
1511
    } else if (const ConstantDataSequential *CDS =
 
1512
                  dyn_cast<ConstantDataSequential>(C)) {
 
1513
      Code = bitc::CST_CODE_DATA;
 
1514
      Type *EltTy = CDS->getType()->getElementType();
 
1515
      if (isa<IntegerType>(EltTy)) {
 
1516
        for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
 
1517
          Record.push_back(CDS->getElementAsInteger(i));
 
1518
      } else if (EltTy->isFloatTy()) {
 
1519
        for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
 
1520
          union { float F; uint32_t I; };
 
1521
          F = CDS->getElementAsFloat(i);
 
1522
          Record.push_back(I);
 
1523
        }
 
1524
      } else {
 
1525
        assert(EltTy->isDoubleTy() && "Unknown ConstantData element type");
 
1526
        for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
 
1527
          union { double F; uint64_t I; };
 
1528
          F = CDS->getElementAsDouble(i);
 
1529
          Record.push_back(I);
 
1530
        }
 
1531
      }
 
1532
    } else if (isa<ConstantArray>(C) || isa<ConstantStruct>(C) ||
 
1533
               isa<ConstantVector>(C)) {
 
1534
      Code = bitc::CST_CODE_AGGREGATE;
 
1535
      for (const Value *Op : C->operands())
 
1536
        Record.push_back(VE.getValueID(Op));
 
1537
      AbbrevToUse = AggregateAbbrev;
 
1538
    } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
 
1539
      switch (CE->getOpcode()) {
 
1540
      default:
 
1541
        if (Instruction::isCast(CE->getOpcode())) {
 
1542
          Code = bitc::CST_CODE_CE_CAST;
 
1543
          Record.push_back(GetEncodedCastOpcode(CE->getOpcode()));
 
1544
          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
 
1545
          Record.push_back(VE.getValueID(C->getOperand(0)));
 
1546
          AbbrevToUse = CONSTANTS_CE_CAST_Abbrev;
 
1547
        } else {
 
1548
          assert(CE->getNumOperands() == 2 && "Unknown constant expr!");
 
1549
          Code = bitc::CST_CODE_CE_BINOP;
 
1550
          Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode()));
 
1551
          Record.push_back(VE.getValueID(C->getOperand(0)));
 
1552
          Record.push_back(VE.getValueID(C->getOperand(1)));
 
1553
          uint64_t Flags = GetOptimizationFlags(CE);
 
1554
          if (Flags != 0)
 
1555
            Record.push_back(Flags);
 
1556
        }
 
1557
        break;
 
1558
      case Instruction::GetElementPtr: {
 
1559
        Code = bitc::CST_CODE_CE_GEP;
 
1560
        const auto *GO = cast<GEPOperator>(C);
 
1561
        if (GO->isInBounds())
 
1562
          Code = bitc::CST_CODE_CE_INBOUNDS_GEP;
 
1563
        Record.push_back(VE.getTypeID(GO->getSourceElementType()));
 
1564
        for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
 
1565
          Record.push_back(VE.getTypeID(C->getOperand(i)->getType()));
 
1566
          Record.push_back(VE.getValueID(C->getOperand(i)));
 
1567
        }
 
1568
        break;
 
1569
      }
 
1570
      case Instruction::Select:
 
1571
        Code = bitc::CST_CODE_CE_SELECT;
 
1572
        Record.push_back(VE.getValueID(C->getOperand(0)));
 
1573
        Record.push_back(VE.getValueID(C->getOperand(1)));
 
1574
        Record.push_back(VE.getValueID(C->getOperand(2)));
 
1575
        break;
 
1576
      case Instruction::ExtractElement:
 
1577
        Code = bitc::CST_CODE_CE_EXTRACTELT;
 
1578
        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
 
1579
        Record.push_back(VE.getValueID(C->getOperand(0)));
 
1580
        Record.push_back(VE.getTypeID(C->getOperand(1)->getType()));
 
1581
        Record.push_back(VE.getValueID(C->getOperand(1)));
 
1582
        break;
 
1583
      case Instruction::InsertElement:
 
1584
        Code = bitc::CST_CODE_CE_INSERTELT;
 
1585
        Record.push_back(VE.getValueID(C->getOperand(0)));
 
1586
        Record.push_back(VE.getValueID(C->getOperand(1)));
 
1587
        Record.push_back(VE.getTypeID(C->getOperand(2)->getType()));
 
1588
        Record.push_back(VE.getValueID(C->getOperand(2)));
 
1589
        break;
 
1590
      case Instruction::ShuffleVector:
 
1591
        // If the return type and argument types are the same, this is a
 
1592
        // standard shufflevector instruction.  If the types are different,
 
1593
        // then the shuffle is widening or truncating the input vectors, and
 
1594
        // the argument type must also be encoded.
 
1595
        if (C->getType() == C->getOperand(0)->getType()) {
 
1596
          Code = bitc::CST_CODE_CE_SHUFFLEVEC;
 
1597
        } else {
 
1598
          Code = bitc::CST_CODE_CE_SHUFVEC_EX;
 
1599
          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
 
1600
        }
 
1601
        Record.push_back(VE.getValueID(C->getOperand(0)));
 
1602
        Record.push_back(VE.getValueID(C->getOperand(1)));
 
1603
        Record.push_back(VE.getValueID(C->getOperand(2)));
 
1604
        break;
 
1605
      case Instruction::ICmp:
 
1606
      case Instruction::FCmp:
 
1607
        Code = bitc::CST_CODE_CE_CMP;
 
1608
        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
 
1609
        Record.push_back(VE.getValueID(C->getOperand(0)));
 
1610
        Record.push_back(VE.getValueID(C->getOperand(1)));
 
1611
        Record.push_back(CE->getPredicate());
 
1612
        break;
 
1613
      }
 
1614
    } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
 
1615
      Code = bitc::CST_CODE_BLOCKADDRESS;
 
1616
      Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
 
1617
      Record.push_back(VE.getValueID(BA->getFunction()));
 
1618
      Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock()));
 
1619
    } else {
 
1620
#ifndef NDEBUG
 
1621
      C->dump();
 
1622
#endif
 
1623
      llvm_unreachable("Unknown constant!");
 
1624
    }
 
1625
    Stream.EmitRecord(Code, Record, AbbrevToUse);
 
1626
    Record.clear();
 
1627
  }
 
1628
 
 
1629
  Stream.ExitBlock();
 
1630
}
 
1631
 
 
1632
static void WriteModuleConstants(const ValueEnumerator &VE,
 
1633
                                 BitstreamWriter &Stream) {
 
1634
  const ValueEnumerator::ValueList &Vals = VE.getValues();
 
1635
 
 
1636
  // Find the first constant to emit, which is the first non-globalvalue value.
 
1637
  // We know globalvalues have been emitted by WriteModuleInfo.
 
1638
  for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
 
1639
    if (!isa<GlobalValue>(Vals[i].first)) {
 
1640
      WriteConstants(i, Vals.size(), VE, Stream, true);
 
1641
      return;
 
1642
    }
 
1643
  }
 
1644
}
 
1645
 
 
1646
/// PushValueAndType - The file has to encode both the value and type id for
 
1647
/// many values, because we need to know what type to create for forward
 
1648
/// references.  However, most operands are not forward references, so this type
 
1649
/// field is not needed.
 
1650
///
 
1651
/// This function adds V's value ID to Vals.  If the value ID is higher than the
 
1652
/// instruction ID, then it is a forward reference, and it also includes the
 
1653
/// type ID.  The value ID that is written is encoded relative to the InstID.
 
1654
static bool PushValueAndType(const Value *V, unsigned InstID,
 
1655
                             SmallVectorImpl<unsigned> &Vals,
 
1656
                             ValueEnumerator &VE) {
 
1657
  unsigned ValID = VE.getValueID(V);
 
1658
  // Make encoding relative to the InstID.
 
1659
  Vals.push_back(InstID - ValID);
 
1660
  if (ValID >= InstID) {
 
1661
    Vals.push_back(VE.getTypeID(V->getType()));
 
1662
    return true;
 
1663
  }
 
1664
  return false;
 
1665
}
 
1666
 
 
1667
/// pushValue - Like PushValueAndType, but where the type of the value is
 
1668
/// omitted (perhaps it was already encoded in an earlier operand).
 
1669
static void pushValue(const Value *V, unsigned InstID,
 
1670
                      SmallVectorImpl<unsigned> &Vals,
 
1671
                      ValueEnumerator &VE) {
 
1672
  unsigned ValID = VE.getValueID(V);
 
1673
  Vals.push_back(InstID - ValID);
 
1674
}
 
1675
 
 
1676
static void pushValueSigned(const Value *V, unsigned InstID,
 
1677
                            SmallVectorImpl<uint64_t> &Vals,
 
1678
                            ValueEnumerator &VE) {
 
1679
  unsigned ValID = VE.getValueID(V);
 
1680
  int64_t diff = ((int32_t)InstID - (int32_t)ValID);
 
1681
  emitSignedInt64(Vals, diff);
 
1682
}
 
1683
 
 
1684
/// WriteInstruction - Emit an instruction to the specified stream.
 
1685
static void WriteInstruction(const Instruction &I, unsigned InstID,
 
1686
                             ValueEnumerator &VE, BitstreamWriter &Stream,
 
1687
                             SmallVectorImpl<unsigned> &Vals) {
 
1688
  unsigned Code = 0;
 
1689
  unsigned AbbrevToUse = 0;
 
1690
  VE.setInstructionID(&I);
 
1691
  switch (I.getOpcode()) {
 
1692
  default:
 
1693
    if (Instruction::isCast(I.getOpcode())) {
 
1694
      Code = bitc::FUNC_CODE_INST_CAST;
 
1695
      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
 
1696
        AbbrevToUse = FUNCTION_INST_CAST_ABBREV;
 
1697
      Vals.push_back(VE.getTypeID(I.getType()));
 
1698
      Vals.push_back(GetEncodedCastOpcode(I.getOpcode()));
 
1699
    } else {
 
1700
      assert(isa<BinaryOperator>(I) && "Unknown instruction!");
 
1701
      Code = bitc::FUNC_CODE_INST_BINOP;
 
1702
      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
 
1703
        AbbrevToUse = FUNCTION_INST_BINOP_ABBREV;
 
1704
      pushValue(I.getOperand(1), InstID, Vals, VE);
 
1705
      Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
 
1706
      uint64_t Flags = GetOptimizationFlags(&I);
 
1707
      if (Flags != 0) {
 
1708
        if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV)
 
1709
          AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV;
 
1710
        Vals.push_back(Flags);
 
1711
      }
 
1712
    }
 
1713
    break;
 
1714
 
 
1715
  case Instruction::GetElementPtr: {
 
1716
    Code = bitc::FUNC_CODE_INST_GEP;
 
1717
    AbbrevToUse = FUNCTION_INST_GEP_ABBREV;
 
1718
    auto &GEPInst = cast<GetElementPtrInst>(I);
 
1719
    Vals.push_back(GEPInst.isInBounds());
 
1720
    Vals.push_back(VE.getTypeID(GEPInst.getSourceElementType()));
 
1721
    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
 
1722
      PushValueAndType(I.getOperand(i), InstID, Vals, VE);
 
1723
    break;
 
1724
  }
 
1725
  case Instruction::ExtractValue: {
 
1726
    Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
 
1727
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1728
    const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
 
1729
    Vals.append(EVI->idx_begin(), EVI->idx_end());
 
1730
    break;
 
1731
  }
 
1732
  case Instruction::InsertValue: {
 
1733
    Code = bitc::FUNC_CODE_INST_INSERTVAL;
 
1734
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1735
    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
 
1736
    const InsertValueInst *IVI = cast<InsertValueInst>(&I);
 
1737
    Vals.append(IVI->idx_begin(), IVI->idx_end());
 
1738
    break;
 
1739
  }
 
1740
  case Instruction::Select:
 
1741
    Code = bitc::FUNC_CODE_INST_VSELECT;
 
1742
    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
 
1743
    pushValue(I.getOperand(2), InstID, Vals, VE);
 
1744
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1745
    break;
 
1746
  case Instruction::ExtractElement:
 
1747
    Code = bitc::FUNC_CODE_INST_EXTRACTELT;
 
1748
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1749
    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
 
1750
    break;
 
1751
  case Instruction::InsertElement:
 
1752
    Code = bitc::FUNC_CODE_INST_INSERTELT;
 
1753
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1754
    pushValue(I.getOperand(1), InstID, Vals, VE);
 
1755
    PushValueAndType(I.getOperand(2), InstID, Vals, VE);
 
1756
    break;
 
1757
  case Instruction::ShuffleVector:
 
1758
    Code = bitc::FUNC_CODE_INST_SHUFFLEVEC;
 
1759
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1760
    pushValue(I.getOperand(1), InstID, Vals, VE);
 
1761
    pushValue(I.getOperand(2), InstID, Vals, VE);
 
1762
    break;
 
1763
  case Instruction::ICmp:
 
1764
  case Instruction::FCmp: {
 
1765
    // compare returning Int1Ty or vector of Int1Ty
 
1766
    Code = bitc::FUNC_CODE_INST_CMP2;
 
1767
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1768
    pushValue(I.getOperand(1), InstID, Vals, VE);
 
1769
    Vals.push_back(cast<CmpInst>(I).getPredicate());
 
1770
    uint64_t Flags = GetOptimizationFlags(&I);
 
1771
    if (Flags != 0)
 
1772
      Vals.push_back(Flags);
 
1773
    break;
 
1774
  }
 
1775
 
 
1776
  case Instruction::Ret:
 
1777
    {
 
1778
      Code = bitc::FUNC_CODE_INST_RET;
 
1779
      unsigned NumOperands = I.getNumOperands();
 
1780
      if (NumOperands == 0)
 
1781
        AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV;
 
1782
      else if (NumOperands == 1) {
 
1783
        if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
 
1784
          AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV;
 
1785
      } else {
 
1786
        for (unsigned i = 0, e = NumOperands; i != e; ++i)
 
1787
          PushValueAndType(I.getOperand(i), InstID, Vals, VE);
 
1788
      }
 
1789
    }
 
1790
    break;
 
1791
  case Instruction::Br:
 
1792
    {
 
1793
      Code = bitc::FUNC_CODE_INST_BR;
 
1794
      const BranchInst &II = cast<BranchInst>(I);
 
1795
      Vals.push_back(VE.getValueID(II.getSuccessor(0)));
 
1796
      if (II.isConditional()) {
 
1797
        Vals.push_back(VE.getValueID(II.getSuccessor(1)));
 
1798
        pushValue(II.getCondition(), InstID, Vals, VE);
 
1799
      }
 
1800
    }
 
1801
    break;
 
1802
  case Instruction::Switch:
 
1803
    {
 
1804
      Code = bitc::FUNC_CODE_INST_SWITCH;
 
1805
      const SwitchInst &SI = cast<SwitchInst>(I);
 
1806
      Vals.push_back(VE.getTypeID(SI.getCondition()->getType()));
 
1807
      pushValue(SI.getCondition(), InstID, Vals, VE);
 
1808
      Vals.push_back(VE.getValueID(SI.getDefaultDest()));
 
1809
      for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
 
1810
           i != e; ++i) {
 
1811
        Vals.push_back(VE.getValueID(i.getCaseValue()));
 
1812
        Vals.push_back(VE.getValueID(i.getCaseSuccessor()));
 
1813
      }
 
1814
    }
 
1815
    break;
 
1816
  case Instruction::IndirectBr:
 
1817
    Code = bitc::FUNC_CODE_INST_INDIRECTBR;
 
1818
    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
 
1819
    // Encode the address operand as relative, but not the basic blocks.
 
1820
    pushValue(I.getOperand(0), InstID, Vals, VE);
 
1821
    for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i)
 
1822
      Vals.push_back(VE.getValueID(I.getOperand(i)));
 
1823
    break;
 
1824
 
 
1825
  case Instruction::Invoke: {
 
1826
    const InvokeInst *II = cast<InvokeInst>(&I);
 
1827
    const Value *Callee = II->getCalledValue();
 
1828
    FunctionType *FTy = II->getFunctionType();
 
1829
    Code = bitc::FUNC_CODE_INST_INVOKE;
 
1830
 
 
1831
    Vals.push_back(VE.getAttributeID(II->getAttributes()));
 
1832
    Vals.push_back(II->getCallingConv() | 1 << 13);
 
1833
    Vals.push_back(VE.getValueID(II->getNormalDest()));
 
1834
    Vals.push_back(VE.getValueID(II->getUnwindDest()));
 
1835
    Vals.push_back(VE.getTypeID(FTy));
 
1836
    PushValueAndType(Callee, InstID, Vals, VE);
 
1837
 
 
1838
    // Emit value #'s for the fixed parameters.
 
1839
    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
 
1840
      pushValue(I.getOperand(i), InstID, Vals, VE);  // fixed param.
 
1841
 
 
1842
    // Emit type/value pairs for varargs params.
 
1843
    if (FTy->isVarArg()) {
 
1844
      for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3;
 
1845
           i != e; ++i)
 
1846
        PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg
 
1847
    }
 
1848
    break;
 
1849
  }
 
1850
  case Instruction::Resume:
 
1851
    Code = bitc::FUNC_CODE_INST_RESUME;
 
1852
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1853
    break;
 
1854
  case Instruction::Unreachable:
 
1855
    Code = bitc::FUNC_CODE_INST_UNREACHABLE;
 
1856
    AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV;
 
1857
    break;
 
1858
 
 
1859
  case Instruction::PHI: {
 
1860
    const PHINode &PN = cast<PHINode>(I);
 
1861
    Code = bitc::FUNC_CODE_INST_PHI;
 
1862
    // With the newer instruction encoding, forward references could give
 
1863
    // negative valued IDs.  This is most common for PHIs, so we use
 
1864
    // signed VBRs.
 
1865
    SmallVector<uint64_t, 128> Vals64;
 
1866
    Vals64.push_back(VE.getTypeID(PN.getType()));
 
1867
    for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
 
1868
      pushValueSigned(PN.getIncomingValue(i), InstID, Vals64, VE);
 
1869
      Vals64.push_back(VE.getValueID(PN.getIncomingBlock(i)));
 
1870
    }
 
1871
    // Emit a Vals64 vector and exit.
 
1872
    Stream.EmitRecord(Code, Vals64, AbbrevToUse);
 
1873
    Vals64.clear();
 
1874
    return;
 
1875
  }
 
1876
 
 
1877
  case Instruction::LandingPad: {
 
1878
    const LandingPadInst &LP = cast<LandingPadInst>(I);
 
1879
    Code = bitc::FUNC_CODE_INST_LANDINGPAD;
 
1880
    Vals.push_back(VE.getTypeID(LP.getType()));
 
1881
    Vals.push_back(LP.isCleanup());
 
1882
    Vals.push_back(LP.getNumClauses());
 
1883
    for (unsigned I = 0, E = LP.getNumClauses(); I != E; ++I) {
 
1884
      if (LP.isCatch(I))
 
1885
        Vals.push_back(LandingPadInst::Catch);
 
1886
      else
 
1887
        Vals.push_back(LandingPadInst::Filter);
 
1888
      PushValueAndType(LP.getClause(I), InstID, Vals, VE);
 
1889
    }
 
1890
    break;
 
1891
  }
 
1892
 
 
1893
  case Instruction::Alloca: {
 
1894
    Code = bitc::FUNC_CODE_INST_ALLOCA;
 
1895
    const AllocaInst &AI = cast<AllocaInst>(I);
 
1896
    Vals.push_back(VE.getTypeID(AI.getAllocatedType()));
 
1897
    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
 
1898
    Vals.push_back(VE.getValueID(I.getOperand(0))); // size.
 
1899
    unsigned AlignRecord = Log2_32(AI.getAlignment()) + 1;
 
1900
    assert(Log2_32(Value::MaximumAlignment) + 1 < 1 << 5 &&
 
1901
           "not enough bits for maximum alignment");
 
1902
    assert(AlignRecord < 1 << 5 && "alignment greater than 1 << 64");
 
1903
    AlignRecord |= AI.isUsedWithInAlloca() << 5;
 
1904
    AlignRecord |= 1 << 6;
 
1905
    Vals.push_back(AlignRecord);
 
1906
    break;
 
1907
  }
 
1908
 
 
1909
  case Instruction::Load:
 
1910
    if (cast<LoadInst>(I).isAtomic()) {
 
1911
      Code = bitc::FUNC_CODE_INST_LOADATOMIC;
 
1912
      PushValueAndType(I.getOperand(0), InstID, Vals, VE);
 
1913
    } else {
 
1914
      Code = bitc::FUNC_CODE_INST_LOAD;
 
1915
      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))  // ptr
 
1916
        AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;
 
1917
    }
 
1918
    Vals.push_back(VE.getTypeID(I.getType()));
 
1919
    Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);
 
1920
    Vals.push_back(cast<LoadInst>(I).isVolatile());
 
1921
    if (cast<LoadInst>(I).isAtomic()) {
 
1922
      Vals.push_back(GetEncodedOrdering(cast<LoadInst>(I).getOrdering()));
 
1923
      Vals.push_back(GetEncodedSynchScope(cast<LoadInst>(I).getSynchScope()));
 
1924
    }
 
1925
    break;
 
1926
  case Instruction::Store:
 
1927
    if (cast<StoreInst>(I).isAtomic())
 
1928
      Code = bitc::FUNC_CODE_INST_STOREATOMIC;
 
1929
    else
 
1930
      Code = bitc::FUNC_CODE_INST_STORE;
 
1931
    PushValueAndType(I.getOperand(1), InstID, Vals, VE);  // ptrty + ptr
 
1932
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // valty + val
 
1933
    Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
 
1934
    Vals.push_back(cast<StoreInst>(I).isVolatile());
 
1935
    if (cast<StoreInst>(I).isAtomic()) {
 
1936
      Vals.push_back(GetEncodedOrdering(cast<StoreInst>(I).getOrdering()));
 
1937
      Vals.push_back(GetEncodedSynchScope(cast<StoreInst>(I).getSynchScope()));
 
1938
    }
 
1939
    break;
 
1940
  case Instruction::AtomicCmpXchg:
 
1941
    Code = bitc::FUNC_CODE_INST_CMPXCHG;
 
1942
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // ptrty + ptr
 
1943
    PushValueAndType(I.getOperand(1), InstID, Vals, VE);         // cmp.
 
1944
    pushValue(I.getOperand(2), InstID, Vals, VE);         // newval.
 
1945
    Vals.push_back(cast<AtomicCmpXchgInst>(I).isVolatile());
 
1946
    Vals.push_back(GetEncodedOrdering(
 
1947
                     cast<AtomicCmpXchgInst>(I).getSuccessOrdering()));
 
1948
    Vals.push_back(GetEncodedSynchScope(
 
1949
                     cast<AtomicCmpXchgInst>(I).getSynchScope()));
 
1950
    Vals.push_back(GetEncodedOrdering(
 
1951
                     cast<AtomicCmpXchgInst>(I).getFailureOrdering()));
 
1952
    Vals.push_back(cast<AtomicCmpXchgInst>(I).isWeak());
 
1953
    break;
 
1954
  case Instruction::AtomicRMW:
 
1955
    Code = bitc::FUNC_CODE_INST_ATOMICRMW;
 
1956
    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // ptrty + ptr
 
1957
    pushValue(I.getOperand(1), InstID, Vals, VE);         // val.
 
1958
    Vals.push_back(GetEncodedRMWOperation(
 
1959
                     cast<AtomicRMWInst>(I).getOperation()));
 
1960
    Vals.push_back(cast<AtomicRMWInst>(I).isVolatile());
 
1961
    Vals.push_back(GetEncodedOrdering(cast<AtomicRMWInst>(I).getOrdering()));
 
1962
    Vals.push_back(GetEncodedSynchScope(
 
1963
                     cast<AtomicRMWInst>(I).getSynchScope()));
 
1964
    break;
 
1965
  case Instruction::Fence:
 
1966
    Code = bitc::FUNC_CODE_INST_FENCE;
 
1967
    Vals.push_back(GetEncodedOrdering(cast<FenceInst>(I).getOrdering()));
 
1968
    Vals.push_back(GetEncodedSynchScope(cast<FenceInst>(I).getSynchScope()));
 
1969
    break;
 
1970
  case Instruction::Call: {
 
1971
    const CallInst &CI = cast<CallInst>(I);
 
1972
    FunctionType *FTy = CI.getFunctionType();
 
1973
 
 
1974
    Code = bitc::FUNC_CODE_INST_CALL;
 
1975
 
 
1976
    Vals.push_back(VE.getAttributeID(CI.getAttributes()));
 
1977
    Vals.push_back((CI.getCallingConv() << 1) | unsigned(CI.isTailCall()) |
 
1978
                   unsigned(CI.isMustTailCall()) << 14 | 1 << 15);
 
1979
    Vals.push_back(VE.getTypeID(FTy));
 
1980
    PushValueAndType(CI.getCalledValue(), InstID, Vals, VE);  // Callee
 
1981
 
 
1982
    // Emit value #'s for the fixed parameters.
 
1983
    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) {
 
1984
      // Check for labels (can happen with asm labels).
 
1985
      if (FTy->getParamType(i)->isLabelTy())
 
1986
        Vals.push_back(VE.getValueID(CI.getArgOperand(i)));
 
1987
      else
 
1988
        pushValue(CI.getArgOperand(i), InstID, Vals, VE);  // fixed param.
 
1989
    }
 
1990
 
 
1991
    // Emit type/value pairs for varargs params.
 
1992
    if (FTy->isVarArg()) {
 
1993
      for (unsigned i = FTy->getNumParams(), e = CI.getNumArgOperands();
 
1994
           i != e; ++i)
 
1995
        PushValueAndType(CI.getArgOperand(i), InstID, Vals, VE);  // varargs
 
1996
    }
 
1997
    break;
 
1998
  }
 
1999
  case Instruction::VAArg:
 
2000
    Code = bitc::FUNC_CODE_INST_VAARG;
 
2001
    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));   // valistty
 
2002
    pushValue(I.getOperand(0), InstID, Vals, VE); // valist.
 
2003
    Vals.push_back(VE.getTypeID(I.getType())); // restype.
 
2004
    break;
 
2005
  }
 
2006
 
 
2007
  Stream.EmitRecord(Code, Vals, AbbrevToUse);
 
2008
  Vals.clear();
 
2009
}
 
2010
 
 
2011
// Emit names for globals/functions etc.
 
2012
static void WriteValueSymbolTable(const ValueSymbolTable &VST,
 
2013
                                  const ValueEnumerator &VE,
 
2014
                                  BitstreamWriter &Stream) {
 
2015
  if (VST.empty()) return;
 
2016
  Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4);
 
2017
 
 
2018
  // FIXME: Set up the abbrev, we know how many values there are!
 
2019
  // FIXME: We know if the type names can use 7-bit ascii.
 
2020
  SmallVector<unsigned, 64> NameVals;
 
2021
 
 
2022
  for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end();
 
2023
       SI != SE; ++SI) {
 
2024
 
 
2025
    const ValueName &Name = *SI;
 
2026
 
 
2027
    // Figure out the encoding to use for the name.
 
2028
    bool is7Bit = true;
 
2029
    bool isChar6 = true;
 
2030
    for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength();
 
2031
         C != E; ++C) {
 
2032
      if (isChar6)
 
2033
        isChar6 = BitCodeAbbrevOp::isChar6(*C);
 
2034
      if ((unsigned char)*C & 128) {
 
2035
        is7Bit = false;
 
2036
        break;  // don't bother scanning the rest.
 
2037
      }
 
2038
    }
 
2039
 
 
2040
    unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
 
2041
 
 
2042
    // VST_ENTRY:   [valueid, namechar x N]
 
2043
    // VST_BBENTRY: [bbid, namechar x N]
 
2044
    unsigned Code;
 
2045
    if (isa<BasicBlock>(SI->getValue())) {
 
2046
      Code = bitc::VST_CODE_BBENTRY;
 
2047
      if (isChar6)
 
2048
        AbbrevToUse = VST_BBENTRY_6_ABBREV;
 
2049
    } else {
 
2050
      Code = bitc::VST_CODE_ENTRY;
 
2051
      if (isChar6)
 
2052
        AbbrevToUse = VST_ENTRY_6_ABBREV;
 
2053
      else if (is7Bit)
 
2054
        AbbrevToUse = VST_ENTRY_7_ABBREV;
 
2055
    }
 
2056
 
 
2057
    NameVals.push_back(VE.getValueID(SI->getValue()));
 
2058
    for (const char *P = Name.getKeyData(),
 
2059
         *E = Name.getKeyData()+Name.getKeyLength(); P != E; ++P)
 
2060
      NameVals.push_back((unsigned char)*P);
 
2061
 
 
2062
    // Emit the finished record.
 
2063
    Stream.EmitRecord(Code, NameVals, AbbrevToUse);
 
2064
    NameVals.clear();
 
2065
  }
 
2066
  Stream.ExitBlock();
 
2067
}
 
2068
 
 
2069
static void WriteUseList(ValueEnumerator &VE, UseListOrder &&Order,
 
2070
                         BitstreamWriter &Stream) {
 
2071
  assert(Order.Shuffle.size() >= 2 && "Shuffle too small");
 
2072
  unsigned Code;
 
2073
  if (isa<BasicBlock>(Order.V))
 
2074
    Code = bitc::USELIST_CODE_BB;
 
2075
  else
 
2076
    Code = bitc::USELIST_CODE_DEFAULT;
 
2077
 
 
2078
  SmallVector<uint64_t, 64> Record(Order.Shuffle.begin(), Order.Shuffle.end());
 
2079
  Record.push_back(VE.getValueID(Order.V));
 
2080
  Stream.EmitRecord(Code, Record);
 
2081
}
 
2082
 
 
2083
static void WriteUseListBlock(const Function *F, ValueEnumerator &VE,
 
2084
                              BitstreamWriter &Stream) {
 
2085
  assert(VE.shouldPreserveUseListOrder() &&
 
2086
         "Expected to be preserving use-list order");
 
2087
 
 
2088
  auto hasMore = [&]() {
 
2089
    return !VE.UseListOrders.empty() && VE.UseListOrders.back().F == F;
 
2090
  };
 
2091
  if (!hasMore())
 
2092
    // Nothing to do.
 
2093
    return;
 
2094
 
 
2095
  Stream.EnterSubblock(bitc::USELIST_BLOCK_ID, 3);
 
2096
  while (hasMore()) {
 
2097
    WriteUseList(VE, std::move(VE.UseListOrders.back()), Stream);
 
2098
    VE.UseListOrders.pop_back();
 
2099
  }
 
2100
  Stream.ExitBlock();
 
2101
}
 
2102
 
 
2103
/// WriteFunction - Emit a function body to the module stream.
 
2104
static void WriteFunction(const Function &F, ValueEnumerator &VE,
 
2105
                          BitstreamWriter &Stream) {
 
2106
  Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4);
 
2107
  VE.incorporateFunction(F);
 
2108
 
 
2109
  SmallVector<unsigned, 64> Vals;
 
2110
 
 
2111
  // Emit the number of basic blocks, so the reader can create them ahead of
 
2112
  // time.
 
2113
  Vals.push_back(VE.getBasicBlocks().size());
 
2114
  Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals);
 
2115
  Vals.clear();
 
2116
 
 
2117
  // If there are function-local constants, emit them now.
 
2118
  unsigned CstStart, CstEnd;
 
2119
  VE.getFunctionConstantRange(CstStart, CstEnd);
 
2120
  WriteConstants(CstStart, CstEnd, VE, Stream, false);
 
2121
 
 
2122
  // If there is function-local metadata, emit it now.
 
2123
  WriteFunctionLocalMetadata(F, VE, Stream);
 
2124
 
 
2125
  // Keep a running idea of what the instruction ID is.
 
2126
  unsigned InstID = CstEnd;
 
2127
 
 
2128
  bool NeedsMetadataAttachment = F.hasMetadata();
 
2129
 
 
2130
  DILocation *LastDL = nullptr;
 
2131
 
 
2132
  // Finally, emit all the instructions, in order.
 
2133
  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
 
2134
    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
 
2135
         I != E; ++I) {
 
2136
      WriteInstruction(*I, InstID, VE, Stream, Vals);
 
2137
 
 
2138
      if (!I->getType()->isVoidTy())
 
2139
        ++InstID;
 
2140
 
 
2141
      // If the instruction has metadata, write a metadata attachment later.
 
2142
      NeedsMetadataAttachment |= I->hasMetadataOtherThanDebugLoc();
 
2143
 
 
2144
      // If the instruction has a debug location, emit it.
 
2145
      DILocation *DL = I->getDebugLoc();
 
2146
      if (!DL)
 
2147
        continue;
 
2148
 
 
2149
      if (DL == LastDL) {
 
2150
        // Just repeat the same debug loc as last time.
 
2151
        Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
 
2152
        continue;
 
2153
      }
 
2154
 
 
2155
      Vals.push_back(DL->getLine());
 
2156
      Vals.push_back(DL->getColumn());
 
2157
      Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
 
2158
      Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
 
2159
      Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals);
 
2160
      Vals.clear();
 
2161
 
 
2162
      LastDL = DL;
 
2163
    }
 
2164
 
 
2165
  // Emit names for all the instructions etc.
 
2166
  WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
 
2167
 
 
2168
  if (NeedsMetadataAttachment)
 
2169
    WriteMetadataAttachment(F, VE, Stream);
 
2170
  if (VE.shouldPreserveUseListOrder())
 
2171
    WriteUseListBlock(&F, VE, Stream);
 
2172
  VE.purgeFunction();
 
2173
  Stream.ExitBlock();
 
2174
}
 
2175
 
 
2176
// Emit blockinfo, which defines the standard abbreviations etc.
 
2177
static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) {
 
2178
  // We only want to emit block info records for blocks that have multiple
 
2179
  // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK.
 
2180
  // Other blocks can define their abbrevs inline.
 
2181
  Stream.EnterBlockInfoBlock(2);
 
2182
 
 
2183
  { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
 
2184
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2185
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
 
2186
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
 
2187
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
2188
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
 
2189
    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
 
2190
                                   Abbv) != VST_ENTRY_8_ABBREV)
 
2191
      llvm_unreachable("Unexpected abbrev ordering!");
 
2192
  }
 
2193
 
 
2194
  { // 7-bit fixed width VST_ENTRY strings.
 
2195
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2196
    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
 
2197
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
 
2198
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
2199
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
 
2200
    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
 
2201
                                   Abbv) != VST_ENTRY_7_ABBREV)
 
2202
      llvm_unreachable("Unexpected abbrev ordering!");
 
2203
  }
 
2204
  { // 6-bit char6 VST_ENTRY strings.
 
2205
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2206
    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
 
2207
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
 
2208
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
2209
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
 
2210
    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
 
2211
                                   Abbv) != VST_ENTRY_6_ABBREV)
 
2212
      llvm_unreachable("Unexpected abbrev ordering!");
 
2213
  }
 
2214
  { // 6-bit char6 VST_BBENTRY strings.
 
2215
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2216
    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY));
 
2217
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
 
2218
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
2219
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
 
2220
    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
 
2221
                                   Abbv) != VST_BBENTRY_6_ABBREV)
 
2222
      llvm_unreachable("Unexpected abbrev ordering!");
 
2223
  }
 
2224
 
 
2225
 
 
2226
 
 
2227
  { // SETTYPE abbrev for CONSTANTS_BLOCK.
 
2228
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2229
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE));
 
2230
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
 
2231
                              VE.computeBitsRequiredForTypeIndicies()));
 
2232
    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
 
2233
                                   Abbv) != CONSTANTS_SETTYPE_ABBREV)
 
2234
      llvm_unreachable("Unexpected abbrev ordering!");
 
2235
  }
 
2236
 
 
2237
  { // INTEGER abbrev for CONSTANTS_BLOCK.
 
2238
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2239
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER));
 
2240
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
 
2241
    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
 
2242
                                   Abbv) != CONSTANTS_INTEGER_ABBREV)
 
2243
      llvm_unreachable("Unexpected abbrev ordering!");
 
2244
  }
 
2245
 
 
2246
  { // CE_CAST abbrev for CONSTANTS_BLOCK.
 
2247
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2248
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST));
 
2249
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // cast opc
 
2250
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // typeid
 
2251
                              VE.computeBitsRequiredForTypeIndicies()));
 
2252
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));    // value id
 
2253
 
 
2254
    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
 
2255
                                   Abbv) != CONSTANTS_CE_CAST_Abbrev)
 
2256
      llvm_unreachable("Unexpected abbrev ordering!");
 
2257
  }
 
2258
  { // NULL abbrev for CONSTANTS_BLOCK.
 
2259
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2260
    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL));
 
2261
    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
 
2262
                                   Abbv) != CONSTANTS_NULL_Abbrev)
 
2263
      llvm_unreachable("Unexpected abbrev ordering!");
 
2264
  }
 
2265
 
 
2266
  // FIXME: This should only use space for first class types!
 
2267
 
 
2268
  { // INST_LOAD abbrev for FUNCTION_BLOCK.
 
2269
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2270
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));
 
2271
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr
 
2272
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,    // dest ty
 
2273
                              VE.computeBitsRequiredForTypeIndicies()));
 
2274
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align
 
2275
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile
 
2276
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2277
                                   Abbv) != FUNCTION_INST_LOAD_ABBREV)
 
2278
      llvm_unreachable("Unexpected abbrev ordering!");
 
2279
  }
 
2280
  { // INST_BINOP abbrev for FUNCTION_BLOCK.
 
2281
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2282
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
 
2283
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
 
2284
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
 
2285
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
 
2286
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2287
                                   Abbv) != FUNCTION_INST_BINOP_ABBREV)
 
2288
      llvm_unreachable("Unexpected abbrev ordering!");
 
2289
  }
 
2290
  { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
 
2291
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2292
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
 
2293
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
 
2294
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
 
2295
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
 
2296
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags
 
2297
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2298
                                   Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV)
 
2299
      llvm_unreachable("Unexpected abbrev ordering!");
 
2300
  }
 
2301
  { // INST_CAST abbrev for FUNCTION_BLOCK.
 
2302
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2303
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST));
 
2304
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));    // OpVal
 
2305
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // dest ty
 
2306
                              VE.computeBitsRequiredForTypeIndicies()));
 
2307
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // opc
 
2308
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2309
                                   Abbv) != FUNCTION_INST_CAST_ABBREV)
 
2310
      llvm_unreachable("Unexpected abbrev ordering!");
 
2311
  }
 
2312
 
 
2313
  { // INST_RET abbrev for FUNCTION_BLOCK.
 
2314
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2315
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
 
2316
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2317
                                   Abbv) != FUNCTION_INST_RET_VOID_ABBREV)
 
2318
      llvm_unreachable("Unexpected abbrev ordering!");
 
2319
  }
 
2320
  { // INST_RET abbrev for FUNCTION_BLOCK.
 
2321
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2322
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
 
2323
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID
 
2324
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2325
                                   Abbv) != FUNCTION_INST_RET_VAL_ABBREV)
 
2326
      llvm_unreachable("Unexpected abbrev ordering!");
 
2327
  }
 
2328
  { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
 
2329
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2330
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE));
 
2331
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
 
2332
                                   Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV)
 
2333
      llvm_unreachable("Unexpected abbrev ordering!");
 
2334
  }
 
2335
  {
 
2336
    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
 
2337
    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_GEP));
 
2338
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
 
2339
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, // dest ty
 
2340
                              Log2_32_Ceil(VE.getTypes().size() + 1)));
 
2341
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
 
2342
    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
 
2343
    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, Abbv) !=
 
2344
        FUNCTION_INST_GEP_ABBREV)
 
2345
      llvm_unreachable("Unexpected abbrev ordering!");
 
2346
  }
 
2347
 
 
2348
  Stream.ExitBlock();
 
2349
}
 
2350
 
 
2351
/// WriteModule - Emit the specified module to the bitstream.
 
2352
static void WriteModule(const Module *M, BitstreamWriter &Stream,
 
2353
                        bool ShouldPreserveUseListOrder) {
 
2354
  Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
 
2355
 
 
2356
  SmallVector<unsigned, 1> Vals;
 
2357
  unsigned CurVersion = 1;
 
2358
  Vals.push_back(CurVersion);
 
2359
  Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
 
2360
 
 
2361
  // Analyze the module, enumerating globals, functions, etc.
 
2362
  ValueEnumerator VE(*M, ShouldPreserveUseListOrder);
 
2363
 
 
2364
  // Emit blockinfo, which defines the standard abbreviations etc.
 
2365
  WriteBlockInfo(VE, Stream);
 
2366
 
 
2367
  // Emit information about attribute groups.
 
2368
  WriteAttributeGroupTable(VE, Stream);
 
2369
 
 
2370
  // Emit information about parameter attributes.
 
2371
  WriteAttributeTable(VE, Stream);
 
2372
 
 
2373
  // Emit information describing all of the types in the module.
 
2374
  WriteTypeTable(VE, Stream);
 
2375
 
 
2376
  writeComdats(VE, Stream);
 
2377
 
 
2378
  // Emit top-level description of module, including target triple, inline asm,
 
2379
  // descriptors for global variables, and function prototype info.
 
2380
  WriteModuleInfo(M, VE, Stream);
 
2381
 
 
2382
  // Emit constants.
 
2383
  WriteModuleConstants(VE, Stream);
 
2384
 
 
2385
  // Emit metadata.
 
2386
  WriteModuleMetadata(M, VE, Stream);
 
2387
 
 
2388
  // Emit metadata.
 
2389
  WriteModuleMetadataStore(M, Stream);
 
2390
 
 
2391
  // Emit names for globals/functions etc.
 
2392
  WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream);
 
2393
 
 
2394
  // Emit module-level use-lists.
 
2395
  if (VE.shouldPreserveUseListOrder())
 
2396
    WriteUseListBlock(nullptr, VE, Stream);
 
2397
 
 
2398
  // Emit function bodies.
 
2399
  for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)
 
2400
    if (!F->isDeclaration())
 
2401
      WriteFunction(*F, VE, Stream);
 
2402
 
 
2403
  Stream.ExitBlock();
 
2404
}
 
2405
 
 
2406
/// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
 
2407
/// header and trailer to make it compatible with the system archiver.  To do
 
2408
/// this we emit the following header, and then emit a trailer that pads the
 
2409
/// file out to be a multiple of 16 bytes.
 
2410
///
 
2411
/// struct bc_header {
 
2412
///   uint32_t Magic;         // 0x0B17C0DE
 
2413
///   uint32_t Version;       // Version, currently always 0.
 
2414
///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
 
2415
///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
 
2416
///   uint32_t CPUType;       // CPU specifier.
 
2417
///   ... potentially more later ...
 
2418
/// };
 
2419
enum {
 
2420
  DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size.
 
2421
  DarwinBCHeaderSize = 5*4
 
2422
};
 
2423
 
 
2424
static void WriteInt32ToBuffer(uint32_t Value, SmallVectorImpl<char> &Buffer,
 
2425
                               uint32_t &Position) {
 
2426
  support::endian::write32le(&Buffer[Position], Value);
 
2427
  Position += 4;
 
2428
}
 
2429
 
 
2430
static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer,
 
2431
                                         const Triple &TT) {
 
2432
  unsigned CPUType = ~0U;
 
2433
 
 
2434
  // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*, arm-*, thumb-*,
 
2435
  // armv[0-9]-*, thumbv[0-9]-*, armv5te-*, or armv6t2-*. The CPUType is a magic
 
2436
  // number from /usr/include/mach/machine.h.  It is ok to reproduce the
 
2437
  // specific constants here because they are implicitly part of the Darwin ABI.
 
2438
  enum {
 
2439
    DARWIN_CPU_ARCH_ABI64      = 0x01000000,
 
2440
    DARWIN_CPU_TYPE_X86        = 7,
 
2441
    DARWIN_CPU_TYPE_ARM        = 12,
 
2442
    DARWIN_CPU_TYPE_POWERPC    = 18
 
2443
  };
 
2444
 
 
2445
  Triple::ArchType Arch = TT.getArch();
 
2446
  if (Arch == Triple::x86_64)
 
2447
    CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64;
 
2448
  else if (Arch == Triple::x86)
 
2449
    CPUType = DARWIN_CPU_TYPE_X86;
 
2450
  else if (Arch == Triple::ppc)
 
2451
    CPUType = DARWIN_CPU_TYPE_POWERPC;
 
2452
  else if (Arch == Triple::ppc64)
 
2453
    CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64;
 
2454
  else if (Arch == Triple::arm || Arch == Triple::thumb)
 
2455
    CPUType = DARWIN_CPU_TYPE_ARM;
 
2456
 
 
2457
  // Traditional Bitcode starts after header.
 
2458
  assert(Buffer.size() >= DarwinBCHeaderSize &&
 
2459
         "Expected header size to be reserved");
 
2460
  unsigned BCOffset = DarwinBCHeaderSize;
 
2461
  unsigned BCSize = Buffer.size()-DarwinBCHeaderSize;
 
2462
 
 
2463
  // Write the magic and version.
 
2464
  unsigned Position = 0;
 
2465
  WriteInt32ToBuffer(0x0B17C0DE , Buffer, Position);
 
2466
  WriteInt32ToBuffer(0          , Buffer, Position); // Version.
 
2467
  WriteInt32ToBuffer(BCOffset   , Buffer, Position);
 
2468
  WriteInt32ToBuffer(BCSize     , Buffer, Position);
 
2469
  WriteInt32ToBuffer(CPUType    , Buffer, Position);
 
2470
 
 
2471
  // If the file is not a multiple of 16 bytes, insert dummy padding.
 
2472
  while (Buffer.size() & 15)
 
2473
    Buffer.push_back(0);
 
2474
}
 
2475
 
 
2476
/// WriteBitcodeToFile - Write the specified module to the specified output
 
2477
/// stream.
 
2478
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out,
 
2479
                              bool ShouldPreserveUseListOrder) {
 
2480
  SmallVector<char, 0> Buffer;
 
2481
  Buffer.reserve(256*1024);
 
2482
 
 
2483
  // If this is darwin or another generic macho target, reserve space for the
 
2484
  // header.
 
2485
  Triple TT(M->getTargetTriple());
 
2486
  if (TT.isOSDarwin())
 
2487
    Buffer.insert(Buffer.begin(), DarwinBCHeaderSize, 0);
 
2488
 
 
2489
  // Emit the module into the buffer.
 
2490
  {
 
2491
    BitstreamWriter Stream(Buffer);
 
2492
 
 
2493
    // Emit the file header.
 
2494
    Stream.Emit((unsigned)'B', 8);
 
2495
    Stream.Emit((unsigned)'C', 8);
 
2496
    Stream.Emit(0x0, 4);
 
2497
    Stream.Emit(0xC, 4);
 
2498
    Stream.Emit(0xE, 4);
 
2499
    Stream.Emit(0xD, 4);
 
2500
 
 
2501
    // Emit the module.
 
2502
    WriteModule(M, Stream, ShouldPreserveUseListOrder);
 
2503
  }
 
2504
 
 
2505
  if (TT.isOSDarwin())
 
2506
    EmitDarwinBCHeaderAndTrailer(Buffer, TT);
 
2507
 
 
2508
  // Write the generated bitstream to "Out".
 
2509
  Out.write((char*)&Buffer.front(), Buffer.size());
 
2510
}