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