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