1 //===- MetadataLoader.cpp - Internal BitcodeReader implementation ---------===//
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 #include "MetadataLoader.h"
11 #include "ValueList.h"
12 
13 #include "llvm/ADT/APFloat.h"
14 #include "llvm/ADT/APInt.h"
15 #include "llvm/ADT/ArrayRef.h"
16 #include "llvm/ADT/DenseMap.h"
17 #include "llvm/ADT/None.h"
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ADT/SmallString.h"
20 #include "llvm/ADT/SmallVector.h"
21 #include "llvm/ADT/StringRef.h"
22 #include "llvm/ADT/Triple.h"
23 #include "llvm/ADT/Twine.h"
24 #include "llvm/Bitcode/BitcodeReader.h"
25 #include "llvm/Bitcode/BitstreamReader.h"
26 #include "llvm/Bitcode/LLVMBitCodes.h"
27 #include "llvm/IR/Argument.h"
28 #include "llvm/IR/Attributes.h"
29 #include "llvm/IR/AutoUpgrade.h"
30 #include "llvm/IR/BasicBlock.h"
31 #include "llvm/IR/CallSite.h"
32 #include "llvm/IR/CallingConv.h"
33 #include "llvm/IR/Comdat.h"
34 #include "llvm/IR/Constant.h"
35 #include "llvm/IR/Constants.h"
36 #include "llvm/IR/DebugInfo.h"
37 #include "llvm/IR/DebugInfoMetadata.h"
38 #include "llvm/IR/DebugLoc.h"
39 #include "llvm/IR/DerivedTypes.h"
40 #include "llvm/IR/DiagnosticInfo.h"
41 #include "llvm/IR/DiagnosticPrinter.h"
42 #include "llvm/IR/Function.h"
43 #include "llvm/IR/GVMaterializer.h"
44 #include "llvm/IR/GlobalAlias.h"
45 #include "llvm/IR/GlobalIFunc.h"
46 #include "llvm/IR/GlobalIndirectSymbol.h"
47 #include "llvm/IR/GlobalObject.h"
48 #include "llvm/IR/GlobalValue.h"
49 #include "llvm/IR/GlobalVariable.h"
50 #include "llvm/IR/InlineAsm.h"
51 #include "llvm/IR/InstrTypes.h"
52 #include "llvm/IR/Instruction.h"
53 #include "llvm/IR/Instructions.h"
54 #include "llvm/IR/Intrinsics.h"
55 #include "llvm/IR/LLVMContext.h"
56 #include "llvm/IR/Module.h"
57 #include "llvm/IR/ModuleSummaryIndex.h"
58 #include "llvm/IR/OperandTraits.h"
59 #include "llvm/IR/Operator.h"
60 #include "llvm/IR/TrackingMDRef.h"
61 #include "llvm/IR/Type.h"
62 #include "llvm/IR/ValueHandle.h"
63 #include "llvm/Support/AtomicOrdering.h"
64 #include "llvm/Support/Casting.h"
65 #include "llvm/Support/CommandLine.h"
66 #include "llvm/Support/Compiler.h"
67 #include "llvm/Support/Debug.h"
68 #include "llvm/Support/Error.h"
69 #include "llvm/Support/ErrorHandling.h"
70 #include "llvm/Support/ManagedStatic.h"
71 #include "llvm/Support/MemoryBuffer.h"
72 #include "llvm/Support/raw_ostream.h"
73 #include <algorithm>
74 #include <cassert>
75 #include <cstddef>
76 #include <cstdint>
77 #include <deque>
78 #include <limits>
79 #include <map>
80 #include <memory>
81 #include <string>
82 #include <system_error>
83 #include <tuple>
84 #include <utility>
85 #include <vector>
86 
87 using namespace llvm;
88 
89 namespace {
90 
91 static int64_t unrotateSign(uint64_t U) { return U & 1 ? ~(U >> 1) : U >> 1; }
92 
93 class BitcodeReaderMetadataList {
94   unsigned NumFwdRefs;
95   bool AnyFwdRefs;
96   unsigned MinFwdRef;
97   unsigned MaxFwdRef;
98 
99   /// Array of metadata references.
100   ///
101   /// Don't use std::vector here.  Some versions of libc++ copy (instead of
102   /// move) on resize, and TrackingMDRef is very expensive to copy.
103   SmallVector<TrackingMDRef, 1> MetadataPtrs;
104 
105   /// Structures for resolving old type refs.
106   struct {
107     SmallDenseMap<MDString *, TempMDTuple, 1> Unknown;
108     SmallDenseMap<MDString *, DICompositeType *, 1> Final;
109     SmallDenseMap<MDString *, DICompositeType *, 1> FwdDecls;
110     SmallVector<std::pair<TrackingMDRef, TempMDTuple>, 1> Arrays;
111   } OldTypeRefs;
112 
113   LLVMContext &Context;
114 
115 public:
116   BitcodeReaderMetadataList(LLVMContext &C)
117       : NumFwdRefs(0), AnyFwdRefs(false), Context(C) {}
118 
119   // vector compatibility methods
120   unsigned size() const { return MetadataPtrs.size(); }
121   void resize(unsigned N) { MetadataPtrs.resize(N); }
122   void push_back(Metadata *MD) { MetadataPtrs.emplace_back(MD); }
123   void clear() { MetadataPtrs.clear(); }
124   Metadata *back() const { return MetadataPtrs.back(); }
125   void pop_back() { MetadataPtrs.pop_back(); }
126   bool empty() const { return MetadataPtrs.empty(); }
127 
128   Metadata *operator[](unsigned i) const {
129     assert(i < MetadataPtrs.size());
130     return MetadataPtrs[i];
131   }
132 
133   Metadata *lookup(unsigned I) const {
134     if (I < MetadataPtrs.size())
135       return MetadataPtrs[I];
136     return nullptr;
137   }
138 
139   void shrinkTo(unsigned N) {
140     assert(N <= size() && "Invalid shrinkTo request!");
141     assert(!AnyFwdRefs && "Unexpected forward refs");
142     MetadataPtrs.resize(N);
143   }
144 
145   /// Return the given metadata, creating a replaceable forward reference if
146   /// necessary.
147   Metadata *getMetadataFwdRef(unsigned Idx);
148 
149   /// Return the the given metadata only if it is fully resolved.
150   ///
151   /// Gives the same result as \a lookup(), unless \a MDNode::isResolved()
152   /// would give \c false.
153   Metadata *getMetadataIfResolved(unsigned Idx);
154 
155   MDNode *getMDNodeFwdRefOrNull(unsigned Idx);
156   void assignValue(Metadata *MD, unsigned Idx);
157   void tryToResolveCycles();
158   bool hasFwdRefs() const { return AnyFwdRefs; }
159 
160   /// Upgrade a type that had an MDString reference.
161   void addTypeRef(MDString &UUID, DICompositeType &CT);
162 
163   /// Upgrade a type that had an MDString reference.
164   Metadata *upgradeTypeRef(Metadata *MaybeUUID);
165 
166   /// Upgrade a type ref array that may have MDString references.
167   Metadata *upgradeTypeRefArray(Metadata *MaybeTuple);
168 
169 private:
170   Metadata *resolveTypeRefArray(Metadata *MaybeTuple);
171 };
172 
173 void BitcodeReaderMetadataList::assignValue(Metadata *MD, unsigned Idx) {
174   if (Idx == size()) {
175     push_back(MD);
176     return;
177   }
178 
179   if (Idx >= size())
180     resize(Idx + 1);
181 
182   TrackingMDRef &OldMD = MetadataPtrs[Idx];
183   if (!OldMD) {
184     OldMD.reset(MD);
185     return;
186   }
187 
188   // If there was a forward reference to this value, replace it.
189   TempMDTuple PrevMD(cast<MDTuple>(OldMD.get()));
190   PrevMD->replaceAllUsesWith(MD);
191   --NumFwdRefs;
192 }
193 
194 Metadata *BitcodeReaderMetadataList::getMetadataFwdRef(unsigned Idx) {
195   if (Idx >= size())
196     resize(Idx + 1);
197 
198   if (Metadata *MD = MetadataPtrs[Idx])
199     return MD;
200 
201   // Track forward refs to be resolved later.
202   if (AnyFwdRefs) {
203     MinFwdRef = std::min(MinFwdRef, Idx);
204     MaxFwdRef = std::max(MaxFwdRef, Idx);
205   } else {
206     AnyFwdRefs = true;
207     MinFwdRef = MaxFwdRef = Idx;
208   }
209   ++NumFwdRefs;
210 
211   // Create and return a placeholder, which will later be RAUW'd.
212   Metadata *MD = MDNode::getTemporary(Context, None).release();
213   MetadataPtrs[Idx].reset(MD);
214   return MD;
215 }
216 
217 Metadata *BitcodeReaderMetadataList::getMetadataIfResolved(unsigned Idx) {
218   Metadata *MD = lookup(Idx);
219   if (auto *N = dyn_cast_or_null<MDNode>(MD))
220     if (!N->isResolved())
221       return nullptr;
222   return MD;
223 }
224 
225 MDNode *BitcodeReaderMetadataList::getMDNodeFwdRefOrNull(unsigned Idx) {
226   return dyn_cast_or_null<MDNode>(getMetadataFwdRef(Idx));
227 }
228 
229 void BitcodeReaderMetadataList::tryToResolveCycles() {
230   if (NumFwdRefs)
231     // Still forward references... can't resolve cycles.
232     return;
233 
234   bool DidReplaceTypeRefs = false;
235 
236   // Give up on finding a full definition for any forward decls that remain.
237   for (const auto &Ref : OldTypeRefs.FwdDecls)
238     OldTypeRefs.Final.insert(Ref);
239   OldTypeRefs.FwdDecls.clear();
240 
241   // Upgrade from old type ref arrays.  In strange cases, this could add to
242   // OldTypeRefs.Unknown.
243   for (const auto &Array : OldTypeRefs.Arrays) {
244     DidReplaceTypeRefs = true;
245     Array.second->replaceAllUsesWith(resolveTypeRefArray(Array.first.get()));
246   }
247   OldTypeRefs.Arrays.clear();
248 
249   // Replace old string-based type refs with the resolved node, if possible.
250   // If we haven't seen the node, leave it to the verifier to complain about
251   // the invalid string reference.
252   for (const auto &Ref : OldTypeRefs.Unknown) {
253     DidReplaceTypeRefs = true;
254     if (DICompositeType *CT = OldTypeRefs.Final.lookup(Ref.first))
255       Ref.second->replaceAllUsesWith(CT);
256     else
257       Ref.second->replaceAllUsesWith(Ref.first);
258   }
259   OldTypeRefs.Unknown.clear();
260 
261   // Make sure all the upgraded types are resolved.
262   if (DidReplaceTypeRefs) {
263     AnyFwdRefs = true;
264     MinFwdRef = 0;
265     MaxFwdRef = MetadataPtrs.size() - 1;
266   }
267 
268   if (!AnyFwdRefs)
269     // Nothing to do.
270     return;
271 
272   // Resolve any cycles.
273   for (unsigned I = MinFwdRef, E = MaxFwdRef + 1; I != E; ++I) {
274     auto &MD = MetadataPtrs[I];
275     auto *N = dyn_cast_or_null<MDNode>(MD);
276     if (!N)
277       continue;
278 
279     assert(!N->isTemporary() && "Unexpected forward reference");
280     N->resolveCycles();
281   }
282 
283   // Make sure we return early again until there's another forward ref.
284   AnyFwdRefs = false;
285 }
286 
287 void BitcodeReaderMetadataList::addTypeRef(MDString &UUID,
288                                            DICompositeType &CT) {
289   assert(CT.getRawIdentifier() == &UUID && "Mismatched UUID");
290   if (CT.isForwardDecl())
291     OldTypeRefs.FwdDecls.insert(std::make_pair(&UUID, &CT));
292   else
293     OldTypeRefs.Final.insert(std::make_pair(&UUID, &CT));
294 }
295 
296 Metadata *BitcodeReaderMetadataList::upgradeTypeRef(Metadata *MaybeUUID) {
297   auto *UUID = dyn_cast_or_null<MDString>(MaybeUUID);
298   if (LLVM_LIKELY(!UUID))
299     return MaybeUUID;
300 
301   if (auto *CT = OldTypeRefs.Final.lookup(UUID))
302     return CT;
303 
304   auto &Ref = OldTypeRefs.Unknown[UUID];
305   if (!Ref)
306     Ref = MDNode::getTemporary(Context, None);
307   return Ref.get();
308 }
309 
310 Metadata *BitcodeReaderMetadataList::upgradeTypeRefArray(Metadata *MaybeTuple) {
311   auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
312   if (!Tuple || Tuple->isDistinct())
313     return MaybeTuple;
314 
315   // Look through the array immediately if possible.
316   if (!Tuple->isTemporary())
317     return resolveTypeRefArray(Tuple);
318 
319   // Create and return a placeholder to use for now.  Eventually
320   // resolveTypeRefArrays() will be resolve this forward reference.
321   OldTypeRefs.Arrays.emplace_back(
322       std::piecewise_construct, std::forward_as_tuple(Tuple),
323       std::forward_as_tuple(MDTuple::getTemporary(Context, None)));
324   return OldTypeRefs.Arrays.back().second.get();
325 }
326 
327 Metadata *BitcodeReaderMetadataList::resolveTypeRefArray(Metadata *MaybeTuple) {
328   auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
329   if (!Tuple || Tuple->isDistinct())
330     return MaybeTuple;
331 
332   // Look through the DITypeRefArray, upgrading each DITypeRef.
333   SmallVector<Metadata *, 32> Ops;
334   Ops.reserve(Tuple->getNumOperands());
335   for (Metadata *MD : Tuple->operands())
336     Ops.push_back(upgradeTypeRef(MD));
337 
338   return MDTuple::get(Context, Ops);
339 }
340 
341 namespace {
342 
343 class PlaceholderQueue {
344   // Placeholders would thrash around when moved, so store in a std::deque
345   // instead of some sort of vector.
346   std::deque<DistinctMDOperandPlaceholder> PHs;
347 
348 public:
349   DistinctMDOperandPlaceholder &getPlaceholderOp(unsigned ID);
350   void flush(BitcodeReaderMetadataList &MetadataList);
351 };
352 
353 } // end anonymous namespace
354 
355 DistinctMDOperandPlaceholder &PlaceholderQueue::getPlaceholderOp(unsigned ID) {
356   PHs.emplace_back(ID);
357   return PHs.back();
358 }
359 
360 void PlaceholderQueue::flush(BitcodeReaderMetadataList &MetadataList) {
361   while (!PHs.empty()) {
362     PHs.front().replaceUseWith(
363         MetadataList.getMetadataFwdRef(PHs.front().getID()));
364     PHs.pop_front();
365   }
366 }
367 
368 } // anonynous namespace
369 
370 class MetadataLoader::MetadataLoaderImpl {
371   BitcodeReaderMetadataList MetadataList;
372   BitcodeReaderValueList &ValueList;
373   BitstreamCursor &Stream;
374   LLVMContext &Context;
375   Module &TheModule;
376   std::function<Type *(unsigned)> getTypeByID;
377 
378   /// Functions that need to be matched with subprograms when upgrading old
379   /// metadata.
380   SmallDenseMap<Function *, DISubprogram *, 16> FunctionsWithSPs;
381 
382   // Map the bitcode's custom MDKind ID to the Module's MDKind ID.
383   DenseMap<unsigned, unsigned> MDKindMap;
384 
385   bool StripTBAA = false;
386   bool HasSeenOldLoopTags = false;
387 
388   Error parseMetadataStrings(ArrayRef<uint64_t> Record, StringRef Blob,
389                              unsigned &NextMetadataNo);
390   Error parseGlobalObjectAttachment(GlobalObject &GO,
391                                     ArrayRef<uint64_t> Record);
392   Error parseMetadataKindRecord(SmallVectorImpl<uint64_t> &Record);
393 
394 public:
395   MetadataLoaderImpl(BitstreamCursor &Stream, Module &TheModule,
396                      BitcodeReaderValueList &ValueList,
397                      std::function<Type *(unsigned)> getTypeByID)
398       : MetadataList(TheModule.getContext()), ValueList(ValueList),
399         Stream(Stream), Context(TheModule.getContext()), TheModule(TheModule),
400         getTypeByID(getTypeByID) {}
401 
402   Error parseMetadata(bool ModuleLevel);
403 
404   bool hasFwdRefs() const { return MetadataList.hasFwdRefs(); }
405   Metadata *getMetadataFwdRef(unsigned Idx) {
406     return MetadataList.getMetadataFwdRef(Idx);
407   }
408 
409   MDNode *getMDNodeFwdRefOrNull(unsigned Idx) {
410     return MetadataList.getMDNodeFwdRefOrNull(Idx);
411   }
412 
413   DISubprogram *lookupSubprogramForFunction(Function *F) {
414     return FunctionsWithSPs.lookup(F);
415   }
416 
417   bool hasSeenOldLoopTags() { return HasSeenOldLoopTags; }
418 
419   Error parseMetadataAttachment(
420       Function &F, const SmallVectorImpl<Instruction *> &InstructionList);
421 
422   Error parseMetadataKinds();
423 
424   void setStripTBAA(bool Value) { StripTBAA = Value; }
425   bool isStrippingTBAA() { return StripTBAA; }
426 
427   unsigned size() const { return MetadataList.size(); }
428   void shrinkTo(unsigned N) { MetadataList.shrinkTo(N); }
429 };
430 
431 Error error(const Twine &Message) {
432   return make_error<StringError>(
433       Message, make_error_code(BitcodeError::CorruptedBitcode));
434 }
435 
436 /// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
437 /// module level metadata.
438 Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
439   if (!ModuleLevel && MetadataList.hasFwdRefs())
440     return error("Invalid metadata: fwd refs into function blocks");
441 
442   if (Stream.EnterSubBlock(bitc::METADATA_BLOCK_ID))
443     return error("Invalid record");
444 
445   unsigned NextMetadataNo = MetadataList.size();
446   std::vector<std::pair<DICompileUnit *, Metadata *>> CUSubprograms;
447   SmallVector<uint64_t, 64> Record;
448 
449   PlaceholderQueue Placeholders;
450   bool IsDistinct;
451   auto getMD = [&](unsigned ID) -> Metadata * {
452     if (!IsDistinct)
453       return MetadataList.getMetadataFwdRef(ID);
454     if (auto *MD = MetadataList.getMetadataIfResolved(ID))
455       return MD;
456     return &Placeholders.getPlaceholderOp(ID);
457   };
458   auto getMDOrNull = [&](unsigned ID) -> Metadata * {
459     if (ID)
460       return getMD(ID - 1);
461     return nullptr;
462   };
463   auto getMDOrNullWithoutPlaceholders = [&](unsigned ID) -> Metadata * {
464     if (ID)
465       return MetadataList.getMetadataFwdRef(ID - 1);
466     return nullptr;
467   };
468   auto getMDString = [&](unsigned ID) -> MDString * {
469     // This requires that the ID is not really a forward reference.  In
470     // particular, the MDString must already have been resolved.
471     return cast_or_null<MDString>(getMDOrNull(ID));
472   };
473 
474   // Support for old type refs.
475   auto getDITypeRefOrNull = [&](unsigned ID) {
476     return MetadataList.upgradeTypeRef(getMDOrNull(ID));
477   };
478 
479 #define GET_OR_DISTINCT(CLASS, ARGS)                                           \
480   (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
481 
482   // Read all the records.
483   while (true) {
484     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
485 
486     switch (Entry.Kind) {
487     case BitstreamEntry::SubBlock: // Handled for us already.
488     case BitstreamEntry::Error:
489       return error("Malformed block");
490     case BitstreamEntry::EndBlock:
491       // Upgrade old-style CU <-> SP pointers to point from SP to CU.
492       for (auto CU_SP : CUSubprograms)
493         if (auto *SPs = dyn_cast_or_null<MDTuple>(CU_SP.second))
494           for (auto &Op : SPs->operands())
495             if (auto *SP = dyn_cast_or_null<MDNode>(Op))
496               SP->replaceOperandWith(7, CU_SP.first);
497 
498       MetadataList.tryToResolveCycles();
499       Placeholders.flush(MetadataList);
500       return Error::success();
501     case BitstreamEntry::Record:
502       // The interesting case.
503       break;
504     }
505 
506     // Read a record.
507     Record.clear();
508     StringRef Blob;
509     unsigned Code = Stream.readRecord(Entry.ID, Record, &Blob);
510     IsDistinct = false;
511     switch (Code) {
512     default: // Default behavior: ignore.
513       break;
514     case bitc::METADATA_NAME: {
515       // Read name of the named metadata.
516       SmallString<8> Name(Record.begin(), Record.end());
517       Record.clear();
518       Code = Stream.ReadCode();
519 
520       unsigned NextBitCode = Stream.readRecord(Code, Record);
521       if (NextBitCode != bitc::METADATA_NAMED_NODE)
522         return error("METADATA_NAME not followed by METADATA_NAMED_NODE");
523 
524       // Read named metadata elements.
525       unsigned Size = Record.size();
526       NamedMDNode *NMD = TheModule.getOrInsertNamedMetadata(Name);
527       for (unsigned i = 0; i != Size; ++i) {
528         MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[i]);
529         if (!MD)
530           return error("Invalid record");
531         NMD->addOperand(MD);
532       }
533       break;
534     }
535     case bitc::METADATA_OLD_FN_NODE: {
536       // FIXME: Remove in 4.0.
537       // This is a LocalAsMetadata record, the only type of function-local
538       // metadata.
539       if (Record.size() % 2 == 1)
540         return error("Invalid record");
541 
542       // If this isn't a LocalAsMetadata record, we're dropping it.  This used
543       // to be legal, but there's no upgrade path.
544       auto dropRecord = [&] {
545         MetadataList.assignValue(MDNode::get(Context, None), NextMetadataNo++);
546       };
547       if (Record.size() != 2) {
548         dropRecord();
549         break;
550       }
551 
552       Type *Ty = getTypeByID(Record[0]);
553       if (Ty->isMetadataTy() || Ty->isVoidTy()) {
554         dropRecord();
555         break;
556       }
557 
558       MetadataList.assignValue(
559           LocalAsMetadata::get(ValueList.getValueFwdRef(Record[1], Ty)),
560           NextMetadataNo++);
561       break;
562     }
563     case bitc::METADATA_OLD_NODE: {
564       // FIXME: Remove in 4.0.
565       if (Record.size() % 2 == 1)
566         return error("Invalid record");
567 
568       unsigned Size = Record.size();
569       SmallVector<Metadata *, 8> Elts;
570       for (unsigned i = 0; i != Size; i += 2) {
571         Type *Ty = getTypeByID(Record[i]);
572         if (!Ty)
573           return error("Invalid record");
574         if (Ty->isMetadataTy())
575           Elts.push_back(getMD(Record[i + 1]));
576         else if (!Ty->isVoidTy()) {
577           auto *MD =
578               ValueAsMetadata::get(ValueList.getValueFwdRef(Record[i + 1], Ty));
579           assert(isa<ConstantAsMetadata>(MD) &&
580                  "Expected non-function-local metadata");
581           Elts.push_back(MD);
582         } else
583           Elts.push_back(nullptr);
584       }
585       MetadataList.assignValue(MDNode::get(Context, Elts), NextMetadataNo++);
586       break;
587     }
588     case bitc::METADATA_VALUE: {
589       if (Record.size() != 2)
590         return error("Invalid record");
591 
592       Type *Ty = getTypeByID(Record[0]);
593       if (Ty->isMetadataTy() || Ty->isVoidTy())
594         return error("Invalid record");
595 
596       MetadataList.assignValue(
597           ValueAsMetadata::get(ValueList.getValueFwdRef(Record[1], Ty)),
598           NextMetadataNo++);
599       break;
600     }
601     case bitc::METADATA_DISTINCT_NODE:
602       IsDistinct = true;
603       LLVM_FALLTHROUGH;
604     case bitc::METADATA_NODE: {
605       SmallVector<Metadata *, 8> Elts;
606       Elts.reserve(Record.size());
607       for (unsigned ID : Record)
608         Elts.push_back(getMDOrNull(ID));
609       MetadataList.assignValue(IsDistinct ? MDNode::getDistinct(Context, Elts)
610                                           : MDNode::get(Context, Elts),
611                                NextMetadataNo++);
612       break;
613     }
614     case bitc::METADATA_LOCATION: {
615       if (Record.size() != 5)
616         return error("Invalid record");
617 
618       IsDistinct = Record[0];
619       unsigned Line = Record[1];
620       unsigned Column = Record[2];
621       Metadata *Scope = getMD(Record[3]);
622       Metadata *InlinedAt = getMDOrNull(Record[4]);
623       MetadataList.assignValue(
624           GET_OR_DISTINCT(DILocation,
625                           (Context, Line, Column, Scope, InlinedAt)),
626           NextMetadataNo++);
627       break;
628     }
629     case bitc::METADATA_GENERIC_DEBUG: {
630       if (Record.size() < 4)
631         return error("Invalid record");
632 
633       IsDistinct = Record[0];
634       unsigned Tag = Record[1];
635       unsigned Version = Record[2];
636 
637       if (Tag >= 1u << 16 || Version != 0)
638         return error("Invalid record");
639 
640       auto *Header = getMDString(Record[3]);
641       SmallVector<Metadata *, 8> DwarfOps;
642       for (unsigned I = 4, E = Record.size(); I != E; ++I)
643         DwarfOps.push_back(getMDOrNull(Record[I]));
644       MetadataList.assignValue(
645           GET_OR_DISTINCT(GenericDINode, (Context, Tag, Header, DwarfOps)),
646           NextMetadataNo++);
647       break;
648     }
649     case bitc::METADATA_SUBRANGE: {
650       if (Record.size() != 3)
651         return error("Invalid record");
652 
653       IsDistinct = Record[0];
654       MetadataList.assignValue(
655           GET_OR_DISTINCT(DISubrange,
656                           (Context, Record[1], unrotateSign(Record[2]))),
657           NextMetadataNo++);
658       break;
659     }
660     case bitc::METADATA_ENUMERATOR: {
661       if (Record.size() != 3)
662         return error("Invalid record");
663 
664       IsDistinct = Record[0];
665       MetadataList.assignValue(
666           GET_OR_DISTINCT(DIEnumerator, (Context, unrotateSign(Record[1]),
667                                          getMDString(Record[2]))),
668           NextMetadataNo++);
669       break;
670     }
671     case bitc::METADATA_BASIC_TYPE: {
672       if (Record.size() != 6)
673         return error("Invalid record");
674 
675       IsDistinct = Record[0];
676       MetadataList.assignValue(
677           GET_OR_DISTINCT(DIBasicType,
678                           (Context, Record[1], getMDString(Record[2]),
679                            Record[3], Record[4], Record[5])),
680           NextMetadataNo++);
681       break;
682     }
683     case bitc::METADATA_DERIVED_TYPE: {
684       if (Record.size() != 12)
685         return error("Invalid record");
686 
687       IsDistinct = Record[0];
688       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
689       MetadataList.assignValue(
690           GET_OR_DISTINCT(DIDerivedType,
691                           (Context, Record[1], getMDString(Record[2]),
692                            getMDOrNull(Record[3]), Record[4],
693                            getDITypeRefOrNull(Record[5]),
694                            getDITypeRefOrNull(Record[6]), Record[7], Record[8],
695                            Record[9], Flags, getDITypeRefOrNull(Record[11]))),
696           NextMetadataNo++);
697       break;
698     }
699     case bitc::METADATA_COMPOSITE_TYPE: {
700       if (Record.size() != 16)
701         return error("Invalid record");
702 
703       // If we have a UUID and this is not a forward declaration, lookup the
704       // mapping.
705       IsDistinct = Record[0] & 0x1;
706       bool IsNotUsedInTypeRef = Record[0] >= 2;
707       unsigned Tag = Record[1];
708       MDString *Name = getMDString(Record[2]);
709       Metadata *File = getMDOrNull(Record[3]);
710       unsigned Line = Record[4];
711       Metadata *Scope = getDITypeRefOrNull(Record[5]);
712       Metadata *BaseType = getDITypeRefOrNull(Record[6]);
713       uint64_t SizeInBits = Record[7];
714       if (Record[8] > (uint64_t)std::numeric_limits<uint32_t>::max())
715         return error("Alignment value is too large");
716       uint32_t AlignInBits = Record[8];
717       uint64_t OffsetInBits = Record[9];
718       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
719       Metadata *Elements = getMDOrNull(Record[11]);
720       unsigned RuntimeLang = Record[12];
721       Metadata *VTableHolder = getDITypeRefOrNull(Record[13]);
722       Metadata *TemplateParams = getMDOrNull(Record[14]);
723       auto *Identifier = getMDString(Record[15]);
724       DICompositeType *CT = nullptr;
725       if (Identifier)
726         CT = DICompositeType::buildODRType(
727             Context, *Identifier, Tag, Name, File, Line, Scope, BaseType,
728             SizeInBits, AlignInBits, OffsetInBits, Flags, Elements, RuntimeLang,
729             VTableHolder, TemplateParams);
730 
731       // Create a node if we didn't get a lazy ODR type.
732       if (!CT)
733         CT = GET_OR_DISTINCT(DICompositeType,
734                              (Context, Tag, Name, File, Line, Scope, BaseType,
735                               SizeInBits, AlignInBits, OffsetInBits, Flags,
736                               Elements, RuntimeLang, VTableHolder,
737                               TemplateParams, Identifier));
738       if (!IsNotUsedInTypeRef && Identifier)
739         MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
740 
741       MetadataList.assignValue(CT, NextMetadataNo++);
742       break;
743     }
744     case bitc::METADATA_SUBROUTINE_TYPE: {
745       if (Record.size() < 3 || Record.size() > 4)
746         return error("Invalid record");
747       bool IsOldTypeRefArray = Record[0] < 2;
748       unsigned CC = (Record.size() > 3) ? Record[3] : 0;
749 
750       IsDistinct = Record[0] & 0x1;
751       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[1]);
752       Metadata *Types = getMDOrNull(Record[2]);
753       if (LLVM_UNLIKELY(IsOldTypeRefArray))
754         Types = MetadataList.upgradeTypeRefArray(Types);
755 
756       MetadataList.assignValue(
757           GET_OR_DISTINCT(DISubroutineType, (Context, Flags, CC, Types)),
758           NextMetadataNo++);
759       break;
760     }
761 
762     case bitc::METADATA_MODULE: {
763       if (Record.size() != 6)
764         return error("Invalid record");
765 
766       IsDistinct = Record[0];
767       MetadataList.assignValue(
768           GET_OR_DISTINCT(DIModule,
769                           (Context, getMDOrNull(Record[1]),
770                            getMDString(Record[2]), getMDString(Record[3]),
771                            getMDString(Record[4]), getMDString(Record[5]))),
772           NextMetadataNo++);
773       break;
774     }
775 
776     case bitc::METADATA_FILE: {
777       if (Record.size() != 3)
778         return error("Invalid record");
779 
780       IsDistinct = Record[0];
781       MetadataList.assignValue(
782           GET_OR_DISTINCT(DIFile, (Context, getMDString(Record[1]),
783                                    getMDString(Record[2]))),
784           NextMetadataNo++);
785       break;
786     }
787     case bitc::METADATA_COMPILE_UNIT: {
788       if (Record.size() < 14 || Record.size() > 17)
789         return error("Invalid record");
790 
791       // Ignore Record[0], which indicates whether this compile unit is
792       // distinct.  It's always distinct.
793       IsDistinct = true;
794       auto *CU = DICompileUnit::getDistinct(
795           Context, Record[1], getMDOrNull(Record[2]), getMDString(Record[3]),
796           Record[4], getMDString(Record[5]), Record[6], getMDString(Record[7]),
797           Record[8], getMDOrNull(Record[9]), getMDOrNull(Record[10]),
798           getMDOrNull(Record[12]), getMDOrNull(Record[13]),
799           Record.size() <= 15 ? nullptr : getMDOrNull(Record[15]),
800           Record.size() <= 14 ? 0 : Record[14],
801           Record.size() <= 16 ? true : Record[16]);
802 
803       MetadataList.assignValue(CU, NextMetadataNo++);
804 
805       // Move the Upgrade the list of subprograms.
806       if (Metadata *SPs = getMDOrNullWithoutPlaceholders(Record[11]))
807         CUSubprograms.push_back({CU, SPs});
808       break;
809     }
810     case bitc::METADATA_SUBPROGRAM: {
811       if (Record.size() < 18 || Record.size() > 20)
812         return error("Invalid record");
813 
814       IsDistinct =
815           (Record[0] & 1) || Record[8]; // All definitions should be distinct.
816       // Version 1 has a Function as Record[15].
817       // Version 2 has removed Record[15].
818       // Version 3 has the Unit as Record[15].
819       // Version 4 added thisAdjustment.
820       bool HasUnit = Record[0] >= 2;
821       if (HasUnit && Record.size() < 19)
822         return error("Invalid record");
823       Metadata *CUorFn = getMDOrNull(Record[15]);
824       unsigned Offset = Record.size() >= 19 ? 1 : 0;
825       bool HasFn = Offset && !HasUnit;
826       bool HasThisAdj = Record.size() >= 20;
827       DISubprogram *SP = GET_OR_DISTINCT(
828           DISubprogram, (Context,
829                          getDITypeRefOrNull(Record[1]),  // scope
830                          getMDString(Record[2]),         // name
831                          getMDString(Record[3]),         // linkageName
832                          getMDOrNull(Record[4]),         // file
833                          Record[5],                      // line
834                          getMDOrNull(Record[6]),         // type
835                          Record[7],                      // isLocal
836                          Record[8],                      // isDefinition
837                          Record[9],                      // scopeLine
838                          getDITypeRefOrNull(Record[10]), // containingType
839                          Record[11],                     // virtuality
840                          Record[12],                     // virtualIndex
841                          HasThisAdj ? Record[19] : 0,    // thisAdjustment
842                          static_cast<DINode::DIFlags>(Record[13] // flags
843                                                       ),
844                          Record[14],                       // isOptimized
845                          HasUnit ? CUorFn : nullptr,       // unit
846                          getMDOrNull(Record[15 + Offset]), // templateParams
847                          getMDOrNull(Record[16 + Offset]), // declaration
848                          getMDOrNull(Record[17 + Offset])  // variables
849                          ));
850       MetadataList.assignValue(SP, NextMetadataNo++);
851 
852       // Upgrade sp->function mapping to function->sp mapping.
853       if (HasFn) {
854         if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(CUorFn))
855           if (auto *F = dyn_cast<Function>(CMD->getValue())) {
856             if (F->isMaterializable())
857               // Defer until materialized; unmaterialized functions may not have
858               // metadata.
859               FunctionsWithSPs[F] = SP;
860             else if (!F->empty())
861               F->setSubprogram(SP);
862           }
863       }
864       break;
865     }
866     case bitc::METADATA_LEXICAL_BLOCK: {
867       if (Record.size() != 5)
868         return error("Invalid record");
869 
870       IsDistinct = Record[0];
871       MetadataList.assignValue(
872           GET_OR_DISTINCT(DILexicalBlock,
873                           (Context, getMDOrNull(Record[1]),
874                            getMDOrNull(Record[2]), Record[3], Record[4])),
875           NextMetadataNo++);
876       break;
877     }
878     case bitc::METADATA_LEXICAL_BLOCK_FILE: {
879       if (Record.size() != 4)
880         return error("Invalid record");
881 
882       IsDistinct = Record[0];
883       MetadataList.assignValue(
884           GET_OR_DISTINCT(DILexicalBlockFile,
885                           (Context, getMDOrNull(Record[1]),
886                            getMDOrNull(Record[2]), Record[3])),
887           NextMetadataNo++);
888       break;
889     }
890     case bitc::METADATA_NAMESPACE: {
891       if (Record.size() != 5)
892         return error("Invalid record");
893 
894       IsDistinct = Record[0] & 1;
895       bool ExportSymbols = Record[0] & 2;
896       MetadataList.assignValue(
897           GET_OR_DISTINCT(DINamespace,
898                           (Context, getMDOrNull(Record[1]),
899                            getMDOrNull(Record[2]), getMDString(Record[3]),
900                            Record[4], ExportSymbols)),
901           NextMetadataNo++);
902       break;
903     }
904     case bitc::METADATA_MACRO: {
905       if (Record.size() != 5)
906         return error("Invalid record");
907 
908       IsDistinct = Record[0];
909       MetadataList.assignValue(
910           GET_OR_DISTINCT(DIMacro,
911                           (Context, Record[1], Record[2],
912                            getMDString(Record[3]), getMDString(Record[4]))),
913           NextMetadataNo++);
914       break;
915     }
916     case bitc::METADATA_MACRO_FILE: {
917       if (Record.size() != 5)
918         return error("Invalid record");
919 
920       IsDistinct = Record[0];
921       MetadataList.assignValue(
922           GET_OR_DISTINCT(DIMacroFile,
923                           (Context, Record[1], Record[2],
924                            getMDOrNull(Record[3]), getMDOrNull(Record[4]))),
925           NextMetadataNo++);
926       break;
927     }
928     case bitc::METADATA_TEMPLATE_TYPE: {
929       if (Record.size() != 3)
930         return error("Invalid record");
931 
932       IsDistinct = Record[0];
933       MetadataList.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter,
934                                                (Context, getMDString(Record[1]),
935                                                 getDITypeRefOrNull(Record[2]))),
936                                NextMetadataNo++);
937       break;
938     }
939     case bitc::METADATA_TEMPLATE_VALUE: {
940       if (Record.size() != 5)
941         return error("Invalid record");
942 
943       IsDistinct = Record[0];
944       MetadataList.assignValue(
945           GET_OR_DISTINCT(DITemplateValueParameter,
946                           (Context, Record[1], getMDString(Record[2]),
947                            getDITypeRefOrNull(Record[3]),
948                            getMDOrNull(Record[4]))),
949           NextMetadataNo++);
950       break;
951     }
952     case bitc::METADATA_GLOBAL_VAR: {
953       if (Record.size() < 11 || Record.size() > 12)
954         return error("Invalid record");
955 
956       IsDistinct = Record[0];
957 
958       // Upgrade old metadata, which stored a global variable reference or a
959       // ConstantInt here.
960       Metadata *Expr = getMDOrNull(Record[9]);
961       uint32_t AlignInBits = 0;
962       if (Record.size() > 11) {
963         if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max())
964           return error("Alignment value is too large");
965         AlignInBits = Record[11];
966       }
967       GlobalVariable *Attach = nullptr;
968       if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
969         if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
970           Attach = GV;
971           Expr = nullptr;
972         } else if (auto *CI = dyn_cast<ConstantInt>(CMD->getValue())) {
973           Expr = DIExpression::get(Context,
974                                    {dwarf::DW_OP_constu, CI->getZExtValue(),
975                                     dwarf::DW_OP_stack_value});
976         } else {
977           Expr = nullptr;
978         }
979       }
980 
981       DIGlobalVariable *DGV = GET_OR_DISTINCT(
982           DIGlobalVariable,
983           (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
984            getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
985            getDITypeRefOrNull(Record[6]), Record[7], Record[8], Expr,
986            getMDOrNull(Record[10]), AlignInBits));
987       MetadataList.assignValue(DGV, NextMetadataNo++);
988 
989       if (Attach)
990         Attach->addDebugInfo(DGV);
991 
992       break;
993     }
994     case bitc::METADATA_LOCAL_VAR: {
995       // 10th field is for the obseleted 'inlinedAt:' field.
996       if (Record.size() < 8 || Record.size() > 10)
997         return error("Invalid record");
998 
999       IsDistinct = Record[0] & 1;
1000       bool HasAlignment = Record[0] & 2;
1001       // 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
1002       // DW_TAG_arg_variable, if we have alignment flag encoded it means, that
1003       // this is newer version of record which doesn't have artifical tag.
1004       bool HasTag = !HasAlignment && Record.size() > 8;
1005       DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 + HasTag]);
1006       uint32_t AlignInBits = 0;
1007       if (HasAlignment) {
1008         if (Record[8 + HasTag] > (uint64_t)std::numeric_limits<uint32_t>::max())
1009           return error("Alignment value is too large");
1010         AlignInBits = Record[8 + HasTag];
1011       }
1012       MetadataList.assignValue(
1013           GET_OR_DISTINCT(DILocalVariable,
1014                           (Context, getMDOrNull(Record[1 + HasTag]),
1015                            getMDString(Record[2 + HasTag]),
1016                            getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag],
1017                            getDITypeRefOrNull(Record[5 + HasTag]),
1018                            Record[6 + HasTag], Flags, AlignInBits)),
1019           NextMetadataNo++);
1020       break;
1021     }
1022     case bitc::METADATA_EXPRESSION: {
1023       if (Record.size() < 1)
1024         return error("Invalid record");
1025 
1026       IsDistinct = Record[0] & 1;
1027       bool HasOpFragment = Record[0] & 2;
1028       auto Elts = MutableArrayRef<uint64_t>(Record).slice(1);
1029       if (!HasOpFragment)
1030         if (unsigned N = Elts.size())
1031           if (N >= 3 && Elts[N - 3] == dwarf::DW_OP_bit_piece)
1032             Elts[N - 3] = dwarf::DW_OP_LLVM_fragment;
1033 
1034       MetadataList.assignValue(
1035           GET_OR_DISTINCT(DIExpression,
1036                           (Context, makeArrayRef(Record).slice(1))),
1037           NextMetadataNo++);
1038       break;
1039     }
1040     case bitc::METADATA_OBJC_PROPERTY: {
1041       if (Record.size() != 8)
1042         return error("Invalid record");
1043 
1044       IsDistinct = Record[0];
1045       MetadataList.assignValue(
1046           GET_OR_DISTINCT(DIObjCProperty,
1047                           (Context, getMDString(Record[1]),
1048                            getMDOrNull(Record[2]), Record[3],
1049                            getMDString(Record[4]), getMDString(Record[5]),
1050                            Record[6], getDITypeRefOrNull(Record[7]))),
1051           NextMetadataNo++);
1052       break;
1053     }
1054     case bitc::METADATA_IMPORTED_ENTITY: {
1055       if (Record.size() != 6)
1056         return error("Invalid record");
1057 
1058       IsDistinct = Record[0];
1059       MetadataList.assignValue(
1060           GET_OR_DISTINCT(DIImportedEntity,
1061                           (Context, Record[1], getMDOrNull(Record[2]),
1062                            getDITypeRefOrNull(Record[3]), Record[4],
1063                            getMDString(Record[5]))),
1064           NextMetadataNo++);
1065       break;
1066     }
1067     case bitc::METADATA_STRING_OLD: {
1068       std::string String(Record.begin(), Record.end());
1069 
1070       // Test for upgrading !llvm.loop.
1071       HasSeenOldLoopTags |= mayBeOldLoopAttachmentTag(String);
1072 
1073       Metadata *MD = MDString::get(Context, String);
1074       MetadataList.assignValue(MD, NextMetadataNo++);
1075       break;
1076     }
1077     case bitc::METADATA_STRINGS:
1078       if (Error Err = parseMetadataStrings(Record, Blob, NextMetadataNo))
1079         return Err;
1080       break;
1081     case bitc::METADATA_GLOBAL_DECL_ATTACHMENT: {
1082       if (Record.size() % 2 == 0)
1083         return error("Invalid record");
1084       unsigned ValueID = Record[0];
1085       if (ValueID >= ValueList.size())
1086         return error("Invalid record");
1087       if (auto *GO = dyn_cast<GlobalObject>(ValueList[ValueID]))
1088         if (Error Err = parseGlobalObjectAttachment(
1089                 *GO, ArrayRef<uint64_t>(Record).slice(1)))
1090           return Err;
1091       break;
1092     }
1093     case bitc::METADATA_KIND: {
1094       // Support older bitcode files that had METADATA_KIND records in a
1095       // block with METADATA_BLOCK_ID.
1096       if (Error Err = parseMetadataKindRecord(Record))
1097         return Err;
1098       break;
1099     }
1100     }
1101   }
1102 #undef GET_OR_DISTINCT
1103 }
1104 
1105 Error MetadataLoader::MetadataLoaderImpl::parseMetadataStrings(
1106     ArrayRef<uint64_t> Record, StringRef Blob, unsigned &NextMetadataNo) {
1107   // All the MDStrings in the block are emitted together in a single
1108   // record.  The strings are concatenated and stored in a blob along with
1109   // their sizes.
1110   if (Record.size() != 2)
1111     return error("Invalid record: metadata strings layout");
1112 
1113   unsigned NumStrings = Record[0];
1114   unsigned StringsOffset = Record[1];
1115   if (!NumStrings)
1116     return error("Invalid record: metadata strings with no strings");
1117   if (StringsOffset > Blob.size())
1118     return error("Invalid record: metadata strings corrupt offset");
1119 
1120   StringRef Lengths = Blob.slice(0, StringsOffset);
1121   SimpleBitstreamCursor R(Lengths);
1122 
1123   StringRef Strings = Blob.drop_front(StringsOffset);
1124   do {
1125     if (R.AtEndOfStream())
1126       return error("Invalid record: metadata strings bad length");
1127 
1128     unsigned Size = R.ReadVBR(6);
1129     if (Strings.size() < Size)
1130       return error("Invalid record: metadata strings truncated chars");
1131 
1132     MetadataList.assignValue(MDString::get(Context, Strings.slice(0, Size)),
1133                              NextMetadataNo++);
1134     Strings = Strings.drop_front(Size);
1135   } while (--NumStrings);
1136 
1137   return Error::success();
1138 }
1139 
1140 Error MetadataLoader::MetadataLoaderImpl::parseGlobalObjectAttachment(
1141     GlobalObject &GO, ArrayRef<uint64_t> Record) {
1142   assert(Record.size() % 2 == 0);
1143   for (unsigned I = 0, E = Record.size(); I != E; I += 2) {
1144     auto K = MDKindMap.find(Record[I]);
1145     if (K == MDKindMap.end())
1146       return error("Invalid ID");
1147     MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[I + 1]);
1148     if (!MD)
1149       return error("Invalid metadata attachment");
1150     GO.addMetadata(K->second, *MD);
1151   }
1152   return Error::success();
1153 }
1154 
1155 /// Parse metadata attachments.
1156 Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
1157     Function &F, const SmallVectorImpl<Instruction *> &InstructionList) {
1158   if (Stream.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID))
1159     return error("Invalid record");
1160 
1161   SmallVector<uint64_t, 64> Record;
1162 
1163   while (true) {
1164     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
1165 
1166     switch (Entry.Kind) {
1167     case BitstreamEntry::SubBlock: // Handled for us already.
1168     case BitstreamEntry::Error:
1169       return error("Malformed block");
1170     case BitstreamEntry::EndBlock:
1171       return Error::success();
1172     case BitstreamEntry::Record:
1173       // The interesting case.
1174       break;
1175     }
1176 
1177     // Read a metadata attachment record.
1178     Record.clear();
1179     switch (Stream.readRecord(Entry.ID, Record)) {
1180     default: // Default behavior: ignore.
1181       break;
1182     case bitc::METADATA_ATTACHMENT: {
1183       unsigned RecordLength = Record.size();
1184       if (Record.empty())
1185         return error("Invalid record");
1186       if (RecordLength % 2 == 0) {
1187         // A function attachment.
1188         if (Error Err = parseGlobalObjectAttachment(F, Record))
1189           return Err;
1190         continue;
1191       }
1192 
1193       // An instruction attachment.
1194       Instruction *Inst = InstructionList[Record[0]];
1195       for (unsigned i = 1; i != RecordLength; i = i + 2) {
1196         unsigned Kind = Record[i];
1197         DenseMap<unsigned, unsigned>::iterator I = MDKindMap.find(Kind);
1198         if (I == MDKindMap.end())
1199           return error("Invalid ID");
1200         if (I->second == LLVMContext::MD_tbaa && StripTBAA)
1201           continue;
1202 
1203         Metadata *Node = MetadataList.getMetadataFwdRef(Record[i + 1]);
1204         if (isa<LocalAsMetadata>(Node))
1205           // Drop the attachment.  This used to be legal, but there's no
1206           // upgrade path.
1207           break;
1208         MDNode *MD = dyn_cast_or_null<MDNode>(Node);
1209         if (!MD)
1210           return error("Invalid metadata attachment");
1211 
1212         if (HasSeenOldLoopTags && I->second == LLVMContext::MD_loop)
1213           MD = upgradeInstructionLoopAttachment(*MD);
1214 
1215         if (I->second == LLVMContext::MD_tbaa) {
1216           assert(!MD->isTemporary() && "should load MDs before attachments");
1217           MD = UpgradeTBAANode(*MD);
1218         }
1219         Inst->setMetadata(I->second, MD);
1220       }
1221       break;
1222     }
1223     }
1224   }
1225 }
1226 
1227 /// Parse a single METADATA_KIND record, inserting result in MDKindMap.
1228 Error MetadataLoader::MetadataLoaderImpl::parseMetadataKindRecord(
1229     SmallVectorImpl<uint64_t> &Record) {
1230   if (Record.size() < 2)
1231     return error("Invalid record");
1232 
1233   unsigned Kind = Record[0];
1234   SmallString<8> Name(Record.begin() + 1, Record.end());
1235 
1236   unsigned NewKind = TheModule.getMDKindID(Name.str());
1237   if (!MDKindMap.insert(std::make_pair(Kind, NewKind)).second)
1238     return error("Conflicting METADATA_KIND records");
1239   return Error::success();
1240 }
1241 
1242 /// Parse the metadata kinds out of the METADATA_KIND_BLOCK.
1243 Error MetadataLoader::MetadataLoaderImpl::parseMetadataKinds() {
1244   if (Stream.EnterSubBlock(bitc::METADATA_KIND_BLOCK_ID))
1245     return error("Invalid record");
1246 
1247   SmallVector<uint64_t, 64> Record;
1248 
1249   // Read all the records.
1250   while (true) {
1251     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
1252 
1253     switch (Entry.Kind) {
1254     case BitstreamEntry::SubBlock: // Handled for us already.
1255     case BitstreamEntry::Error:
1256       return error("Malformed block");
1257     case BitstreamEntry::EndBlock:
1258       return Error::success();
1259     case BitstreamEntry::Record:
1260       // The interesting case.
1261       break;
1262     }
1263 
1264     // Read a record.
1265     Record.clear();
1266     unsigned Code = Stream.readRecord(Entry.ID, Record);
1267     switch (Code) {
1268     default: // Default behavior: ignore.
1269       break;
1270     case bitc::METADATA_KIND: {
1271       if (Error Err = parseMetadataKindRecord(Record))
1272         return Err;
1273       break;
1274     }
1275     }
1276   }
1277 }
1278 
1279 MetadataLoader &MetadataLoader::operator=(MetadataLoader &&RHS) {
1280   Pimpl = std::move(RHS.Pimpl);
1281   return *this;
1282 }
1283 MetadataLoader::MetadataLoader(MetadataLoader &&RHS)
1284     : Pimpl(std::move(RHS.Pimpl)) {}
1285 
1286 MetadataLoader::~MetadataLoader() = default;
1287 MetadataLoader::MetadataLoader(BitstreamCursor &Stream, Module &TheModule,
1288                                BitcodeReaderValueList &ValueList,
1289                                std::function<Type *(unsigned)> getTypeByID)
1290     : Pimpl(llvm::make_unique<MetadataLoaderImpl>(Stream, TheModule, ValueList,
1291                                                   getTypeByID)) {}
1292 
1293 Error MetadataLoader::parseMetadata(bool ModuleLevel) {
1294   return Pimpl->parseMetadata(ModuleLevel);
1295 }
1296 
1297 bool MetadataLoader::hasFwdRefs() const { return Pimpl->hasFwdRefs(); }
1298 
1299 /// Return the given metadata, creating a replaceable forward reference if
1300 /// necessary.
1301 Metadata *MetadataLoader::getMetadataFwdRef(unsigned Idx) {
1302   return Pimpl->getMetadataFwdRef(Idx);
1303 }
1304 
1305 MDNode *MetadataLoader::getMDNodeFwdRefOrNull(unsigned Idx) {
1306   return Pimpl->getMDNodeFwdRefOrNull(Idx);
1307 }
1308 
1309 DISubprogram *MetadataLoader::lookupSubprogramForFunction(Function *F) {
1310   return Pimpl->lookupSubprogramForFunction(F);
1311 }
1312 
1313 Error MetadataLoader::parseMetadataAttachment(
1314     Function &F, const SmallVectorImpl<Instruction *> &InstructionList) {
1315   return Pimpl->parseMetadataAttachment(F, InstructionList);
1316 }
1317 
1318 Error MetadataLoader::parseMetadataKinds() {
1319   return Pimpl->parseMetadataKinds();
1320 }
1321 
1322 void MetadataLoader::setStripTBAA(bool StripTBAA) {
1323   return Pimpl->setStripTBAA(StripTBAA);
1324 }
1325 
1326 bool MetadataLoader::isStrippingTBAA() { return Pimpl->isStrippingTBAA(); }
1327 
1328 unsigned MetadataLoader::size() const { return Pimpl->size(); }
1329 void MetadataLoader::shrinkTo(unsigned N) { return Pimpl->shrinkTo(N); }
1330