1 //===- MetadataLoader.cpp - Internal BitcodeReader implementation ---------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "MetadataLoader.h"
11 #include "ValueList.h"
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/DenseSet.h"
18 #include "llvm/ADT/None.h"
19 #include "llvm/ADT/STLExtras.h"
20 #include "llvm/ADT/SmallString.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/Statistic.h"
23 #include "llvm/ADT/StringRef.h"
24 #include "llvm/ADT/Twine.h"
25 #include "llvm/Bitcode/BitcodeReader.h"
26 #include "llvm/Bitcode/BitstreamReader.h"
27 #include "llvm/Bitcode/LLVMBitCodes.h"
28 #include "llvm/IR/Argument.h"
29 #include "llvm/IR/Attributes.h"
30 #include "llvm/IR/AutoUpgrade.h"
31 #include "llvm/IR/BasicBlock.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/DiagnosticPrinter.h"
41 #include "llvm/IR/Function.h"
42 #include "llvm/IR/GVMaterializer.h"
43 #include "llvm/IR/GlobalAlias.h"
44 #include "llvm/IR/GlobalIFunc.h"
45 #include "llvm/IR/GlobalIndirectSymbol.h"
46 #include "llvm/IR/GlobalObject.h"
47 #include "llvm/IR/GlobalValue.h"
48 #include "llvm/IR/GlobalVariable.h"
49 #include "llvm/IR/InlineAsm.h"
50 #include "llvm/IR/InstrTypes.h"
51 #include "llvm/IR/Instruction.h"
52 #include "llvm/IR/Instructions.h"
53 #include "llvm/IR/IntrinsicInst.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/TrackingMDRef.h"
60 #include "llvm/IR/Type.h"
61 #include "llvm/IR/ValueHandle.h"
62 #include "llvm/Support/AtomicOrdering.h"
63 #include "llvm/Support/Casting.h"
64 #include "llvm/Support/CommandLine.h"
65 #include "llvm/Support/Compiler.h"
66 #include "llvm/Support/Debug.h"
67 #include "llvm/Support/Error.h"
68 #include "llvm/Support/ErrorHandling.h"
69 #include "llvm/Support/ManagedStatic.h"
70 #include "llvm/Support/MemoryBuffer.h"
71 #include "llvm/Support/raw_ostream.h"
81 #include <system_error>
88 #define DEBUG_TYPE "bitcode-reader"
90 STATISTIC(NumMDStringLoaded
, "Number of MDStrings loaded");
91 STATISTIC(NumMDNodeTemporary
, "Number of MDNode::Temporary created");
92 STATISTIC(NumMDRecordLoaded
, "Number of Metadata records loaded");
94 /// Flag whether we need to import full type definitions for ThinLTO.
95 /// Currently needed for Darwin and LLDB.
96 static cl::opt
<bool> ImportFullTypeDefinitions(
97 "import-full-type-definitions", cl::init(false), cl::Hidden
,
98 cl::desc("Import full type definitions for ThinLTO."));
100 static cl::opt
<bool> DisableLazyLoading(
101 "disable-ondemand-mds-loading", cl::init(false), cl::Hidden
,
102 cl::desc("Force disable the lazy-loading on-demand of metadata when "
103 "loading bitcode for importing."));
107 static int64_t unrotateSign(uint64_t U
) { return U
& 1 ? ~(U
>> 1) : U
>> 1; }
109 class BitcodeReaderMetadataList
{
110 /// Array of metadata references.
112 /// Don't use std::vector here. Some versions of libc++ copy (instead of
113 /// move) on resize, and TrackingMDRef is very expensive to copy.
114 SmallVector
<TrackingMDRef
, 1> MetadataPtrs
;
116 /// The set of indices in MetadataPtrs above of forward references that were
118 SmallDenseSet
<unsigned, 1> ForwardReference
;
120 /// The set of indices in MetadataPtrs above of Metadata that need to be
122 SmallDenseSet
<unsigned, 1> UnresolvedNodes
;
124 /// Structures for resolving old type refs.
126 SmallDenseMap
<MDString
*, TempMDTuple
, 1> Unknown
;
127 SmallDenseMap
<MDString
*, DICompositeType
*, 1> Final
;
128 SmallDenseMap
<MDString
*, DICompositeType
*, 1> FwdDecls
;
129 SmallVector
<std::pair
<TrackingMDRef
, TempMDTuple
>, 1> Arrays
;
132 LLVMContext
&Context
;
135 BitcodeReaderMetadataList(LLVMContext
&C
) : Context(C
) {}
137 // vector compatibility methods
138 unsigned size() const { return MetadataPtrs
.size(); }
139 void resize(unsigned N
) { MetadataPtrs
.resize(N
); }
140 void push_back(Metadata
*MD
) { MetadataPtrs
.emplace_back(MD
); }
141 void clear() { MetadataPtrs
.clear(); }
142 Metadata
*back() const { return MetadataPtrs
.back(); }
143 void pop_back() { MetadataPtrs
.pop_back(); }
144 bool empty() const { return MetadataPtrs
.empty(); }
146 Metadata
*operator[](unsigned i
) const {
147 assert(i
< MetadataPtrs
.size());
148 return MetadataPtrs
[i
];
151 Metadata
*lookup(unsigned I
) const {
152 if (I
< MetadataPtrs
.size())
153 return MetadataPtrs
[I
];
157 void shrinkTo(unsigned N
) {
158 assert(N
<= size() && "Invalid shrinkTo request!");
159 assert(ForwardReference
.empty() && "Unexpected forward refs");
160 assert(UnresolvedNodes
.empty() && "Unexpected unresolved node");
161 MetadataPtrs
.resize(N
);
164 /// Return the given metadata, creating a replaceable forward reference if
166 Metadata
*getMetadataFwdRef(unsigned Idx
);
168 /// Return the given metadata only if it is fully resolved.
170 /// Gives the same result as \a lookup(), unless \a MDNode::isResolved()
171 /// would give \c false.
172 Metadata
*getMetadataIfResolved(unsigned Idx
);
174 MDNode
*getMDNodeFwdRefOrNull(unsigned Idx
);
175 void assignValue(Metadata
*MD
, unsigned Idx
);
176 void tryToResolveCycles();
177 bool hasFwdRefs() const { return !ForwardReference
.empty(); }
178 int getNextFwdRef() {
179 assert(hasFwdRefs());
180 return *ForwardReference
.begin();
183 /// Upgrade a type that had an MDString reference.
184 void addTypeRef(MDString
&UUID
, DICompositeType
&CT
);
186 /// Upgrade a type that had an MDString reference.
187 Metadata
*upgradeTypeRef(Metadata
*MaybeUUID
);
189 /// Upgrade a type ref array that may have MDString references.
190 Metadata
*upgradeTypeRefArray(Metadata
*MaybeTuple
);
193 Metadata
*resolveTypeRefArray(Metadata
*MaybeTuple
);
196 void BitcodeReaderMetadataList::assignValue(Metadata
*MD
, unsigned Idx
) {
197 if (auto *MDN
= dyn_cast
<MDNode
>(MD
))
198 if (!MDN
->isResolved())
199 UnresolvedNodes
.insert(Idx
);
209 TrackingMDRef
&OldMD
= MetadataPtrs
[Idx
];
215 // If there was a forward reference to this value, replace it.
216 TempMDTuple
PrevMD(cast
<MDTuple
>(OldMD
.get()));
217 PrevMD
->replaceAllUsesWith(MD
);
218 ForwardReference
.erase(Idx
);
221 Metadata
*BitcodeReaderMetadataList::getMetadataFwdRef(unsigned Idx
) {
225 if (Metadata
*MD
= MetadataPtrs
[Idx
])
228 // Track forward refs to be resolved later.
229 ForwardReference
.insert(Idx
);
231 // Create and return a placeholder, which will later be RAUW'd.
232 ++NumMDNodeTemporary
;
233 Metadata
*MD
= MDNode::getTemporary(Context
, None
).release();
234 MetadataPtrs
[Idx
].reset(MD
);
238 Metadata
*BitcodeReaderMetadataList::getMetadataIfResolved(unsigned Idx
) {
239 Metadata
*MD
= lookup(Idx
);
240 if (auto *N
= dyn_cast_or_null
<MDNode
>(MD
))
241 if (!N
->isResolved())
246 MDNode
*BitcodeReaderMetadataList::getMDNodeFwdRefOrNull(unsigned Idx
) {
247 return dyn_cast_or_null
<MDNode
>(getMetadataFwdRef(Idx
));
250 void BitcodeReaderMetadataList::tryToResolveCycles() {
251 if (!ForwardReference
.empty())
252 // Still forward references... can't resolve cycles.
255 // Give up on finding a full definition for any forward decls that remain.
256 for (const auto &Ref
: OldTypeRefs
.FwdDecls
)
257 OldTypeRefs
.Final
.insert(Ref
);
258 OldTypeRefs
.FwdDecls
.clear();
260 // Upgrade from old type ref arrays. In strange cases, this could add to
261 // OldTypeRefs.Unknown.
262 for (const auto &Array
: OldTypeRefs
.Arrays
)
263 Array
.second
->replaceAllUsesWith(resolveTypeRefArray(Array
.first
.get()));
264 OldTypeRefs
.Arrays
.clear();
266 // Replace old string-based type refs with the resolved node, if possible.
267 // If we haven't seen the node, leave it to the verifier to complain about
268 // the invalid string reference.
269 for (const auto &Ref
: OldTypeRefs
.Unknown
) {
270 if (DICompositeType
*CT
= OldTypeRefs
.Final
.lookup(Ref
.first
))
271 Ref
.second
->replaceAllUsesWith(CT
);
273 Ref
.second
->replaceAllUsesWith(Ref
.first
);
275 OldTypeRefs
.Unknown
.clear();
277 if (UnresolvedNodes
.empty())
281 // Resolve any cycles.
282 for (unsigned I
: UnresolvedNodes
) {
283 auto &MD
= MetadataPtrs
[I
];
284 auto *N
= dyn_cast_or_null
<MDNode
>(MD
);
288 assert(!N
->isTemporary() && "Unexpected forward reference");
292 // Make sure we return early again until there's another unresolved ref.
293 UnresolvedNodes
.clear();
296 void BitcodeReaderMetadataList::addTypeRef(MDString
&UUID
,
297 DICompositeType
&CT
) {
298 assert(CT
.getRawIdentifier() == &UUID
&& "Mismatched UUID");
299 if (CT
.isForwardDecl())
300 OldTypeRefs
.FwdDecls
.insert(std::make_pair(&UUID
, &CT
));
302 OldTypeRefs
.Final
.insert(std::make_pair(&UUID
, &CT
));
305 Metadata
*BitcodeReaderMetadataList::upgradeTypeRef(Metadata
*MaybeUUID
) {
306 auto *UUID
= dyn_cast_or_null
<MDString
>(MaybeUUID
);
307 if (LLVM_LIKELY(!UUID
))
310 if (auto *CT
= OldTypeRefs
.Final
.lookup(UUID
))
313 auto &Ref
= OldTypeRefs
.Unknown
[UUID
];
315 Ref
= MDNode::getTemporary(Context
, None
);
319 Metadata
*BitcodeReaderMetadataList::upgradeTypeRefArray(Metadata
*MaybeTuple
) {
320 auto *Tuple
= dyn_cast_or_null
<MDTuple
>(MaybeTuple
);
321 if (!Tuple
|| Tuple
->isDistinct())
324 // Look through the array immediately if possible.
325 if (!Tuple
->isTemporary())
326 return resolveTypeRefArray(Tuple
);
328 // Create and return a placeholder to use for now. Eventually
329 // resolveTypeRefArrays() will be resolve this forward reference.
330 OldTypeRefs
.Arrays
.emplace_back(
331 std::piecewise_construct
, std::forward_as_tuple(Tuple
),
332 std::forward_as_tuple(MDTuple::getTemporary(Context
, None
)));
333 return OldTypeRefs
.Arrays
.back().second
.get();
336 Metadata
*BitcodeReaderMetadataList::resolveTypeRefArray(Metadata
*MaybeTuple
) {
337 auto *Tuple
= dyn_cast_or_null
<MDTuple
>(MaybeTuple
);
338 if (!Tuple
|| Tuple
->isDistinct())
341 // Look through the DITypeRefArray, upgrading each DITypeRef.
342 SmallVector
<Metadata
*, 32> Ops
;
343 Ops
.reserve(Tuple
->getNumOperands());
344 for (Metadata
*MD
: Tuple
->operands())
345 Ops
.push_back(upgradeTypeRef(MD
));
347 return MDTuple::get(Context
, Ops
);
352 class PlaceholderQueue
{
353 // Placeholders would thrash around when moved, so store in a std::deque
354 // instead of some sort of vector.
355 std::deque
<DistinctMDOperandPlaceholder
> PHs
;
358 ~PlaceholderQueue() {
359 assert(empty() && "PlaceholderQueue hasn't been flushed before being destroyed");
361 bool empty() { return PHs
.empty(); }
362 DistinctMDOperandPlaceholder
&getPlaceholderOp(unsigned ID
);
363 void flush(BitcodeReaderMetadataList
&MetadataList
);
365 /// Return the list of temporaries nodes in the queue, these need to be
366 /// loaded before we can flush the queue.
367 void getTemporaries(BitcodeReaderMetadataList
&MetadataList
,
368 DenseSet
<unsigned> &Temporaries
) {
369 for (auto &PH
: PHs
) {
370 auto ID
= PH
.getID();
371 auto *MD
= MetadataList
.lookup(ID
);
373 Temporaries
.insert(ID
);
376 auto *N
= dyn_cast_or_null
<MDNode
>(MD
);
377 if (N
&& N
->isTemporary())
378 Temporaries
.insert(ID
);
383 } // end anonymous namespace
385 DistinctMDOperandPlaceholder
&PlaceholderQueue::getPlaceholderOp(unsigned ID
) {
386 PHs
.emplace_back(ID
);
390 void PlaceholderQueue::flush(BitcodeReaderMetadataList
&MetadataList
) {
391 while (!PHs
.empty()) {
392 auto *MD
= MetadataList
.lookup(PHs
.front().getID());
393 assert(MD
&& "Flushing placeholder on unassigned MD");
395 if (auto *MDN
= dyn_cast
<MDNode
>(MD
))
396 assert(MDN
->isResolved() &&
397 "Flushing Placeholder while cycles aren't resolved");
399 PHs
.front().replaceUseWith(MD
);
404 } // anonynous namespace
406 static Error
error(const Twine
&Message
) {
407 return make_error
<StringError
>(
408 Message
, make_error_code(BitcodeError::CorruptedBitcode
));
411 class MetadataLoader::MetadataLoaderImpl
{
412 BitcodeReaderMetadataList MetadataList
;
413 BitcodeReaderValueList
&ValueList
;
414 BitstreamCursor
&Stream
;
415 LLVMContext
&Context
;
417 std::function
<Type
*(unsigned)> getTypeByID
;
419 /// Cursor associated with the lazy-loading of Metadata. This is the easy way
420 /// to keep around the right "context" (Abbrev list) to be able to jump in
421 /// the middle of the metadata block and load any record.
422 BitstreamCursor IndexCursor
;
424 /// Index that keeps track of MDString values.
425 std::vector
<StringRef
> MDStringRef
;
427 /// On-demand loading of a single MDString. Requires the index above to be
429 MDString
*lazyLoadOneMDString(unsigned Idx
);
431 /// Index that keeps track of where to find a metadata record in the stream.
432 std::vector
<uint64_t> GlobalMetadataBitPosIndex
;
434 /// Populate the index above to enable lazily loading of metadata, and load
435 /// the named metadata as well as the transitively referenced global
437 Expected
<bool> lazyLoadModuleMetadataBlock();
439 /// On-demand loading of a single metadata. Requires the index above to be
441 void lazyLoadOneMetadata(unsigned Idx
, PlaceholderQueue
&Placeholders
);
443 // Keep mapping of seens pair of old-style CU <-> SP, and update pointers to
444 // point from SP to CU after a block is completly parsed.
445 std::vector
<std::pair
<DICompileUnit
*, Metadata
*>> CUSubprograms
;
447 /// Functions that need to be matched with subprograms when upgrading old
449 SmallDenseMap
<Function
*, DISubprogram
*, 16> FunctionsWithSPs
;
451 // Map the bitcode's custom MDKind ID to the Module's MDKind ID.
452 DenseMap
<unsigned, unsigned> MDKindMap
;
454 bool StripTBAA
= false;
455 bool HasSeenOldLoopTags
= false;
456 bool NeedUpgradeToDIGlobalVariableExpression
= false;
457 bool NeedDeclareExpressionUpgrade
= false;
459 /// True if metadata is being parsed for a module being ThinLTO imported.
460 bool IsImporting
= false;
462 Error
parseOneMetadata(SmallVectorImpl
<uint64_t> &Record
, unsigned Code
,
463 PlaceholderQueue
&Placeholders
, StringRef Blob
,
464 unsigned &NextMetadataNo
);
465 Error
parseMetadataStrings(ArrayRef
<uint64_t> Record
, StringRef Blob
,
466 function_ref
<void(StringRef
)> CallBack
);
467 Error
parseGlobalObjectAttachment(GlobalObject
&GO
,
468 ArrayRef
<uint64_t> Record
);
469 Error
parseMetadataKindRecord(SmallVectorImpl
<uint64_t> &Record
);
471 void resolveForwardRefsAndPlaceholders(PlaceholderQueue
&Placeholders
);
473 /// Upgrade old-style CU <-> SP pointers to point from SP to CU.
474 void upgradeCUSubprograms() {
475 for (auto CU_SP
: CUSubprograms
)
476 if (auto *SPs
= dyn_cast_or_null
<MDTuple
>(CU_SP
.second
))
477 for (auto &Op
: SPs
->operands())
478 if (auto *SP
= dyn_cast_or_null
<DISubprogram
>(Op
))
479 SP
->replaceUnit(CU_SP
.first
);
480 CUSubprograms
.clear();
483 /// Upgrade old-style bare DIGlobalVariables to DIGlobalVariableExpressions.
484 void upgradeCUVariables() {
485 if (!NeedUpgradeToDIGlobalVariableExpression
)
488 // Upgrade list of variables attached to the CUs.
489 if (NamedMDNode
*CUNodes
= TheModule
.getNamedMetadata("llvm.dbg.cu"))
490 for (unsigned I
= 0, E
= CUNodes
->getNumOperands(); I
!= E
; ++I
) {
491 auto *CU
= cast
<DICompileUnit
>(CUNodes
->getOperand(I
));
492 if (auto *GVs
= dyn_cast_or_null
<MDTuple
>(CU
->getRawGlobalVariables()))
493 for (unsigned I
= 0; I
< GVs
->getNumOperands(); I
++)
495 dyn_cast_or_null
<DIGlobalVariable
>(GVs
->getOperand(I
))) {
496 auto *DGVE
= DIGlobalVariableExpression::getDistinct(
497 Context
, GV
, DIExpression::get(Context
, {}));
498 GVs
->replaceOperandWith(I
, DGVE
);
502 // Upgrade variables attached to globals.
503 for (auto &GV
: TheModule
.globals()) {
504 SmallVector
<MDNode
*, 1> MDs
;
505 GV
.getMetadata(LLVMContext::MD_dbg
, MDs
);
506 GV
.eraseMetadata(LLVMContext::MD_dbg
);
508 if (auto *DGV
= dyn_cast_or_null
<DIGlobalVariable
>(MD
)) {
509 auto *DGVE
= DIGlobalVariableExpression::getDistinct(
510 Context
, DGV
, DIExpression::get(Context
, {}));
511 GV
.addMetadata(LLVMContext::MD_dbg
, *DGVE
);
513 GV
.addMetadata(LLVMContext::MD_dbg
, *MD
);
517 /// Remove a leading DW_OP_deref from DIExpressions in a dbg.declare that
518 /// describes a function argument.
519 void upgradeDeclareExpressions(Function
&F
) {
520 if (!NeedDeclareExpressionUpgrade
)
525 if (auto *DDI
= dyn_cast
<DbgDeclareInst
>(&I
))
526 if (auto *DIExpr
= DDI
->getExpression())
527 if (DIExpr
->startsWithDeref() &&
528 dyn_cast_or_null
<Argument
>(DDI
->getAddress())) {
529 SmallVector
<uint64_t, 8> Ops
;
530 Ops
.append(std::next(DIExpr
->elements_begin()),
531 DIExpr
->elements_end());
532 auto *E
= DIExpression::get(Context
, Ops
);
533 DDI
->setOperand(2, MetadataAsValue::get(Context
, E
));
537 /// Upgrade the expression from previous versions.
538 Error
upgradeDIExpression(uint64_t FromVersion
,
539 MutableArrayRef
<uint64_t> &Expr
,
540 SmallVectorImpl
<uint64_t> &Buffer
) {
541 auto N
= Expr
.size();
542 switch (FromVersion
) {
544 return error("Invalid record");
546 if (N
>= 3 && Expr
[N
- 3] == dwarf::DW_OP_bit_piece
)
547 Expr
[N
- 3] = dwarf::DW_OP_LLVM_fragment
;
550 // Move DW_OP_deref to the end.
551 if (N
&& Expr
[0] == dwarf::DW_OP_deref
) {
552 auto End
= Expr
.end();
553 if (Expr
.size() >= 3 &&
554 *std::prev(End
, 3) == dwarf::DW_OP_LLVM_fragment
)
555 End
= std::prev(End
, 3);
556 std::move(std::next(Expr
.begin()), End
, Expr
.begin());
557 *std::prev(End
) = dwarf::DW_OP_deref
;
559 NeedDeclareExpressionUpgrade
= true;
562 // Change DW_OP_plus to DW_OP_plus_uconst.
563 // Change DW_OP_minus to DW_OP_uconst, DW_OP_minus
564 auto SubExpr
= ArrayRef
<uint64_t>(Expr
);
565 while (!SubExpr
.empty()) {
566 // Skip past other operators with their operands
567 // for this version of the IR, obtained from
568 // from historic DIExpression::ExprOperand::getSize().
570 switch (SubExpr
.front()) {
574 case dwarf::DW_OP_constu
:
575 case dwarf::DW_OP_minus
:
576 case dwarf::DW_OP_plus
:
579 case dwarf::DW_OP_LLVM_fragment
:
584 // If the expression is malformed, make sure we don't
585 // copy more elements than we should.
586 HistoricSize
= std::min(SubExpr
.size(), HistoricSize
);
587 ArrayRef
<uint64_t> Args
= SubExpr
.slice(1, HistoricSize
-1);
589 switch (SubExpr
.front()) {
590 case dwarf::DW_OP_plus
:
591 Buffer
.push_back(dwarf::DW_OP_plus_uconst
);
592 Buffer
.append(Args
.begin(), Args
.end());
594 case dwarf::DW_OP_minus
:
595 Buffer
.push_back(dwarf::DW_OP_constu
);
596 Buffer
.append(Args
.begin(), Args
.end());
597 Buffer
.push_back(dwarf::DW_OP_minus
);
600 Buffer
.push_back(*SubExpr
.begin());
601 Buffer
.append(Args
.begin(), Args
.end());
605 // Continue with remaining elements.
606 SubExpr
= SubExpr
.slice(HistoricSize
);
608 Expr
= MutableArrayRef
<uint64_t>(Buffer
);
616 return Error::success();
619 void upgradeDebugInfo() {
620 upgradeCUSubprograms();
621 upgradeCUVariables();
625 MetadataLoaderImpl(BitstreamCursor
&Stream
, Module
&TheModule
,
626 BitcodeReaderValueList
&ValueList
,
627 std::function
<Type
*(unsigned)> getTypeByID
,
629 : MetadataList(TheModule
.getContext()), ValueList(ValueList
),
630 Stream(Stream
), Context(TheModule
.getContext()), TheModule(TheModule
),
631 getTypeByID(std::move(getTypeByID
)), IsImporting(IsImporting
) {}
633 Error
parseMetadata(bool ModuleLevel
);
635 bool hasFwdRefs() const { return MetadataList
.hasFwdRefs(); }
637 Metadata
*getMetadataFwdRefOrLoad(unsigned ID
) {
638 if (ID
< MDStringRef
.size())
639 return lazyLoadOneMDString(ID
);
640 if (auto *MD
= MetadataList
.lookup(ID
))
642 // If lazy-loading is enabled, we try recursively to load the operand
643 // instead of creating a temporary.
644 if (ID
< (MDStringRef
.size() + GlobalMetadataBitPosIndex
.size())) {
645 PlaceholderQueue Placeholders
;
646 lazyLoadOneMetadata(ID
, Placeholders
);
647 resolveForwardRefsAndPlaceholders(Placeholders
);
648 return MetadataList
.lookup(ID
);
650 return MetadataList
.getMetadataFwdRef(ID
);
653 MDNode
*getMDNodeFwdRefOrNull(unsigned Idx
) {
654 return MetadataList
.getMDNodeFwdRefOrNull(Idx
);
657 DISubprogram
*lookupSubprogramForFunction(Function
*F
) {
658 return FunctionsWithSPs
.lookup(F
);
661 bool hasSeenOldLoopTags() { return HasSeenOldLoopTags
; }
663 Error
parseMetadataAttachment(
664 Function
&F
, const SmallVectorImpl
<Instruction
*> &InstructionList
);
666 Error
parseMetadataKinds();
668 void setStripTBAA(bool Value
) { StripTBAA
= Value
; }
669 bool isStrippingTBAA() { return StripTBAA
; }
671 unsigned size() const { return MetadataList
.size(); }
672 void shrinkTo(unsigned N
) { MetadataList
.shrinkTo(N
); }
673 void upgradeDebugIntrinsics(Function
&F
) { upgradeDeclareExpressions(F
); }
677 MetadataLoader::MetadataLoaderImpl::lazyLoadModuleMetadataBlock() {
678 IndexCursor
= Stream
;
679 SmallVector
<uint64_t, 64> Record
;
680 // Get the abbrevs, and preload record positions to make them lazy-loadable.
682 BitstreamEntry Entry
= IndexCursor
.advanceSkippingSubblocks(
683 BitstreamCursor::AF_DontPopBlockAtEnd
);
684 switch (Entry
.Kind
) {
685 case BitstreamEntry::SubBlock
: // Handled for us already.
686 case BitstreamEntry::Error
:
687 return error("Malformed block");
688 case BitstreamEntry::EndBlock
: {
691 case BitstreamEntry::Record
: {
692 // The interesting case.
694 uint64_t CurrentPos
= IndexCursor
.GetCurrentBitNo();
695 auto Code
= IndexCursor
.skipRecord(Entry
.ID
);
697 case bitc::METADATA_STRINGS
: {
698 // Rewind and parse the strings.
699 IndexCursor
.JumpToBit(CurrentPos
);
702 IndexCursor
.readRecord(Entry
.ID
, Record
, &Blob
);
703 unsigned NumStrings
= Record
[0];
704 MDStringRef
.reserve(NumStrings
);
705 auto IndexNextMDString
= [&](StringRef Str
) {
706 MDStringRef
.push_back(Str
);
708 if (auto Err
= parseMetadataStrings(Record
, Blob
, IndexNextMDString
))
709 return std::move(Err
);
712 case bitc::METADATA_INDEX_OFFSET
: {
713 // This is the offset to the index, when we see this we skip all the
714 // records and load only an index to these.
715 IndexCursor
.JumpToBit(CurrentPos
);
717 IndexCursor
.readRecord(Entry
.ID
, Record
);
718 if (Record
.size() != 2)
719 return error("Invalid record");
720 auto Offset
= Record
[0] + (Record
[1] << 32);
721 auto BeginPos
= IndexCursor
.GetCurrentBitNo();
722 IndexCursor
.JumpToBit(BeginPos
+ Offset
);
723 Entry
= IndexCursor
.advanceSkippingSubblocks(
724 BitstreamCursor::AF_DontPopBlockAtEnd
);
725 assert(Entry
.Kind
== BitstreamEntry::Record
&&
726 "Corrupted bitcode: Expected `Record` when trying to find the "
729 auto Code
= IndexCursor
.readRecord(Entry
.ID
, Record
);
731 assert(Code
== bitc::METADATA_INDEX
&& "Corrupted bitcode: Expected "
732 "`METADATA_INDEX` when trying "
733 "to find the Metadata index");
736 auto CurrentValue
= BeginPos
;
737 GlobalMetadataBitPosIndex
.reserve(Record
.size());
738 for (auto &Elt
: Record
) {
740 GlobalMetadataBitPosIndex
.push_back(CurrentValue
);
744 case bitc::METADATA_INDEX
:
745 // We don't expect to get there, the Index is loaded when we encounter
747 return error("Corrupted Metadata block");
748 case bitc::METADATA_NAME
: {
749 // Named metadata need to be materialized now and aren't deferred.
750 IndexCursor
.JumpToBit(CurrentPos
);
752 unsigned Code
= IndexCursor
.readRecord(Entry
.ID
, Record
);
753 assert(Code
== bitc::METADATA_NAME
);
755 // Read name of the named metadata.
756 SmallString
<8> Name(Record
.begin(), Record
.end());
757 Code
= IndexCursor
.ReadCode();
759 // Named Metadata comes in two parts, we expect the name to be followed
762 unsigned NextBitCode
= IndexCursor
.readRecord(Code
, Record
);
763 assert(NextBitCode
== bitc::METADATA_NAMED_NODE
);
766 // Read named metadata elements.
767 unsigned Size
= Record
.size();
768 NamedMDNode
*NMD
= TheModule
.getOrInsertNamedMetadata(Name
);
769 for (unsigned i
= 0; i
!= Size
; ++i
) {
770 // FIXME: We could use a placeholder here, however NamedMDNode are
771 // taking MDNode as operand and not using the Metadata infrastructure.
772 // It is acknowledged by 'TODO: Inherit from Metadata' in the
773 // NamedMDNode class definition.
774 MDNode
*MD
= MetadataList
.getMDNodeFwdRefOrNull(Record
[i
]);
775 assert(MD
&& "Invalid record");
780 case bitc::METADATA_GLOBAL_DECL_ATTACHMENT
: {
781 // FIXME: we need to do this early because we don't materialize global
783 IndexCursor
.JumpToBit(CurrentPos
);
785 IndexCursor
.readRecord(Entry
.ID
, Record
);
786 if (Record
.size() % 2 == 0)
787 return error("Invalid record");
788 unsigned ValueID
= Record
[0];
789 if (ValueID
>= ValueList
.size())
790 return error("Invalid record");
791 if (auto *GO
= dyn_cast
<GlobalObject
>(ValueList
[ValueID
]))
792 if (Error Err
= parseGlobalObjectAttachment(
793 *GO
, ArrayRef
<uint64_t>(Record
).slice(1)))
794 return std::move(Err
);
797 case bitc::METADATA_KIND
:
798 case bitc::METADATA_STRING_OLD
:
799 case bitc::METADATA_OLD_FN_NODE
:
800 case bitc::METADATA_OLD_NODE
:
801 case bitc::METADATA_VALUE
:
802 case bitc::METADATA_DISTINCT_NODE
:
803 case bitc::METADATA_NODE
:
804 case bitc::METADATA_LOCATION
:
805 case bitc::METADATA_GENERIC_DEBUG
:
806 case bitc::METADATA_SUBRANGE
:
807 case bitc::METADATA_ENUMERATOR
:
808 case bitc::METADATA_BASIC_TYPE
:
809 case bitc::METADATA_DERIVED_TYPE
:
810 case bitc::METADATA_COMPOSITE_TYPE
:
811 case bitc::METADATA_SUBROUTINE_TYPE
:
812 case bitc::METADATA_MODULE
:
813 case bitc::METADATA_FILE
:
814 case bitc::METADATA_COMPILE_UNIT
:
815 case bitc::METADATA_SUBPROGRAM
:
816 case bitc::METADATA_LEXICAL_BLOCK
:
817 case bitc::METADATA_LEXICAL_BLOCK_FILE
:
818 case bitc::METADATA_NAMESPACE
:
819 case bitc::METADATA_MACRO
:
820 case bitc::METADATA_MACRO_FILE
:
821 case bitc::METADATA_TEMPLATE_TYPE
:
822 case bitc::METADATA_TEMPLATE_VALUE
:
823 case bitc::METADATA_GLOBAL_VAR
:
824 case bitc::METADATA_LOCAL_VAR
:
825 case bitc::METADATA_LABEL
:
826 case bitc::METADATA_EXPRESSION
:
827 case bitc::METADATA_OBJC_PROPERTY
:
828 case bitc::METADATA_IMPORTED_ENTITY
:
829 case bitc::METADATA_GLOBAL_VAR_EXPR
:
830 // We don't expect to see any of these, if we see one, give up on
831 // lazy-loading and fallback.
833 GlobalMetadataBitPosIndex
.clear();
842 /// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
843 /// module level metadata.
844 Error
MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel
) {
845 if (!ModuleLevel
&& MetadataList
.hasFwdRefs())
846 return error("Invalid metadata: fwd refs into function blocks");
848 // Record the entry position so that we can jump back here and efficiently
849 // skip the whole block in case we lazy-load.
850 auto EntryPos
= Stream
.GetCurrentBitNo();
852 if (Stream
.EnterSubBlock(bitc::METADATA_BLOCK_ID
))
853 return error("Invalid record");
855 SmallVector
<uint64_t, 64> Record
;
856 PlaceholderQueue Placeholders
;
858 // We lazy-load module-level metadata: we build an index for each record, and
859 // then load individual record as needed, starting with the named metadata.
860 if (ModuleLevel
&& IsImporting
&& MetadataList
.empty() &&
861 !DisableLazyLoading
) {
862 auto SuccessOrErr
= lazyLoadModuleMetadataBlock();
864 return SuccessOrErr
.takeError();
865 if (SuccessOrErr
.get()) {
866 // An index was successfully created and we will be able to load metadata
868 MetadataList
.resize(MDStringRef
.size() +
869 GlobalMetadataBitPosIndex
.size());
871 // Reading the named metadata created forward references and/or
872 // placeholders, that we flush here.
873 resolveForwardRefsAndPlaceholders(Placeholders
);
875 // Return at the beginning of the block, since it is easy to skip it
876 // entirely from there.
877 Stream
.ReadBlockEnd(); // Pop the abbrev block context.
878 Stream
.JumpToBit(EntryPos
);
879 if (Stream
.SkipBlock())
880 return error("Invalid record");
881 return Error::success();
883 // Couldn't load an index, fallback to loading all the block "old-style".
886 unsigned NextMetadataNo
= MetadataList
.size();
888 // Read all the records.
890 BitstreamEntry Entry
= Stream
.advanceSkippingSubblocks();
892 switch (Entry
.Kind
) {
893 case BitstreamEntry::SubBlock
: // Handled for us already.
894 case BitstreamEntry::Error
:
895 return error("Malformed block");
896 case BitstreamEntry::EndBlock
:
897 resolveForwardRefsAndPlaceholders(Placeholders
);
899 return Error::success();
900 case BitstreamEntry::Record
:
901 // The interesting case.
909 unsigned Code
= Stream
.readRecord(Entry
.ID
, Record
, &Blob
);
911 parseOneMetadata(Record
, Code
, Placeholders
, Blob
, NextMetadataNo
))
916 MDString
*MetadataLoader::MetadataLoaderImpl::lazyLoadOneMDString(unsigned ID
) {
918 if (Metadata
*MD
= MetadataList
.lookup(ID
))
919 return cast
<MDString
>(MD
);
920 auto MDS
= MDString::get(Context
, MDStringRef
[ID
]);
921 MetadataList
.assignValue(MDS
, ID
);
925 void MetadataLoader::MetadataLoaderImpl::lazyLoadOneMetadata(
926 unsigned ID
, PlaceholderQueue
&Placeholders
) {
927 assert(ID
< (MDStringRef
.size()) + GlobalMetadataBitPosIndex
.size());
928 assert(ID
>= MDStringRef
.size() && "Unexpected lazy-loading of MDString");
929 // Lookup first if the metadata hasn't already been loaded.
930 if (auto *MD
= MetadataList
.lookup(ID
)) {
931 auto *N
= dyn_cast_or_null
<MDNode
>(MD
);
932 if (!N
->isTemporary())
935 SmallVector
<uint64_t, 64> Record
;
937 IndexCursor
.JumpToBit(GlobalMetadataBitPosIndex
[ID
- MDStringRef
.size()]);
938 auto Entry
= IndexCursor
.advanceSkippingSubblocks();
940 unsigned Code
= IndexCursor
.readRecord(Entry
.ID
, Record
, &Blob
);
941 if (Error Err
= parseOneMetadata(Record
, Code
, Placeholders
, Blob
, ID
))
942 report_fatal_error("Can't lazyload MD");
945 /// Ensure that all forward-references and placeholders are resolved.
946 /// Iteratively lazy-loading metadata on-demand if needed.
947 void MetadataLoader::MetadataLoaderImpl::resolveForwardRefsAndPlaceholders(
948 PlaceholderQueue
&Placeholders
) {
949 DenseSet
<unsigned> Temporaries
;
951 // Populate Temporaries with the placeholders that haven't been loaded yet.
952 Placeholders
.getTemporaries(MetadataList
, Temporaries
);
954 // If we don't have any temporary, or FwdReference, we're done!
955 if (Temporaries
.empty() && !MetadataList
.hasFwdRefs())
958 // First, load all the temporaries. This can add new placeholders or
959 // forward references.
960 for (auto ID
: Temporaries
)
961 lazyLoadOneMetadata(ID
, Placeholders
);
964 // Second, load the forward-references. This can also add new placeholders
965 // or forward references.
966 while (MetadataList
.hasFwdRefs())
967 lazyLoadOneMetadata(MetadataList
.getNextFwdRef(), Placeholders
);
969 // At this point we don't have any forward reference remaining, or temporary
970 // that haven't been loaded. We can safely drop RAUW support and mark cycles
972 MetadataList
.tryToResolveCycles();
974 // Finally, everything is in place, we can replace the placeholders operands
975 // with the final node they refer to.
976 Placeholders
.flush(MetadataList
);
979 Error
MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
980 SmallVectorImpl
<uint64_t> &Record
, unsigned Code
,
981 PlaceholderQueue
&Placeholders
, StringRef Blob
, unsigned &NextMetadataNo
) {
983 bool IsDistinct
= false;
984 auto getMD
= [&](unsigned ID
) -> Metadata
* {
985 if (ID
< MDStringRef
.size())
986 return lazyLoadOneMDString(ID
);
988 if (auto *MD
= MetadataList
.lookup(ID
))
990 // If lazy-loading is enabled, we try recursively to load the operand
991 // instead of creating a temporary.
992 if (ID
< (MDStringRef
.size() + GlobalMetadataBitPosIndex
.size())) {
993 // Create a temporary for the node that is referencing the operand we
994 // will lazy-load. It is needed before recursing in case there are
996 MetadataList
.getMetadataFwdRef(NextMetadataNo
);
997 lazyLoadOneMetadata(ID
, Placeholders
);
998 return MetadataList
.lookup(ID
);
1000 // Return a temporary.
1001 return MetadataList
.getMetadataFwdRef(ID
);
1003 if (auto *MD
= MetadataList
.getMetadataIfResolved(ID
))
1005 return &Placeholders
.getPlaceholderOp(ID
);
1007 auto getMDOrNull
= [&](unsigned ID
) -> Metadata
* {
1009 return getMD(ID
- 1);
1012 auto getMDOrNullWithoutPlaceholders
= [&](unsigned ID
) -> Metadata
* {
1014 return MetadataList
.getMetadataFwdRef(ID
- 1);
1017 auto getMDString
= [&](unsigned ID
) -> MDString
* {
1018 // This requires that the ID is not really a forward reference. In
1019 // particular, the MDString must already have been resolved.
1020 auto MDS
= getMDOrNull(ID
);
1021 return cast_or_null
<MDString
>(MDS
);
1024 // Support for old type refs.
1025 auto getDITypeRefOrNull
= [&](unsigned ID
) {
1026 return MetadataList
.upgradeTypeRef(getMDOrNull(ID
));
1029 #define GET_OR_DISTINCT(CLASS, ARGS) \
1030 (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
1033 default: // Default behavior: ignore.
1035 case bitc::METADATA_NAME
: {
1036 // Read name of the named metadata.
1037 SmallString
<8> Name(Record
.begin(), Record
.end());
1039 Code
= Stream
.ReadCode();
1041 ++NumMDRecordLoaded
;
1042 unsigned NextBitCode
= Stream
.readRecord(Code
, Record
);
1043 if (NextBitCode
!= bitc::METADATA_NAMED_NODE
)
1044 return error("METADATA_NAME not followed by METADATA_NAMED_NODE");
1046 // Read named metadata elements.
1047 unsigned Size
= Record
.size();
1048 NamedMDNode
*NMD
= TheModule
.getOrInsertNamedMetadata(Name
);
1049 for (unsigned i
= 0; i
!= Size
; ++i
) {
1050 MDNode
*MD
= MetadataList
.getMDNodeFwdRefOrNull(Record
[i
]);
1052 return error("Invalid record");
1053 NMD
->addOperand(MD
);
1057 case bitc::METADATA_OLD_FN_NODE
: {
1058 // FIXME: Remove in 4.0.
1059 // This is a LocalAsMetadata record, the only type of function-local
1061 if (Record
.size() % 2 == 1)
1062 return error("Invalid record");
1064 // If this isn't a LocalAsMetadata record, we're dropping it. This used
1065 // to be legal, but there's no upgrade path.
1066 auto dropRecord
= [&] {
1067 MetadataList
.assignValue(MDNode::get(Context
, None
), NextMetadataNo
);
1070 if (Record
.size() != 2) {
1075 Type
*Ty
= getTypeByID(Record
[0]);
1076 if (Ty
->isMetadataTy() || Ty
->isVoidTy()) {
1081 MetadataList
.assignValue(
1082 LocalAsMetadata::get(ValueList
.getValueFwdRef(Record
[1], Ty
)),
1087 case bitc::METADATA_OLD_NODE
: {
1088 // FIXME: Remove in 4.0.
1089 if (Record
.size() % 2 == 1)
1090 return error("Invalid record");
1092 unsigned Size
= Record
.size();
1093 SmallVector
<Metadata
*, 8> Elts
;
1094 for (unsigned i
= 0; i
!= Size
; i
+= 2) {
1095 Type
*Ty
= getTypeByID(Record
[i
]);
1097 return error("Invalid record");
1098 if (Ty
->isMetadataTy())
1099 Elts
.push_back(getMD(Record
[i
+ 1]));
1100 else if (!Ty
->isVoidTy()) {
1102 ValueAsMetadata::get(ValueList
.getValueFwdRef(Record
[i
+ 1], Ty
));
1103 assert(isa
<ConstantAsMetadata
>(MD
) &&
1104 "Expected non-function-local metadata");
1107 Elts
.push_back(nullptr);
1109 MetadataList
.assignValue(MDNode::get(Context
, Elts
), NextMetadataNo
);
1113 case bitc::METADATA_VALUE
: {
1114 if (Record
.size() != 2)
1115 return error("Invalid record");
1117 Type
*Ty
= getTypeByID(Record
[0]);
1118 if (Ty
->isMetadataTy() || Ty
->isVoidTy())
1119 return error("Invalid record");
1121 MetadataList
.assignValue(
1122 ValueAsMetadata::get(ValueList
.getValueFwdRef(Record
[1], Ty
)),
1127 case bitc::METADATA_DISTINCT_NODE
:
1130 case bitc::METADATA_NODE
: {
1131 SmallVector
<Metadata
*, 8> Elts
;
1132 Elts
.reserve(Record
.size());
1133 for (unsigned ID
: Record
)
1134 Elts
.push_back(getMDOrNull(ID
));
1135 MetadataList
.assignValue(IsDistinct
? MDNode::getDistinct(Context
, Elts
)
1136 : MDNode::get(Context
, Elts
),
1141 case bitc::METADATA_LOCATION
: {
1142 if (Record
.size() != 5 && Record
.size() != 6)
1143 return error("Invalid record");
1145 IsDistinct
= Record
[0];
1146 unsigned Line
= Record
[1];
1147 unsigned Column
= Record
[2];
1148 Metadata
*Scope
= getMD(Record
[3]);
1149 Metadata
*InlinedAt
= getMDOrNull(Record
[4]);
1150 bool ImplicitCode
= Record
.size() == 6 && Record
[5];
1151 MetadataList
.assignValue(
1152 GET_OR_DISTINCT(DILocation
, (Context
, Line
, Column
, Scope
, InlinedAt
,
1158 case bitc::METADATA_GENERIC_DEBUG
: {
1159 if (Record
.size() < 4)
1160 return error("Invalid record");
1162 IsDistinct
= Record
[0];
1163 unsigned Tag
= Record
[1];
1164 unsigned Version
= Record
[2];
1166 if (Tag
>= 1u << 16 || Version
!= 0)
1167 return error("Invalid record");
1169 auto *Header
= getMDString(Record
[3]);
1170 SmallVector
<Metadata
*, 8> DwarfOps
;
1171 for (unsigned I
= 4, E
= Record
.size(); I
!= E
; ++I
)
1172 DwarfOps
.push_back(getMDOrNull(Record
[I
]));
1173 MetadataList
.assignValue(
1174 GET_OR_DISTINCT(GenericDINode
, (Context
, Tag
, Header
, DwarfOps
)),
1179 case bitc::METADATA_SUBRANGE
: {
1180 Metadata
*Val
= nullptr;
1181 // Operand 'count' is interpreted as:
1182 // - Signed integer (version 0)
1183 // - Metadata node (version 1)
1184 switch (Record
[0] >> 1) {
1186 Val
= GET_OR_DISTINCT(DISubrange
,
1187 (Context
, Record
[1], unrotateSign(Record
.back())));
1190 Val
= GET_OR_DISTINCT(DISubrange
, (Context
, getMDOrNull(Record
[1]),
1191 unrotateSign(Record
.back())));
1194 return error("Invalid record: Unsupported version of DISubrange");
1197 MetadataList
.assignValue(Val
, NextMetadataNo
);
1198 IsDistinct
= Record
[0] & 1;
1202 case bitc::METADATA_ENUMERATOR
: {
1203 if (Record
.size() != 3)
1204 return error("Invalid record");
1206 IsDistinct
= Record
[0] & 1;
1207 bool IsUnsigned
= Record
[0] & 2;
1208 MetadataList
.assignValue(
1209 GET_OR_DISTINCT(DIEnumerator
, (Context
, unrotateSign(Record
[1]),
1210 IsUnsigned
, getMDString(Record
[2]))),
1215 case bitc::METADATA_BASIC_TYPE
: {
1216 if (Record
.size() < 6 || Record
.size() > 7)
1217 return error("Invalid record");
1219 IsDistinct
= Record
[0];
1220 DINode::DIFlags Flags
= (Record
.size() > 6) ?
1221 static_cast<DINode::DIFlags
>(Record
[6]) : DINode::FlagZero
;
1223 MetadataList
.assignValue(
1224 GET_OR_DISTINCT(DIBasicType
,
1225 (Context
, Record
[1], getMDString(Record
[2]), Record
[3],
1226 Record
[4], Record
[5], Flags
)),
1231 case bitc::METADATA_DERIVED_TYPE
: {
1232 if (Record
.size() < 12 || Record
.size() > 13)
1233 return error("Invalid record");
1235 // DWARF address space is encoded as N->getDWARFAddressSpace() + 1. 0 means
1236 // that there is no DWARF address space associated with DIDerivedType.
1237 Optional
<unsigned> DWARFAddressSpace
;
1238 if (Record
.size() > 12 && Record
[12])
1239 DWARFAddressSpace
= Record
[12] - 1;
1241 IsDistinct
= Record
[0];
1242 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[10]);
1243 MetadataList
.assignValue(
1244 GET_OR_DISTINCT(DIDerivedType
,
1245 (Context
, Record
[1], getMDString(Record
[2]),
1246 getMDOrNull(Record
[3]), Record
[4],
1247 getDITypeRefOrNull(Record
[5]),
1248 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1249 Record
[9], DWARFAddressSpace
, Flags
,
1250 getDITypeRefOrNull(Record
[11]))),
1255 case bitc::METADATA_COMPOSITE_TYPE
: {
1256 if (Record
.size() < 16 || Record
.size() > 17)
1257 return error("Invalid record");
1259 // If we have a UUID and this is not a forward declaration, lookup the
1261 IsDistinct
= Record
[0] & 0x1;
1262 bool IsNotUsedInTypeRef
= Record
[0] >= 2;
1263 unsigned Tag
= Record
[1];
1264 MDString
*Name
= getMDString(Record
[2]);
1265 Metadata
*File
= getMDOrNull(Record
[3]);
1266 unsigned Line
= Record
[4];
1267 Metadata
*Scope
= getDITypeRefOrNull(Record
[5]);
1268 Metadata
*BaseType
= nullptr;
1269 uint64_t SizeInBits
= Record
[7];
1270 if (Record
[8] > (uint64_t)std::numeric_limits
<uint32_t>::max())
1271 return error("Alignment value is too large");
1272 uint32_t AlignInBits
= Record
[8];
1273 uint64_t OffsetInBits
= 0;
1274 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[10]);
1275 Metadata
*Elements
= nullptr;
1276 unsigned RuntimeLang
= Record
[12];
1277 Metadata
*VTableHolder
= nullptr;
1278 Metadata
*TemplateParams
= nullptr;
1279 Metadata
*Discriminator
= nullptr;
1280 auto *Identifier
= getMDString(Record
[15]);
1281 // If this module is being parsed so that it can be ThinLTO imported
1282 // into another module, composite types only need to be imported
1283 // as type declarations (unless full type definitions requested).
1284 // Create type declarations up front to save memory. Also, buildODRType
1285 // handles the case where this is type ODRed with a definition needed
1286 // by the importing module, in which case the existing definition is
1288 if (IsImporting
&& !ImportFullTypeDefinitions
&& Identifier
&&
1289 (Tag
== dwarf::DW_TAG_enumeration_type
||
1290 Tag
== dwarf::DW_TAG_class_type
||
1291 Tag
== dwarf::DW_TAG_structure_type
||
1292 Tag
== dwarf::DW_TAG_union_type
)) {
1293 Flags
= Flags
| DINode::FlagFwdDecl
;
1295 BaseType
= getDITypeRefOrNull(Record
[6]);
1296 OffsetInBits
= Record
[9];
1297 Elements
= getMDOrNull(Record
[11]);
1298 VTableHolder
= getDITypeRefOrNull(Record
[13]);
1299 TemplateParams
= getMDOrNull(Record
[14]);
1300 if (Record
.size() > 16)
1301 Discriminator
= getMDOrNull(Record
[16]);
1303 DICompositeType
*CT
= nullptr;
1305 CT
= DICompositeType::buildODRType(
1306 Context
, *Identifier
, Tag
, Name
, File
, Line
, Scope
, BaseType
,
1307 SizeInBits
, AlignInBits
, OffsetInBits
, Flags
, Elements
, RuntimeLang
,
1308 VTableHolder
, TemplateParams
, Discriminator
);
1310 // Create a node if we didn't get a lazy ODR type.
1312 CT
= GET_OR_DISTINCT(DICompositeType
,
1313 (Context
, Tag
, Name
, File
, Line
, Scope
, BaseType
,
1314 SizeInBits
, AlignInBits
, OffsetInBits
, Flags
,
1315 Elements
, RuntimeLang
, VTableHolder
, TemplateParams
,
1316 Identifier
, Discriminator
));
1317 if (!IsNotUsedInTypeRef
&& Identifier
)
1318 MetadataList
.addTypeRef(*Identifier
, *cast
<DICompositeType
>(CT
));
1320 MetadataList
.assignValue(CT
, NextMetadataNo
);
1324 case bitc::METADATA_SUBROUTINE_TYPE
: {
1325 if (Record
.size() < 3 || Record
.size() > 4)
1326 return error("Invalid record");
1327 bool IsOldTypeRefArray
= Record
[0] < 2;
1328 unsigned CC
= (Record
.size() > 3) ? Record
[3] : 0;
1330 IsDistinct
= Record
[0] & 0x1;
1331 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[1]);
1332 Metadata
*Types
= getMDOrNull(Record
[2]);
1333 if (LLVM_UNLIKELY(IsOldTypeRefArray
))
1334 Types
= MetadataList
.upgradeTypeRefArray(Types
);
1336 MetadataList
.assignValue(
1337 GET_OR_DISTINCT(DISubroutineType
, (Context
, Flags
, CC
, Types
)),
1343 case bitc::METADATA_MODULE
: {
1344 if (Record
.size() != 6)
1345 return error("Invalid record");
1347 IsDistinct
= Record
[0];
1348 MetadataList
.assignValue(
1349 GET_OR_DISTINCT(DIModule
,
1350 (Context
, getMDOrNull(Record
[1]),
1351 getMDString(Record
[2]), getMDString(Record
[3]),
1352 getMDString(Record
[4]), getMDString(Record
[5]))),
1358 case bitc::METADATA_FILE
: {
1359 if (Record
.size() != 3 && Record
.size() != 5 && Record
.size() != 6)
1360 return error("Invalid record");
1362 IsDistinct
= Record
[0];
1363 Optional
<DIFile::ChecksumInfo
<MDString
*>> Checksum
;
1364 // The BitcodeWriter writes null bytes into Record[3:4] when the Checksum
1365 // is not present. This matches up with the old internal representation,
1366 // and the old encoding for CSK_None in the ChecksumKind. The new
1367 // representation reserves the value 0 in the ChecksumKind to continue to
1368 // encode None in a backwards-compatible way.
1369 if (Record
.size() > 4 && Record
[3] && Record
[4])
1370 Checksum
.emplace(static_cast<DIFile::ChecksumKind
>(Record
[3]),
1371 getMDString(Record
[4]));
1372 MetadataList
.assignValue(
1375 (Context
, getMDString(Record
[1]), getMDString(Record
[2]), Checksum
,
1376 Record
.size() > 5 ? Optional
<MDString
*>(getMDString(Record
[5]))
1382 case bitc::METADATA_COMPILE_UNIT
: {
1383 if (Record
.size() < 14 || Record
.size() > 19)
1384 return error("Invalid record");
1386 // Ignore Record[0], which indicates whether this compile unit is
1387 // distinct. It's always distinct.
1389 auto *CU
= DICompileUnit::getDistinct(
1390 Context
, Record
[1], getMDOrNull(Record
[2]), getMDString(Record
[3]),
1391 Record
[4], getMDString(Record
[5]), Record
[6], getMDString(Record
[7]),
1392 Record
[8], getMDOrNull(Record
[9]), getMDOrNull(Record
[10]),
1393 getMDOrNull(Record
[12]), getMDOrNull(Record
[13]),
1394 Record
.size() <= 15 ? nullptr : getMDOrNull(Record
[15]),
1395 Record
.size() <= 14 ? 0 : Record
[14],
1396 Record
.size() <= 16 ? true : Record
[16],
1397 Record
.size() <= 17 ? false : Record
[17],
1398 Record
.size() <= 18 ? 0 : Record
[18]);
1400 MetadataList
.assignValue(CU
, NextMetadataNo
);
1403 // Move the Upgrade the list of subprograms.
1404 if (Metadata
*SPs
= getMDOrNullWithoutPlaceholders(Record
[11]))
1405 CUSubprograms
.push_back({CU
, SPs
});
1408 case bitc::METADATA_SUBPROGRAM
: {
1409 if (Record
.size() < 18 || Record
.size() > 21)
1410 return error("Invalid record");
1413 (Record
[0] & 1) || Record
[8]; // All definitions should be distinct.
1414 // Version 1 has a Function as Record[15].
1415 // Version 2 has removed Record[15].
1416 // Version 3 has the Unit as Record[15].
1417 // Version 4 added thisAdjustment.
1418 bool HasUnit
= Record
[0] >= 2;
1419 if (HasUnit
&& Record
.size() < 19)
1420 return error("Invalid record");
1421 Metadata
*CUorFn
= getMDOrNull(Record
[15]);
1422 unsigned Offset
= Record
.size() >= 19 ? 1 : 0;
1423 bool HasFn
= Offset
&& !HasUnit
;
1424 bool HasThisAdj
= Record
.size() >= 20;
1425 bool HasThrownTypes
= Record
.size() >= 21;
1426 DISubprogram
*SP
= GET_OR_DISTINCT(
1429 getDITypeRefOrNull(Record
[1]), // scope
1430 getMDString(Record
[2]), // name
1431 getMDString(Record
[3]), // linkageName
1432 getMDOrNull(Record
[4]), // file
1434 getMDOrNull(Record
[6]), // type
1435 Record
[7], // isLocal
1436 Record
[8], // isDefinition
1437 Record
[9], // scopeLine
1438 getDITypeRefOrNull(Record
[10]), // containingType
1439 Record
[11], // virtuality
1440 Record
[12], // virtualIndex
1441 HasThisAdj
? Record
[19] : 0, // thisAdjustment
1442 static_cast<DINode::DIFlags
>(Record
[13]), // flags
1443 Record
[14], // isOptimized
1444 HasUnit
? CUorFn
: nullptr, // unit
1445 getMDOrNull(Record
[15 + Offset
]), // templateParams
1446 getMDOrNull(Record
[16 + Offset
]), // declaration
1447 getMDOrNull(Record
[17 + Offset
]), // retainedNodes
1448 HasThrownTypes
? getMDOrNull(Record
[20]) : nullptr // thrownTypes
1450 MetadataList
.assignValue(SP
, NextMetadataNo
);
1453 // Upgrade sp->function mapping to function->sp mapping.
1455 if (auto *CMD
= dyn_cast_or_null
<ConstantAsMetadata
>(CUorFn
))
1456 if (auto *F
= dyn_cast
<Function
>(CMD
->getValue())) {
1457 if (F
->isMaterializable())
1458 // Defer until materialized; unmaterialized functions may not have
1460 FunctionsWithSPs
[F
] = SP
;
1461 else if (!F
->empty())
1462 F
->setSubprogram(SP
);
1467 case bitc::METADATA_LEXICAL_BLOCK
: {
1468 if (Record
.size() != 5)
1469 return error("Invalid record");
1471 IsDistinct
= Record
[0];
1472 MetadataList
.assignValue(
1473 GET_OR_DISTINCT(DILexicalBlock
,
1474 (Context
, getMDOrNull(Record
[1]),
1475 getMDOrNull(Record
[2]), Record
[3], Record
[4])),
1480 case bitc::METADATA_LEXICAL_BLOCK_FILE
: {
1481 if (Record
.size() != 4)
1482 return error("Invalid record");
1484 IsDistinct
= Record
[0];
1485 MetadataList
.assignValue(
1486 GET_OR_DISTINCT(DILexicalBlockFile
,
1487 (Context
, getMDOrNull(Record
[1]),
1488 getMDOrNull(Record
[2]), Record
[3])),
1493 case bitc::METADATA_NAMESPACE
: {
1494 // Newer versions of DINamespace dropped file and line.
1496 if (Record
.size() == 3)
1497 Name
= getMDString(Record
[2]);
1498 else if (Record
.size() == 5)
1499 Name
= getMDString(Record
[3]);
1501 return error("Invalid record");
1503 IsDistinct
= Record
[0] & 1;
1504 bool ExportSymbols
= Record
[0] & 2;
1505 MetadataList
.assignValue(
1506 GET_OR_DISTINCT(DINamespace
,
1507 (Context
, getMDOrNull(Record
[1]), Name
, ExportSymbols
)),
1512 case bitc::METADATA_MACRO
: {
1513 if (Record
.size() != 5)
1514 return error("Invalid record");
1516 IsDistinct
= Record
[0];
1517 MetadataList
.assignValue(
1518 GET_OR_DISTINCT(DIMacro
,
1519 (Context
, Record
[1], Record
[2], getMDString(Record
[3]),
1520 getMDString(Record
[4]))),
1525 case bitc::METADATA_MACRO_FILE
: {
1526 if (Record
.size() != 5)
1527 return error("Invalid record");
1529 IsDistinct
= Record
[0];
1530 MetadataList
.assignValue(
1531 GET_OR_DISTINCT(DIMacroFile
,
1532 (Context
, Record
[1], Record
[2], getMDOrNull(Record
[3]),
1533 getMDOrNull(Record
[4]))),
1538 case bitc::METADATA_TEMPLATE_TYPE
: {
1539 if (Record
.size() != 3)
1540 return error("Invalid record");
1542 IsDistinct
= Record
[0];
1543 MetadataList
.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter
,
1544 (Context
, getMDString(Record
[1]),
1545 getDITypeRefOrNull(Record
[2]))),
1550 case bitc::METADATA_TEMPLATE_VALUE
: {
1551 if (Record
.size() != 5)
1552 return error("Invalid record");
1554 IsDistinct
= Record
[0];
1555 MetadataList
.assignValue(
1556 GET_OR_DISTINCT(DITemplateValueParameter
,
1557 (Context
, Record
[1], getMDString(Record
[2]),
1558 getDITypeRefOrNull(Record
[3]),
1559 getMDOrNull(Record
[4]))),
1564 case bitc::METADATA_GLOBAL_VAR
: {
1565 if (Record
.size() < 11 || Record
.size() > 13)
1566 return error("Invalid record");
1568 IsDistinct
= Record
[0] & 1;
1569 unsigned Version
= Record
[0] >> 1;
1572 MetadataList
.assignValue(
1575 (Context
, getMDOrNull(Record
[1]), getMDString(Record
[2]),
1576 getMDString(Record
[3]), getMDOrNull(Record
[4]), Record
[5],
1577 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1578 getMDOrNull(Record
[9]), getMDOrNull(Record
[10]), Record
[11])),
1582 } else if (Version
== 1) {
1583 // No upgrade necessary. A null field will be introduced to indicate
1584 // that no parameter information is available.
1585 MetadataList
.assignValue(
1586 GET_OR_DISTINCT(DIGlobalVariable
,
1587 (Context
, getMDOrNull(Record
[1]),
1588 getMDString(Record
[2]), getMDString(Record
[3]),
1589 getMDOrNull(Record
[4]), Record
[5],
1590 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1591 getMDOrNull(Record
[10]), nullptr, Record
[11])),
1595 } else if (Version
== 0) {
1596 // Upgrade old metadata, which stored a global variable reference or a
1597 // ConstantInt here.
1598 NeedUpgradeToDIGlobalVariableExpression
= true;
1599 Metadata
*Expr
= getMDOrNull(Record
[9]);
1600 uint32_t AlignInBits
= 0;
1601 if (Record
.size() > 11) {
1602 if (Record
[11] > (uint64_t)std::numeric_limits
<uint32_t>::max())
1603 return error("Alignment value is too large");
1604 AlignInBits
= Record
[11];
1606 GlobalVariable
*Attach
= nullptr;
1607 if (auto *CMD
= dyn_cast_or_null
<ConstantAsMetadata
>(Expr
)) {
1608 if (auto *GV
= dyn_cast
<GlobalVariable
>(CMD
->getValue())) {
1611 } else if (auto *CI
= dyn_cast
<ConstantInt
>(CMD
->getValue())) {
1612 Expr
= DIExpression::get(Context
,
1613 {dwarf::DW_OP_constu
, CI
->getZExtValue(),
1614 dwarf::DW_OP_stack_value
});
1619 DIGlobalVariable
*DGV
= GET_OR_DISTINCT(
1621 (Context
, getMDOrNull(Record
[1]), getMDString(Record
[2]),
1622 getMDString(Record
[3]), getMDOrNull(Record
[4]), Record
[5],
1623 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1624 getMDOrNull(Record
[10]), nullptr, AlignInBits
));
1626 DIGlobalVariableExpression
*DGVE
= nullptr;
1628 DGVE
= DIGlobalVariableExpression::getDistinct(
1629 Context
, DGV
, Expr
? Expr
: DIExpression::get(Context
, {}));
1631 Attach
->addDebugInfo(DGVE
);
1633 auto *MDNode
= Expr
? cast
<Metadata
>(DGVE
) : cast
<Metadata
>(DGV
);
1634 MetadataList
.assignValue(MDNode
, NextMetadataNo
);
1637 return error("Invalid record");
1641 case bitc::METADATA_LOCAL_VAR
: {
1642 // 10th field is for the obseleted 'inlinedAt:' field.
1643 if (Record
.size() < 8 || Record
.size() > 10)
1644 return error("Invalid record");
1646 IsDistinct
= Record
[0] & 1;
1647 bool HasAlignment
= Record
[0] & 2;
1648 // 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
1649 // DW_TAG_arg_variable, if we have alignment flag encoded it means, that
1650 // this is newer version of record which doesn't have artificial tag.
1651 bool HasTag
= !HasAlignment
&& Record
.size() > 8;
1652 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[7 + HasTag
]);
1653 uint32_t AlignInBits
= 0;
1655 if (Record
[8 + HasTag
] > (uint64_t)std::numeric_limits
<uint32_t>::max())
1656 return error("Alignment value is too large");
1657 AlignInBits
= Record
[8 + HasTag
];
1659 MetadataList
.assignValue(
1660 GET_OR_DISTINCT(DILocalVariable
,
1661 (Context
, getMDOrNull(Record
[1 + HasTag
]),
1662 getMDString(Record
[2 + HasTag
]),
1663 getMDOrNull(Record
[3 + HasTag
]), Record
[4 + HasTag
],
1664 getDITypeRefOrNull(Record
[5 + HasTag
]),
1665 Record
[6 + HasTag
], Flags
, AlignInBits
)),
1670 case bitc::METADATA_LABEL
: {
1671 if (Record
.size() != 5)
1672 return error("Invalid record");
1674 IsDistinct
= Record
[0] & 1;
1675 MetadataList
.assignValue(
1676 GET_OR_DISTINCT(DILabel
,
1677 (Context
, getMDOrNull(Record
[1]),
1678 getMDString(Record
[2]),
1679 getMDOrNull(Record
[3]), Record
[4])),
1684 case bitc::METADATA_EXPRESSION
: {
1685 if (Record
.size() < 1)
1686 return error("Invalid record");
1688 IsDistinct
= Record
[0] & 1;
1689 uint64_t Version
= Record
[0] >> 1;
1690 auto Elts
= MutableArrayRef
<uint64_t>(Record
).slice(1);
1692 SmallVector
<uint64_t, 6> Buffer
;
1693 if (Error Err
= upgradeDIExpression(Version
, Elts
, Buffer
))
1696 MetadataList
.assignValue(
1697 GET_OR_DISTINCT(DIExpression
, (Context
, Elts
)), NextMetadataNo
);
1701 case bitc::METADATA_GLOBAL_VAR_EXPR
: {
1702 if (Record
.size() != 3)
1703 return error("Invalid record");
1705 IsDistinct
= Record
[0];
1706 Metadata
*Expr
= getMDOrNull(Record
[2]);
1708 Expr
= DIExpression::get(Context
, {});
1709 MetadataList
.assignValue(
1710 GET_OR_DISTINCT(DIGlobalVariableExpression
,
1711 (Context
, getMDOrNull(Record
[1]), Expr
)),
1716 case bitc::METADATA_OBJC_PROPERTY
: {
1717 if (Record
.size() != 8)
1718 return error("Invalid record");
1720 IsDistinct
= Record
[0];
1721 MetadataList
.assignValue(
1722 GET_OR_DISTINCT(DIObjCProperty
,
1723 (Context
, getMDString(Record
[1]),
1724 getMDOrNull(Record
[2]), Record
[3],
1725 getMDString(Record
[4]), getMDString(Record
[5]),
1726 Record
[6], getDITypeRefOrNull(Record
[7]))),
1731 case bitc::METADATA_IMPORTED_ENTITY
: {
1732 if (Record
.size() != 6 && Record
.size() != 7)
1733 return error("Invalid record");
1735 IsDistinct
= Record
[0];
1736 bool HasFile
= (Record
.size() == 7);
1737 MetadataList
.assignValue(
1738 GET_OR_DISTINCT(DIImportedEntity
,
1739 (Context
, Record
[1], getMDOrNull(Record
[2]),
1740 getDITypeRefOrNull(Record
[3]),
1741 HasFile
? getMDOrNull(Record
[6]) : nullptr,
1742 HasFile
? Record
[4] : 0, getMDString(Record
[5]))),
1747 case bitc::METADATA_STRING_OLD
: {
1748 std::string
String(Record
.begin(), Record
.end());
1750 // Test for upgrading !llvm.loop.
1751 HasSeenOldLoopTags
|= mayBeOldLoopAttachmentTag(String
);
1752 ++NumMDStringLoaded
;
1753 Metadata
*MD
= MDString::get(Context
, String
);
1754 MetadataList
.assignValue(MD
, NextMetadataNo
);
1758 case bitc::METADATA_STRINGS
: {
1759 auto CreateNextMDString
= [&](StringRef Str
) {
1760 ++NumMDStringLoaded
;
1761 MetadataList
.assignValue(MDString::get(Context
, Str
), NextMetadataNo
);
1764 if (Error Err
= parseMetadataStrings(Record
, Blob
, CreateNextMDString
))
1768 case bitc::METADATA_GLOBAL_DECL_ATTACHMENT
: {
1769 if (Record
.size() % 2 == 0)
1770 return error("Invalid record");
1771 unsigned ValueID
= Record
[0];
1772 if (ValueID
>= ValueList
.size())
1773 return error("Invalid record");
1774 if (auto *GO
= dyn_cast
<GlobalObject
>(ValueList
[ValueID
]))
1775 if (Error Err
= parseGlobalObjectAttachment(
1776 *GO
, ArrayRef
<uint64_t>(Record
).slice(1)))
1780 case bitc::METADATA_KIND
: {
1781 // Support older bitcode files that had METADATA_KIND records in a
1782 // block with METADATA_BLOCK_ID.
1783 if (Error Err
= parseMetadataKindRecord(Record
))
1788 return Error::success();
1789 #undef GET_OR_DISTINCT
1792 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataStrings(
1793 ArrayRef
<uint64_t> Record
, StringRef Blob
,
1794 function_ref
<void(StringRef
)> CallBack
) {
1795 // All the MDStrings in the block are emitted together in a single
1796 // record. The strings are concatenated and stored in a blob along with
1798 if (Record
.size() != 2)
1799 return error("Invalid record: metadata strings layout");
1801 unsigned NumStrings
= Record
[0];
1802 unsigned StringsOffset
= Record
[1];
1804 return error("Invalid record: metadata strings with no strings");
1805 if (StringsOffset
> Blob
.size())
1806 return error("Invalid record: metadata strings corrupt offset");
1808 StringRef Lengths
= Blob
.slice(0, StringsOffset
);
1809 SimpleBitstreamCursor
R(Lengths
);
1811 StringRef Strings
= Blob
.drop_front(StringsOffset
);
1813 if (R
.AtEndOfStream())
1814 return error("Invalid record: metadata strings bad length");
1816 unsigned Size
= R
.ReadVBR(6);
1817 if (Strings
.size() < Size
)
1818 return error("Invalid record: metadata strings truncated chars");
1820 CallBack(Strings
.slice(0, Size
));
1821 Strings
= Strings
.drop_front(Size
);
1822 } while (--NumStrings
);
1824 return Error::success();
1827 Error
MetadataLoader::MetadataLoaderImpl::parseGlobalObjectAttachment(
1828 GlobalObject
&GO
, ArrayRef
<uint64_t> Record
) {
1829 assert(Record
.size() % 2 == 0);
1830 for (unsigned I
= 0, E
= Record
.size(); I
!= E
; I
+= 2) {
1831 auto K
= MDKindMap
.find(Record
[I
]);
1832 if (K
== MDKindMap
.end())
1833 return error("Invalid ID");
1834 MDNode
*MD
= MetadataList
.getMDNodeFwdRefOrNull(Record
[I
+ 1]);
1836 return error("Invalid metadata attachment");
1837 GO
.addMetadata(K
->second
, *MD
);
1839 return Error::success();
1842 /// Parse metadata attachments.
1843 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
1844 Function
&F
, const SmallVectorImpl
<Instruction
*> &InstructionList
) {
1845 if (Stream
.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID
))
1846 return error("Invalid record");
1848 SmallVector
<uint64_t, 64> Record
;
1849 PlaceholderQueue Placeholders
;
1852 BitstreamEntry Entry
= Stream
.advanceSkippingSubblocks();
1854 switch (Entry
.Kind
) {
1855 case BitstreamEntry::SubBlock
: // Handled for us already.
1856 case BitstreamEntry::Error
:
1857 return error("Malformed block");
1858 case BitstreamEntry::EndBlock
:
1859 resolveForwardRefsAndPlaceholders(Placeholders
);
1860 return Error::success();
1861 case BitstreamEntry::Record
:
1862 // The interesting case.
1866 // Read a metadata attachment record.
1868 ++NumMDRecordLoaded
;
1869 switch (Stream
.readRecord(Entry
.ID
, Record
)) {
1870 default: // Default behavior: ignore.
1872 case bitc::METADATA_ATTACHMENT
: {
1873 unsigned RecordLength
= Record
.size();
1875 return error("Invalid record");
1876 if (RecordLength
% 2 == 0) {
1877 // A function attachment.
1878 if (Error Err
= parseGlobalObjectAttachment(F
, Record
))
1883 // An instruction attachment.
1884 Instruction
*Inst
= InstructionList
[Record
[0]];
1885 for (unsigned i
= 1; i
!= RecordLength
; i
= i
+ 2) {
1886 unsigned Kind
= Record
[i
];
1887 DenseMap
<unsigned, unsigned>::iterator I
= MDKindMap
.find(Kind
);
1888 if (I
== MDKindMap
.end())
1889 return error("Invalid ID");
1890 if (I
->second
== LLVMContext::MD_tbaa
&& StripTBAA
)
1893 auto Idx
= Record
[i
+ 1];
1894 if (Idx
< (MDStringRef
.size() + GlobalMetadataBitPosIndex
.size()) &&
1895 !MetadataList
.lookup(Idx
)) {
1896 // Load the attachment if it is in the lazy-loadable range and hasn't
1898 lazyLoadOneMetadata(Idx
, Placeholders
);
1899 resolveForwardRefsAndPlaceholders(Placeholders
);
1902 Metadata
*Node
= MetadataList
.getMetadataFwdRef(Idx
);
1903 if (isa
<LocalAsMetadata
>(Node
))
1904 // Drop the attachment. This used to be legal, but there's no
1907 MDNode
*MD
= dyn_cast_or_null
<MDNode
>(Node
);
1909 return error("Invalid metadata attachment");
1911 if (HasSeenOldLoopTags
&& I
->second
== LLVMContext::MD_loop
)
1912 MD
= upgradeInstructionLoopAttachment(*MD
);
1914 if (I
->second
== LLVMContext::MD_tbaa
) {
1915 assert(!MD
->isTemporary() && "should load MDs before attachments");
1916 MD
= UpgradeTBAANode(*MD
);
1918 Inst
->setMetadata(I
->second
, MD
);
1926 /// Parse a single METADATA_KIND record, inserting result in MDKindMap.
1927 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataKindRecord(
1928 SmallVectorImpl
<uint64_t> &Record
) {
1929 if (Record
.size() < 2)
1930 return error("Invalid record");
1932 unsigned Kind
= Record
[0];
1933 SmallString
<8> Name(Record
.begin() + 1, Record
.end());
1935 unsigned NewKind
= TheModule
.getMDKindID(Name
.str());
1936 if (!MDKindMap
.insert(std::make_pair(Kind
, NewKind
)).second
)
1937 return error("Conflicting METADATA_KIND records");
1938 return Error::success();
1941 /// Parse the metadata kinds out of the METADATA_KIND_BLOCK.
1942 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataKinds() {
1943 if (Stream
.EnterSubBlock(bitc::METADATA_KIND_BLOCK_ID
))
1944 return error("Invalid record");
1946 SmallVector
<uint64_t, 64> Record
;
1948 // Read all the records.
1950 BitstreamEntry Entry
= Stream
.advanceSkippingSubblocks();
1952 switch (Entry
.Kind
) {
1953 case BitstreamEntry::SubBlock
: // Handled for us already.
1954 case BitstreamEntry::Error
:
1955 return error("Malformed block");
1956 case BitstreamEntry::EndBlock
:
1957 return Error::success();
1958 case BitstreamEntry::Record
:
1959 // The interesting case.
1965 ++NumMDRecordLoaded
;
1966 unsigned Code
= Stream
.readRecord(Entry
.ID
, Record
);
1968 default: // Default behavior: ignore.
1970 case bitc::METADATA_KIND
: {
1971 if (Error Err
= parseMetadataKindRecord(Record
))
1979 MetadataLoader
&MetadataLoader::operator=(MetadataLoader
&&RHS
) {
1980 Pimpl
= std::move(RHS
.Pimpl
);
1983 MetadataLoader::MetadataLoader(MetadataLoader
&&RHS
)
1984 : Pimpl(std::move(RHS
.Pimpl
)) {}
1986 MetadataLoader::~MetadataLoader() = default;
1987 MetadataLoader::MetadataLoader(BitstreamCursor
&Stream
, Module
&TheModule
,
1988 BitcodeReaderValueList
&ValueList
,
1990 std::function
<Type
*(unsigned)> getTypeByID
)
1991 : Pimpl(llvm::make_unique
<MetadataLoaderImpl
>(
1992 Stream
, TheModule
, ValueList
, std::move(getTypeByID
), IsImporting
)) {}
1994 Error
MetadataLoader::parseMetadata(bool ModuleLevel
) {
1995 return Pimpl
->parseMetadata(ModuleLevel
);
1998 bool MetadataLoader::hasFwdRefs() const { return Pimpl
->hasFwdRefs(); }
2000 /// Return the given metadata, creating a replaceable forward reference if
2002 Metadata
*MetadataLoader::getMetadataFwdRefOrLoad(unsigned Idx
) {
2003 return Pimpl
->getMetadataFwdRefOrLoad(Idx
);
2006 MDNode
*MetadataLoader::getMDNodeFwdRefOrNull(unsigned Idx
) {
2007 return Pimpl
->getMDNodeFwdRefOrNull(Idx
);
2010 DISubprogram
*MetadataLoader::lookupSubprogramForFunction(Function
*F
) {
2011 return Pimpl
->lookupSubprogramForFunction(F
);
2014 Error
MetadataLoader::parseMetadataAttachment(
2015 Function
&F
, const SmallVectorImpl
<Instruction
*> &InstructionList
) {
2016 return Pimpl
->parseMetadataAttachment(F
, InstructionList
);
2019 Error
MetadataLoader::parseMetadataKinds() {
2020 return Pimpl
->parseMetadataKinds();
2023 void MetadataLoader::setStripTBAA(bool StripTBAA
) {
2024 return Pimpl
->setStripTBAA(StripTBAA
);
2027 bool MetadataLoader::isStrippingTBAA() { return Pimpl
->isStrippingTBAA(); }
2029 unsigned MetadataLoader::size() const { return Pimpl
->size(); }
2030 void MetadataLoader::shrinkTo(unsigned N
) { return Pimpl
->shrinkTo(N
); }
2032 void MetadataLoader::upgradeDebugIntrinsics(Function
&F
) {
2033 return Pimpl
->upgradeDebugIntrinsics(F
);