1 //===- MetadataLoader.cpp - Internal BitcodeReader implementation ---------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "MetadataLoader.h"
10 #include "ValueList.h"
12 #include "llvm/ADT/APFloat.h"
13 #include "llvm/ADT/APInt.h"
14 #include "llvm/ADT/ArrayRef.h"
15 #include "llvm/ADT/DenseMap.h"
16 #include "llvm/ADT/DenseSet.h"
17 #include "llvm/ADT/None.h"
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ADT/SmallString.h"
20 #include "llvm/ADT/Statistic.h"
21 #include "llvm/ADT/StringRef.h"
22 #include "llvm/ADT/Twine.h"
23 #include "llvm/Bitcode/BitcodeReader.h"
24 #include "llvm/Bitstream/BitstreamReader.h"
25 #include "llvm/Bitcode/LLVMBitCodes.h"
26 #include "llvm/IR/Argument.h"
27 #include "llvm/IR/Attributes.h"
28 #include "llvm/IR/AutoUpgrade.h"
29 #include "llvm/IR/BasicBlock.h"
30 #include "llvm/IR/CallingConv.h"
31 #include "llvm/IR/Comdat.h"
32 #include "llvm/IR/Constant.h"
33 #include "llvm/IR/Constants.h"
34 #include "llvm/IR/DebugInfo.h"
35 #include "llvm/IR/DebugInfoMetadata.h"
36 #include "llvm/IR/DebugLoc.h"
37 #include "llvm/IR/DerivedTypes.h"
38 #include "llvm/IR/DiagnosticPrinter.h"
39 #include "llvm/IR/Function.h"
40 #include "llvm/IR/GVMaterializer.h"
41 #include "llvm/IR/GlobalAlias.h"
42 #include "llvm/IR/GlobalIFunc.h"
43 #include "llvm/IR/GlobalIndirectSymbol.h"
44 #include "llvm/IR/GlobalObject.h"
45 #include "llvm/IR/GlobalValue.h"
46 #include "llvm/IR/GlobalVariable.h"
47 #include "llvm/IR/InlineAsm.h"
48 #include "llvm/IR/InstrTypes.h"
49 #include "llvm/IR/Instruction.h"
50 #include "llvm/IR/Instructions.h"
51 #include "llvm/IR/IntrinsicInst.h"
52 #include "llvm/IR/Intrinsics.h"
53 #include "llvm/IR/LLVMContext.h"
54 #include "llvm/IR/Module.h"
55 #include "llvm/IR/ModuleSummaryIndex.h"
56 #include "llvm/IR/OperandTraits.h"
57 #include "llvm/IR/TrackingMDRef.h"
58 #include "llvm/IR/Type.h"
59 #include "llvm/IR/ValueHandle.h"
60 #include "llvm/Support/AtomicOrdering.h"
61 #include "llvm/Support/Casting.h"
62 #include "llvm/Support/CommandLine.h"
63 #include "llvm/Support/Compiler.h"
64 #include "llvm/Support/Debug.h"
65 #include "llvm/Support/ErrorHandling.h"
66 #include "llvm/Support/ManagedStatic.h"
67 #include "llvm/Support/MemoryBuffer.h"
68 #include "llvm/Support/raw_ostream.h"
77 #include <system_error>
84 #define DEBUG_TYPE "bitcode-reader"
86 STATISTIC(NumMDStringLoaded
, "Number of MDStrings loaded");
87 STATISTIC(NumMDNodeTemporary
, "Number of MDNode::Temporary created");
88 STATISTIC(NumMDRecordLoaded
, "Number of Metadata records loaded");
90 /// Flag whether we need to import full type definitions for ThinLTO.
91 /// Currently needed for Darwin and LLDB.
92 static cl::opt
<bool> ImportFullTypeDefinitions(
93 "import-full-type-definitions", cl::init(false), cl::Hidden
,
94 cl::desc("Import full type definitions for ThinLTO."));
96 static cl::opt
<bool> DisableLazyLoading(
97 "disable-ondemand-mds-loading", cl::init(false), cl::Hidden
,
98 cl::desc("Force disable the lazy-loading on-demand of metadata when "
99 "loading bitcode for importing."));
103 static int64_t unrotateSign(uint64_t U
) { return (U
& 1) ? ~(U
>> 1) : U
>> 1; }
105 class BitcodeReaderMetadataList
{
106 /// Array of metadata references.
108 /// Don't use std::vector here. Some versions of libc++ copy (instead of
109 /// move) on resize, and TrackingMDRef is very expensive to copy.
110 SmallVector
<TrackingMDRef
, 1> MetadataPtrs
;
112 /// The set of indices in MetadataPtrs above of forward references that were
114 SmallDenseSet
<unsigned, 1> ForwardReference
;
116 /// The set of indices in MetadataPtrs above of Metadata that need to be
118 SmallDenseSet
<unsigned, 1> UnresolvedNodes
;
120 /// Structures for resolving old type refs.
122 SmallDenseMap
<MDString
*, TempMDTuple
, 1> Unknown
;
123 SmallDenseMap
<MDString
*, DICompositeType
*, 1> Final
;
124 SmallDenseMap
<MDString
*, DICompositeType
*, 1> FwdDecls
;
125 SmallVector
<std::pair
<TrackingMDRef
, TempMDTuple
>, 1> Arrays
;
128 LLVMContext
&Context
;
130 /// Maximum number of valid references. Forward references exceeding the
131 /// maximum must be invalid.
132 unsigned RefsUpperBound
;
135 BitcodeReaderMetadataList(LLVMContext
&C
, size_t RefsUpperBound
)
137 RefsUpperBound(std::min((size_t)std::numeric_limits
<unsigned>::max(),
140 // vector compatibility methods
141 unsigned size() const { return MetadataPtrs
.size(); }
142 void resize(unsigned N
) { MetadataPtrs
.resize(N
); }
143 void push_back(Metadata
*MD
) { MetadataPtrs
.emplace_back(MD
); }
144 void clear() { MetadataPtrs
.clear(); }
145 Metadata
*back() const { return MetadataPtrs
.back(); }
146 void pop_back() { MetadataPtrs
.pop_back(); }
147 bool empty() const { return MetadataPtrs
.empty(); }
149 Metadata
*operator[](unsigned i
) const {
150 assert(i
< MetadataPtrs
.size());
151 return MetadataPtrs
[i
];
154 Metadata
*lookup(unsigned I
) const {
155 if (I
< MetadataPtrs
.size())
156 return MetadataPtrs
[I
];
160 void shrinkTo(unsigned N
) {
161 assert(N
<= size() && "Invalid shrinkTo request!");
162 assert(ForwardReference
.empty() && "Unexpected forward refs");
163 assert(UnresolvedNodes
.empty() && "Unexpected unresolved node");
164 MetadataPtrs
.resize(N
);
167 /// Return the given metadata, creating a replaceable forward reference if
169 Metadata
*getMetadataFwdRef(unsigned Idx
);
171 /// Return the given metadata only if it is fully resolved.
173 /// Gives the same result as \a lookup(), unless \a MDNode::isResolved()
174 /// would give \c false.
175 Metadata
*getMetadataIfResolved(unsigned Idx
);
177 MDNode
*getMDNodeFwdRefOrNull(unsigned Idx
);
178 void assignValue(Metadata
*MD
, unsigned Idx
);
179 void tryToResolveCycles();
180 bool hasFwdRefs() const { return !ForwardReference
.empty(); }
181 int getNextFwdRef() {
182 assert(hasFwdRefs());
183 return *ForwardReference
.begin();
186 /// Upgrade a type that had an MDString reference.
187 void addTypeRef(MDString
&UUID
, DICompositeType
&CT
);
189 /// Upgrade a type that had an MDString reference.
190 Metadata
*upgradeTypeRef(Metadata
*MaybeUUID
);
192 /// Upgrade a type ref array that may have MDString references.
193 Metadata
*upgradeTypeRefArray(Metadata
*MaybeTuple
);
196 Metadata
*resolveTypeRefArray(Metadata
*MaybeTuple
);
199 void BitcodeReaderMetadataList::assignValue(Metadata
*MD
, unsigned Idx
) {
200 if (auto *MDN
= dyn_cast
<MDNode
>(MD
))
201 if (!MDN
->isResolved())
202 UnresolvedNodes
.insert(Idx
);
212 TrackingMDRef
&OldMD
= MetadataPtrs
[Idx
];
218 // If there was a forward reference to this value, replace it.
219 TempMDTuple
PrevMD(cast
<MDTuple
>(OldMD
.get()));
220 PrevMD
->replaceAllUsesWith(MD
);
221 ForwardReference
.erase(Idx
);
224 Metadata
*BitcodeReaderMetadataList::getMetadataFwdRef(unsigned Idx
) {
225 // Bail out for a clearly invalid value.
226 if (Idx
>= RefsUpperBound
)
232 if (Metadata
*MD
= MetadataPtrs
[Idx
])
235 // Track forward refs to be resolved later.
236 ForwardReference
.insert(Idx
);
238 // Create and return a placeholder, which will later be RAUW'd.
239 ++NumMDNodeTemporary
;
240 Metadata
*MD
= MDNode::getTemporary(Context
, None
).release();
241 MetadataPtrs
[Idx
].reset(MD
);
245 Metadata
*BitcodeReaderMetadataList::getMetadataIfResolved(unsigned Idx
) {
246 Metadata
*MD
= lookup(Idx
);
247 if (auto *N
= dyn_cast_or_null
<MDNode
>(MD
))
248 if (!N
->isResolved())
253 MDNode
*BitcodeReaderMetadataList::getMDNodeFwdRefOrNull(unsigned Idx
) {
254 return dyn_cast_or_null
<MDNode
>(getMetadataFwdRef(Idx
));
257 void BitcodeReaderMetadataList::tryToResolveCycles() {
258 if (!ForwardReference
.empty())
259 // Still forward references... can't resolve cycles.
262 // Give up on finding a full definition for any forward decls that remain.
263 for (const auto &Ref
: OldTypeRefs
.FwdDecls
)
264 OldTypeRefs
.Final
.insert(Ref
);
265 OldTypeRefs
.FwdDecls
.clear();
267 // Upgrade from old type ref arrays. In strange cases, this could add to
268 // OldTypeRefs.Unknown.
269 for (const auto &Array
: OldTypeRefs
.Arrays
)
270 Array
.second
->replaceAllUsesWith(resolveTypeRefArray(Array
.first
.get()));
271 OldTypeRefs
.Arrays
.clear();
273 // Replace old string-based type refs with the resolved node, if possible.
274 // If we haven't seen the node, leave it to the verifier to complain about
275 // the invalid string reference.
276 for (const auto &Ref
: OldTypeRefs
.Unknown
) {
277 if (DICompositeType
*CT
= OldTypeRefs
.Final
.lookup(Ref
.first
))
278 Ref
.second
->replaceAllUsesWith(CT
);
280 Ref
.second
->replaceAllUsesWith(Ref
.first
);
282 OldTypeRefs
.Unknown
.clear();
284 if (UnresolvedNodes
.empty())
288 // Resolve any cycles.
289 for (unsigned I
: UnresolvedNodes
) {
290 auto &MD
= MetadataPtrs
[I
];
291 auto *N
= dyn_cast_or_null
<MDNode
>(MD
);
295 assert(!N
->isTemporary() && "Unexpected forward reference");
299 // Make sure we return early again until there's another unresolved ref.
300 UnresolvedNodes
.clear();
303 void BitcodeReaderMetadataList::addTypeRef(MDString
&UUID
,
304 DICompositeType
&CT
) {
305 assert(CT
.getRawIdentifier() == &UUID
&& "Mismatched UUID");
306 if (CT
.isForwardDecl())
307 OldTypeRefs
.FwdDecls
.insert(std::make_pair(&UUID
, &CT
));
309 OldTypeRefs
.Final
.insert(std::make_pair(&UUID
, &CT
));
312 Metadata
*BitcodeReaderMetadataList::upgradeTypeRef(Metadata
*MaybeUUID
) {
313 auto *UUID
= dyn_cast_or_null
<MDString
>(MaybeUUID
);
314 if (LLVM_LIKELY(!UUID
))
317 if (auto *CT
= OldTypeRefs
.Final
.lookup(UUID
))
320 auto &Ref
= OldTypeRefs
.Unknown
[UUID
];
322 Ref
= MDNode::getTemporary(Context
, None
);
326 Metadata
*BitcodeReaderMetadataList::upgradeTypeRefArray(Metadata
*MaybeTuple
) {
327 auto *Tuple
= dyn_cast_or_null
<MDTuple
>(MaybeTuple
);
328 if (!Tuple
|| Tuple
->isDistinct())
331 // Look through the array immediately if possible.
332 if (!Tuple
->isTemporary())
333 return resolveTypeRefArray(Tuple
);
335 // Create and return a placeholder to use for now. Eventually
336 // resolveTypeRefArrays() will be resolve this forward reference.
337 OldTypeRefs
.Arrays
.emplace_back(
338 std::piecewise_construct
, std::forward_as_tuple(Tuple
),
339 std::forward_as_tuple(MDTuple::getTemporary(Context
, None
)));
340 return OldTypeRefs
.Arrays
.back().second
.get();
343 Metadata
*BitcodeReaderMetadataList::resolveTypeRefArray(Metadata
*MaybeTuple
) {
344 auto *Tuple
= dyn_cast_or_null
<MDTuple
>(MaybeTuple
);
345 if (!Tuple
|| Tuple
->isDistinct())
348 // Look through the DITypeRefArray, upgrading each DIType *.
349 SmallVector
<Metadata
*, 32> Ops
;
350 Ops
.reserve(Tuple
->getNumOperands());
351 for (Metadata
*MD
: Tuple
->operands())
352 Ops
.push_back(upgradeTypeRef(MD
));
354 return MDTuple::get(Context
, Ops
);
359 class PlaceholderQueue
{
360 // Placeholders would thrash around when moved, so store in a std::deque
361 // instead of some sort of vector.
362 std::deque
<DistinctMDOperandPlaceholder
> PHs
;
365 ~PlaceholderQueue() {
366 assert(empty() && "PlaceholderQueue hasn't been flushed before being destroyed");
368 bool empty() const { return PHs
.empty(); }
369 DistinctMDOperandPlaceholder
&getPlaceholderOp(unsigned ID
);
370 void flush(BitcodeReaderMetadataList
&MetadataList
);
372 /// Return the list of temporaries nodes in the queue, these need to be
373 /// loaded before we can flush the queue.
374 void getTemporaries(BitcodeReaderMetadataList
&MetadataList
,
375 DenseSet
<unsigned> &Temporaries
) {
376 for (auto &PH
: PHs
) {
377 auto ID
= PH
.getID();
378 auto *MD
= MetadataList
.lookup(ID
);
380 Temporaries
.insert(ID
);
383 auto *N
= dyn_cast_or_null
<MDNode
>(MD
);
384 if (N
&& N
->isTemporary())
385 Temporaries
.insert(ID
);
390 } // end anonymous namespace
392 DistinctMDOperandPlaceholder
&PlaceholderQueue::getPlaceholderOp(unsigned ID
) {
393 PHs
.emplace_back(ID
);
397 void PlaceholderQueue::flush(BitcodeReaderMetadataList
&MetadataList
) {
398 while (!PHs
.empty()) {
399 auto *MD
= MetadataList
.lookup(PHs
.front().getID());
400 assert(MD
&& "Flushing placeholder on unassigned MD");
402 if (auto *MDN
= dyn_cast
<MDNode
>(MD
))
403 assert(MDN
->isResolved() &&
404 "Flushing Placeholder while cycles aren't resolved");
406 PHs
.front().replaceUseWith(MD
);
411 } // anonymous namespace
413 static Error
error(const Twine
&Message
) {
414 return make_error
<StringError
>(
415 Message
, make_error_code(BitcodeError::CorruptedBitcode
));
418 class MetadataLoader::MetadataLoaderImpl
{
419 BitcodeReaderMetadataList MetadataList
;
420 BitcodeReaderValueList
&ValueList
;
421 BitstreamCursor
&Stream
;
422 LLVMContext
&Context
;
424 std::function
<Type
*(unsigned)> getTypeByID
;
426 /// Cursor associated with the lazy-loading of Metadata. This is the easy way
427 /// to keep around the right "context" (Abbrev list) to be able to jump in
428 /// the middle of the metadata block and load any record.
429 BitstreamCursor IndexCursor
;
431 /// Index that keeps track of MDString values.
432 std::vector
<StringRef
> MDStringRef
;
434 /// On-demand loading of a single MDString. Requires the index above to be
436 MDString
*lazyLoadOneMDString(unsigned Idx
);
438 /// Index that keeps track of where to find a metadata record in the stream.
439 std::vector
<uint64_t> GlobalMetadataBitPosIndex
;
441 /// Cursor position of the start of the global decl attachments, to enable
442 /// loading using the index built for lazy loading, instead of forward
444 uint64_t GlobalDeclAttachmentPos
= 0;
447 /// Sanity check that we end up parsing all of the global decl attachments.
448 unsigned NumGlobalDeclAttachSkipped
= 0;
449 unsigned NumGlobalDeclAttachParsed
= 0;
452 /// Load the global decl attachments, using the index built for lazy loading.
453 Expected
<bool> loadGlobalDeclAttachments();
455 /// Populate the index above to enable lazily loading of metadata, and load
456 /// the named metadata as well as the transitively referenced global
458 Expected
<bool> lazyLoadModuleMetadataBlock();
460 /// On-demand loading of a single metadata. Requires the index above to be
462 void lazyLoadOneMetadata(unsigned Idx
, PlaceholderQueue
&Placeholders
);
464 // Keep mapping of seens pair of old-style CU <-> SP, and update pointers to
465 // point from SP to CU after a block is completly parsed.
466 std::vector
<std::pair
<DICompileUnit
*, Metadata
*>> CUSubprograms
;
468 /// Functions that need to be matched with subprograms when upgrading old
470 SmallDenseMap
<Function
*, DISubprogram
*, 16> FunctionsWithSPs
;
472 // Map the bitcode's custom MDKind ID to the Module's MDKind ID.
473 DenseMap
<unsigned, unsigned> MDKindMap
;
475 bool StripTBAA
= false;
476 bool HasSeenOldLoopTags
= false;
477 bool NeedUpgradeToDIGlobalVariableExpression
= false;
478 bool NeedDeclareExpressionUpgrade
= false;
480 /// True if metadata is being parsed for a module being ThinLTO imported.
481 bool IsImporting
= false;
483 Error
parseOneMetadata(SmallVectorImpl
<uint64_t> &Record
, unsigned Code
,
484 PlaceholderQueue
&Placeholders
, StringRef Blob
,
485 unsigned &NextMetadataNo
);
486 Error
parseMetadataStrings(ArrayRef
<uint64_t> Record
, StringRef Blob
,
487 function_ref
<void(StringRef
)> CallBack
);
488 Error
parseGlobalObjectAttachment(GlobalObject
&GO
,
489 ArrayRef
<uint64_t> Record
);
490 Error
parseMetadataKindRecord(SmallVectorImpl
<uint64_t> &Record
);
492 void resolveForwardRefsAndPlaceholders(PlaceholderQueue
&Placeholders
);
494 /// Upgrade old-style CU <-> SP pointers to point from SP to CU.
495 void upgradeCUSubprograms() {
496 for (auto CU_SP
: CUSubprograms
)
497 if (auto *SPs
= dyn_cast_or_null
<MDTuple
>(CU_SP
.second
))
498 for (auto &Op
: SPs
->operands())
499 if (auto *SP
= dyn_cast_or_null
<DISubprogram
>(Op
))
500 SP
->replaceUnit(CU_SP
.first
);
501 CUSubprograms
.clear();
504 /// Upgrade old-style bare DIGlobalVariables to DIGlobalVariableExpressions.
505 void upgradeCUVariables() {
506 if (!NeedUpgradeToDIGlobalVariableExpression
)
509 // Upgrade list of variables attached to the CUs.
510 if (NamedMDNode
*CUNodes
= TheModule
.getNamedMetadata("llvm.dbg.cu"))
511 for (unsigned I
= 0, E
= CUNodes
->getNumOperands(); I
!= E
; ++I
) {
512 auto *CU
= cast
<DICompileUnit
>(CUNodes
->getOperand(I
));
513 if (auto *GVs
= dyn_cast_or_null
<MDTuple
>(CU
->getRawGlobalVariables()))
514 for (unsigned I
= 0; I
< GVs
->getNumOperands(); I
++)
516 dyn_cast_or_null
<DIGlobalVariable
>(GVs
->getOperand(I
))) {
517 auto *DGVE
= DIGlobalVariableExpression::getDistinct(
518 Context
, GV
, DIExpression::get(Context
, {}));
519 GVs
->replaceOperandWith(I
, DGVE
);
523 // Upgrade variables attached to globals.
524 for (auto &GV
: TheModule
.globals()) {
525 SmallVector
<MDNode
*, 1> MDs
;
526 GV
.getMetadata(LLVMContext::MD_dbg
, MDs
);
527 GV
.eraseMetadata(LLVMContext::MD_dbg
);
529 if (auto *DGV
= dyn_cast
<DIGlobalVariable
>(MD
)) {
530 auto *DGVE
= DIGlobalVariableExpression::getDistinct(
531 Context
, DGV
, DIExpression::get(Context
, {}));
532 GV
.addMetadata(LLVMContext::MD_dbg
, *DGVE
);
534 GV
.addMetadata(LLVMContext::MD_dbg
, *MD
);
538 /// Remove a leading DW_OP_deref from DIExpressions in a dbg.declare that
539 /// describes a function argument.
540 void upgradeDeclareExpressions(Function
&F
) {
541 if (!NeedDeclareExpressionUpgrade
)
546 if (auto *DDI
= dyn_cast
<DbgDeclareInst
>(&I
))
547 if (auto *DIExpr
= DDI
->getExpression())
548 if (DIExpr
->startsWithDeref() &&
549 dyn_cast_or_null
<Argument
>(DDI
->getAddress())) {
550 SmallVector
<uint64_t, 8> Ops
;
551 Ops
.append(std::next(DIExpr
->elements_begin()),
552 DIExpr
->elements_end());
553 DDI
->setExpression(DIExpression::get(Context
, Ops
));
557 /// Upgrade the expression from previous versions.
558 Error
upgradeDIExpression(uint64_t FromVersion
,
559 MutableArrayRef
<uint64_t> &Expr
,
560 SmallVectorImpl
<uint64_t> &Buffer
) {
561 auto N
= Expr
.size();
562 switch (FromVersion
) {
564 return error("Invalid record");
566 if (N
>= 3 && Expr
[N
- 3] == dwarf::DW_OP_bit_piece
)
567 Expr
[N
- 3] = dwarf::DW_OP_LLVM_fragment
;
570 // Move DW_OP_deref to the end.
571 if (N
&& Expr
[0] == dwarf::DW_OP_deref
) {
572 auto End
= Expr
.end();
573 if (Expr
.size() >= 3 &&
574 *std::prev(End
, 3) == dwarf::DW_OP_LLVM_fragment
)
575 End
= std::prev(End
, 3);
576 std::move(std::next(Expr
.begin()), End
, Expr
.begin());
577 *std::prev(End
) = dwarf::DW_OP_deref
;
579 NeedDeclareExpressionUpgrade
= true;
582 // Change DW_OP_plus to DW_OP_plus_uconst.
583 // Change DW_OP_minus to DW_OP_uconst, DW_OP_minus
584 auto SubExpr
= ArrayRef
<uint64_t>(Expr
);
585 while (!SubExpr
.empty()) {
586 // Skip past other operators with their operands
587 // for this version of the IR, obtained from
588 // from historic DIExpression::ExprOperand::getSize().
590 switch (SubExpr
.front()) {
594 case dwarf::DW_OP_constu
:
595 case dwarf::DW_OP_minus
:
596 case dwarf::DW_OP_plus
:
599 case dwarf::DW_OP_LLVM_fragment
:
604 // If the expression is malformed, make sure we don't
605 // copy more elements than we should.
606 HistoricSize
= std::min(SubExpr
.size(), HistoricSize
);
607 ArrayRef
<uint64_t> Args
= SubExpr
.slice(1, HistoricSize
-1);
609 switch (SubExpr
.front()) {
610 case dwarf::DW_OP_plus
:
611 Buffer
.push_back(dwarf::DW_OP_plus_uconst
);
612 Buffer
.append(Args
.begin(), Args
.end());
614 case dwarf::DW_OP_minus
:
615 Buffer
.push_back(dwarf::DW_OP_constu
);
616 Buffer
.append(Args
.begin(), Args
.end());
617 Buffer
.push_back(dwarf::DW_OP_minus
);
620 Buffer
.push_back(*SubExpr
.begin());
621 Buffer
.append(Args
.begin(), Args
.end());
625 // Continue with remaining elements.
626 SubExpr
= SubExpr
.slice(HistoricSize
);
628 Expr
= MutableArrayRef
<uint64_t>(Buffer
);
636 return Error::success();
639 void upgradeDebugInfo() {
640 upgradeCUSubprograms();
641 upgradeCUVariables();
645 MetadataLoaderImpl(BitstreamCursor
&Stream
, Module
&TheModule
,
646 BitcodeReaderValueList
&ValueList
,
647 std::function
<Type
*(unsigned)> getTypeByID
,
649 : MetadataList(TheModule
.getContext(), Stream
.SizeInBytes()),
650 ValueList(ValueList
), Stream(Stream
), Context(TheModule
.getContext()),
651 TheModule(TheModule
), getTypeByID(std::move(getTypeByID
)),
652 IsImporting(IsImporting
) {}
654 Error
parseMetadata(bool ModuleLevel
);
656 bool hasFwdRefs() const { return MetadataList
.hasFwdRefs(); }
658 Metadata
*getMetadataFwdRefOrLoad(unsigned ID
) {
659 if (ID
< MDStringRef
.size())
660 return lazyLoadOneMDString(ID
);
661 if (auto *MD
= MetadataList
.lookup(ID
))
663 // If lazy-loading is enabled, we try recursively to load the operand
664 // instead of creating a temporary.
665 if (ID
< (MDStringRef
.size() + GlobalMetadataBitPosIndex
.size())) {
666 PlaceholderQueue Placeholders
;
667 lazyLoadOneMetadata(ID
, Placeholders
);
668 resolveForwardRefsAndPlaceholders(Placeholders
);
669 return MetadataList
.lookup(ID
);
671 return MetadataList
.getMetadataFwdRef(ID
);
674 DISubprogram
*lookupSubprogramForFunction(Function
*F
) {
675 return FunctionsWithSPs
.lookup(F
);
678 bool hasSeenOldLoopTags() const { return HasSeenOldLoopTags
; }
680 Error
parseMetadataAttachment(
681 Function
&F
, const SmallVectorImpl
<Instruction
*> &InstructionList
);
683 Error
parseMetadataKinds();
685 void setStripTBAA(bool Value
) { StripTBAA
= Value
; }
686 bool isStrippingTBAA() const { return StripTBAA
; }
688 unsigned size() const { return MetadataList
.size(); }
689 void shrinkTo(unsigned N
) { MetadataList
.shrinkTo(N
); }
690 void upgradeDebugIntrinsics(Function
&F
) { upgradeDeclareExpressions(F
); }
694 MetadataLoader::MetadataLoaderImpl::lazyLoadModuleMetadataBlock() {
695 IndexCursor
= Stream
;
696 SmallVector
<uint64_t, 64> Record
;
697 GlobalDeclAttachmentPos
= 0;
698 // Get the abbrevs, and preload record positions to make them lazy-loadable.
700 uint64_t SavedPos
= IndexCursor
.GetCurrentBitNo();
701 Expected
<BitstreamEntry
> MaybeEntry
= IndexCursor
.advanceSkippingSubblocks(
702 BitstreamCursor::AF_DontPopBlockAtEnd
);
704 return MaybeEntry
.takeError();
705 BitstreamEntry Entry
= MaybeEntry
.get();
707 switch (Entry
.Kind
) {
708 case BitstreamEntry::SubBlock
: // Handled for us already.
709 case BitstreamEntry::Error
:
710 return error("Malformed block");
711 case BitstreamEntry::EndBlock
: {
714 case BitstreamEntry::Record
: {
715 // The interesting case.
717 uint64_t CurrentPos
= IndexCursor
.GetCurrentBitNo();
718 Expected
<unsigned> MaybeCode
= IndexCursor
.skipRecord(Entry
.ID
);
720 return MaybeCode
.takeError();
721 unsigned Code
= MaybeCode
.get();
723 case bitc::METADATA_STRINGS
: {
724 // Rewind and parse the strings.
725 if (Error Err
= IndexCursor
.JumpToBit(CurrentPos
))
726 return std::move(Err
);
729 if (Expected
<unsigned> MaybeRecord
=
730 IndexCursor
.readRecord(Entry
.ID
, Record
, &Blob
))
733 return MaybeRecord
.takeError();
734 unsigned NumStrings
= Record
[0];
735 MDStringRef
.reserve(NumStrings
);
736 auto IndexNextMDString
= [&](StringRef Str
) {
737 MDStringRef
.push_back(Str
);
739 if (auto Err
= parseMetadataStrings(Record
, Blob
, IndexNextMDString
))
740 return std::move(Err
);
743 case bitc::METADATA_INDEX_OFFSET
: {
744 // This is the offset to the index, when we see this we skip all the
745 // records and load only an index to these.
746 if (Error Err
= IndexCursor
.JumpToBit(CurrentPos
))
747 return std::move(Err
);
749 if (Expected
<unsigned> MaybeRecord
=
750 IndexCursor
.readRecord(Entry
.ID
, Record
))
753 return MaybeRecord
.takeError();
754 if (Record
.size() != 2)
755 return error("Invalid record");
756 auto Offset
= Record
[0] + (Record
[1] << 32);
757 auto BeginPos
= IndexCursor
.GetCurrentBitNo();
758 if (Error Err
= IndexCursor
.JumpToBit(BeginPos
+ Offset
))
759 return std::move(Err
);
760 Expected
<BitstreamEntry
> MaybeEntry
=
761 IndexCursor
.advanceSkippingSubblocks(
762 BitstreamCursor::AF_DontPopBlockAtEnd
);
764 return MaybeEntry
.takeError();
765 Entry
= MaybeEntry
.get();
766 assert(Entry
.Kind
== BitstreamEntry::Record
&&
767 "Corrupted bitcode: Expected `Record` when trying to find the "
770 if (Expected
<unsigned> MaybeCode
=
771 IndexCursor
.readRecord(Entry
.ID
, Record
))
772 assert(MaybeCode
.get() == bitc::METADATA_INDEX
&&
773 "Corrupted bitcode: Expected `METADATA_INDEX` when trying to "
774 "find the Metadata index");
776 return MaybeCode
.takeError();
778 auto CurrentValue
= BeginPos
;
779 GlobalMetadataBitPosIndex
.reserve(Record
.size());
780 for (auto &Elt
: Record
) {
782 GlobalMetadataBitPosIndex
.push_back(CurrentValue
);
786 case bitc::METADATA_INDEX
:
787 // We don't expect to get there, the Index is loaded when we encounter
789 return error("Corrupted Metadata block");
790 case bitc::METADATA_NAME
: {
791 // Named metadata need to be materialized now and aren't deferred.
792 if (Error Err
= IndexCursor
.JumpToBit(CurrentPos
))
793 return std::move(Err
);
797 if (Expected
<unsigned> MaybeCode
=
798 IndexCursor
.readRecord(Entry
.ID
, Record
)) {
799 Code
= MaybeCode
.get();
800 assert(Code
== bitc::METADATA_NAME
);
802 return MaybeCode
.takeError();
804 // Read name of the named metadata.
805 SmallString
<8> Name(Record
.begin(), Record
.end());
806 if (Expected
<unsigned> MaybeCode
= IndexCursor
.ReadCode())
807 Code
= MaybeCode
.get();
809 return MaybeCode
.takeError();
811 // Named Metadata comes in two parts, we expect the name to be followed
814 if (Expected
<unsigned> MaybeNextBitCode
=
815 IndexCursor
.readRecord(Code
, Record
))
816 assert(MaybeNextBitCode
.get() == bitc::METADATA_NAMED_NODE
);
818 return MaybeNextBitCode
.takeError();
820 // Read named metadata elements.
821 unsigned Size
= Record
.size();
822 NamedMDNode
*NMD
= TheModule
.getOrInsertNamedMetadata(Name
);
823 for (unsigned i
= 0; i
!= Size
; ++i
) {
824 // FIXME: We could use a placeholder here, however NamedMDNode are
825 // taking MDNode as operand and not using the Metadata infrastructure.
826 // It is acknowledged by 'TODO: Inherit from Metadata' in the
827 // NamedMDNode class definition.
828 MDNode
*MD
= MetadataList
.getMDNodeFwdRefOrNull(Record
[i
]);
829 assert(MD
&& "Invalid metadata: expect fwd ref to MDNode");
834 case bitc::METADATA_GLOBAL_DECL_ATTACHMENT
: {
835 if (!GlobalDeclAttachmentPos
)
836 GlobalDeclAttachmentPos
= SavedPos
;
838 NumGlobalDeclAttachSkipped
++;
842 case bitc::METADATA_KIND
:
843 case bitc::METADATA_STRING_OLD
:
844 case bitc::METADATA_OLD_FN_NODE
:
845 case bitc::METADATA_OLD_NODE
:
846 case bitc::METADATA_VALUE
:
847 case bitc::METADATA_DISTINCT_NODE
:
848 case bitc::METADATA_NODE
:
849 case bitc::METADATA_LOCATION
:
850 case bitc::METADATA_GENERIC_DEBUG
:
851 case bitc::METADATA_SUBRANGE
:
852 case bitc::METADATA_ENUMERATOR
:
853 case bitc::METADATA_BASIC_TYPE
:
854 case bitc::METADATA_STRING_TYPE
:
855 case bitc::METADATA_DERIVED_TYPE
:
856 case bitc::METADATA_COMPOSITE_TYPE
:
857 case bitc::METADATA_SUBROUTINE_TYPE
:
858 case bitc::METADATA_MODULE
:
859 case bitc::METADATA_FILE
:
860 case bitc::METADATA_COMPILE_UNIT
:
861 case bitc::METADATA_SUBPROGRAM
:
862 case bitc::METADATA_LEXICAL_BLOCK
:
863 case bitc::METADATA_LEXICAL_BLOCK_FILE
:
864 case bitc::METADATA_NAMESPACE
:
865 case bitc::METADATA_COMMON_BLOCK
:
866 case bitc::METADATA_MACRO
:
867 case bitc::METADATA_MACRO_FILE
:
868 case bitc::METADATA_TEMPLATE_TYPE
:
869 case bitc::METADATA_TEMPLATE_VALUE
:
870 case bitc::METADATA_GLOBAL_VAR
:
871 case bitc::METADATA_LOCAL_VAR
:
872 case bitc::METADATA_LABEL
:
873 case bitc::METADATA_EXPRESSION
:
874 case bitc::METADATA_OBJC_PROPERTY
:
875 case bitc::METADATA_IMPORTED_ENTITY
:
876 case bitc::METADATA_GLOBAL_VAR_EXPR
:
877 case bitc::METADATA_GENERIC_SUBRANGE
:
878 // We don't expect to see any of these, if we see one, give up on
879 // lazy-loading and fallback.
881 GlobalMetadataBitPosIndex
.clear();
890 // Load the global decl attachments after building the lazy loading index.
891 // We don't load them "lazily" - all global decl attachments must be
892 // parsed since they aren't materialized on demand. However, by delaying
893 // their parsing until after the index is created, we can use the index
894 // instead of creating temporaries.
895 Expected
<bool> MetadataLoader::MetadataLoaderImpl::loadGlobalDeclAttachments() {
896 // Nothing to do if we didn't find any of these metadata records.
897 if (!GlobalDeclAttachmentPos
)
899 // Use a temporary cursor so that we don't mess up the main Stream cursor or
900 // the lazy loading IndexCursor (which holds the necessary abbrev ids).
901 BitstreamCursor TempCursor
= Stream
;
902 SmallVector
<uint64_t, 64> Record
;
903 // Jump to the position before the first global decl attachment, so we can
904 // scan for the first BitstreamEntry record.
905 if (Error Err
= TempCursor
.JumpToBit(GlobalDeclAttachmentPos
))
906 return std::move(Err
);
908 Expected
<BitstreamEntry
> MaybeEntry
= TempCursor
.advanceSkippingSubblocks(
909 BitstreamCursor::AF_DontPopBlockAtEnd
);
911 return MaybeEntry
.takeError();
912 BitstreamEntry Entry
= MaybeEntry
.get();
914 switch (Entry
.Kind
) {
915 case BitstreamEntry::SubBlock
: // Handled for us already.
916 case BitstreamEntry::Error
:
917 return error("Malformed block");
918 case BitstreamEntry::EndBlock
:
919 // Sanity check that we parsed them all.
920 assert(NumGlobalDeclAttachSkipped
== NumGlobalDeclAttachParsed
);
922 case BitstreamEntry::Record
:
925 uint64_t CurrentPos
= TempCursor
.GetCurrentBitNo();
926 Expected
<unsigned> MaybeCode
= TempCursor
.skipRecord(Entry
.ID
);
928 return MaybeCode
.takeError();
929 if (MaybeCode
.get() != bitc::METADATA_GLOBAL_DECL_ATTACHMENT
) {
930 // Anything other than a global decl attachment signals the end of
931 // these records. sanity check that we parsed them all.
932 assert(NumGlobalDeclAttachSkipped
== NumGlobalDeclAttachParsed
);
936 NumGlobalDeclAttachParsed
++;
938 // FIXME: we need to do this early because we don't materialize global
940 if (Error Err
= TempCursor
.JumpToBit(CurrentPos
))
941 return std::move(Err
);
943 if (Expected
<unsigned> MaybeRecord
=
944 TempCursor
.readRecord(Entry
.ID
, Record
))
947 return MaybeRecord
.takeError();
948 if (Record
.size() % 2 == 0)
949 return error("Invalid record");
950 unsigned ValueID
= Record
[0];
951 if (ValueID
>= ValueList
.size())
952 return error("Invalid record");
953 if (auto *GO
= dyn_cast
<GlobalObject
>(ValueList
[ValueID
])) {
954 // Need to save and restore the current position since
955 // parseGlobalObjectAttachment will resolve all forward references which
956 // would require parsing from locations stored in the index.
957 CurrentPos
= TempCursor
.GetCurrentBitNo();
958 if (Error Err
= parseGlobalObjectAttachment(
959 *GO
, ArrayRef
<uint64_t>(Record
).slice(1)))
960 return std::move(Err
);
961 if (Error Err
= TempCursor
.JumpToBit(CurrentPos
))
962 return std::move(Err
);
967 /// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
968 /// module level metadata.
969 Error
MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel
) {
970 if (!ModuleLevel
&& MetadataList
.hasFwdRefs())
971 return error("Invalid metadata: fwd refs into function blocks");
973 // Record the entry position so that we can jump back here and efficiently
974 // skip the whole block in case we lazy-load.
975 auto EntryPos
= Stream
.GetCurrentBitNo();
977 if (Error Err
= Stream
.EnterSubBlock(bitc::METADATA_BLOCK_ID
))
980 SmallVector
<uint64_t, 64> Record
;
981 PlaceholderQueue Placeholders
;
983 // We lazy-load module-level metadata: we build an index for each record, and
984 // then load individual record as needed, starting with the named metadata.
985 if (ModuleLevel
&& IsImporting
&& MetadataList
.empty() &&
986 !DisableLazyLoading
) {
987 auto SuccessOrErr
= lazyLoadModuleMetadataBlock();
989 return SuccessOrErr
.takeError();
990 if (SuccessOrErr
.get()) {
991 // An index was successfully created and we will be able to load metadata
993 MetadataList
.resize(MDStringRef
.size() +
994 GlobalMetadataBitPosIndex
.size());
996 // Now that we have built the index, load the global decl attachments
997 // that were deferred during that process. This avoids creating
999 SuccessOrErr
= loadGlobalDeclAttachments();
1001 return SuccessOrErr
.takeError();
1002 assert(SuccessOrErr
.get());
1004 // Reading the named metadata created forward references and/or
1005 // placeholders, that we flush here.
1006 resolveForwardRefsAndPlaceholders(Placeholders
);
1008 // Return at the beginning of the block, since it is easy to skip it
1009 // entirely from there.
1010 Stream
.ReadBlockEnd(); // Pop the abbrev block context.
1011 if (Error Err
= IndexCursor
.JumpToBit(EntryPos
))
1013 if (Error Err
= Stream
.SkipBlock()) {
1014 // FIXME this drops the error on the floor, which
1015 // ThinLTO/X86/debuginfo-cu-import.ll relies on.
1016 consumeError(std::move(Err
));
1017 return Error::success();
1019 return Error::success();
1021 // Couldn't load an index, fallback to loading all the block "old-style".
1024 unsigned NextMetadataNo
= MetadataList
.size();
1026 // Read all the records.
1028 Expected
<BitstreamEntry
> MaybeEntry
= Stream
.advanceSkippingSubblocks();
1030 return MaybeEntry
.takeError();
1031 BitstreamEntry Entry
= MaybeEntry
.get();
1033 switch (Entry
.Kind
) {
1034 case BitstreamEntry::SubBlock
: // Handled for us already.
1035 case BitstreamEntry::Error
:
1036 return error("Malformed block");
1037 case BitstreamEntry::EndBlock
:
1038 resolveForwardRefsAndPlaceholders(Placeholders
);
1040 return Error::success();
1041 case BitstreamEntry::Record
:
1042 // The interesting case.
1049 ++NumMDRecordLoaded
;
1050 if (Expected
<unsigned> MaybeCode
=
1051 Stream
.readRecord(Entry
.ID
, Record
, &Blob
)) {
1052 if (Error Err
= parseOneMetadata(Record
, MaybeCode
.get(), Placeholders
,
1053 Blob
, NextMetadataNo
))
1056 return MaybeCode
.takeError();
1060 MDString
*MetadataLoader::MetadataLoaderImpl::lazyLoadOneMDString(unsigned ID
) {
1061 ++NumMDStringLoaded
;
1062 if (Metadata
*MD
= MetadataList
.lookup(ID
))
1063 return cast
<MDString
>(MD
);
1064 auto MDS
= MDString::get(Context
, MDStringRef
[ID
]);
1065 MetadataList
.assignValue(MDS
, ID
);
1069 void MetadataLoader::MetadataLoaderImpl::lazyLoadOneMetadata(
1070 unsigned ID
, PlaceholderQueue
&Placeholders
) {
1071 assert(ID
< (MDStringRef
.size()) + GlobalMetadataBitPosIndex
.size());
1072 assert(ID
>= MDStringRef
.size() && "Unexpected lazy-loading of MDString");
1073 // Lookup first if the metadata hasn't already been loaded.
1074 if (auto *MD
= MetadataList
.lookup(ID
)) {
1075 auto *N
= cast
<MDNode
>(MD
);
1076 if (!N
->isTemporary())
1079 SmallVector
<uint64_t, 64> Record
;
1081 if (Error Err
= IndexCursor
.JumpToBit(
1082 GlobalMetadataBitPosIndex
[ID
- MDStringRef
.size()]))
1083 report_fatal_error("lazyLoadOneMetadata failed jumping: " +
1084 toString(std::move(Err
)));
1085 Expected
<BitstreamEntry
> MaybeEntry
= IndexCursor
.advanceSkippingSubblocks();
1087 // FIXME this drops the error on the floor.
1088 report_fatal_error("lazyLoadOneMetadata failed advanceSkippingSubblocks: " +
1089 toString(MaybeEntry
.takeError()));
1090 BitstreamEntry Entry
= MaybeEntry
.get();
1091 ++NumMDRecordLoaded
;
1092 if (Expected
<unsigned> MaybeCode
=
1093 IndexCursor
.readRecord(Entry
.ID
, Record
, &Blob
)) {
1095 parseOneMetadata(Record
, MaybeCode
.get(), Placeholders
, Blob
, ID
))
1096 report_fatal_error("Can't lazyload MD, parseOneMetadata: " +
1097 toString(std::move(Err
)));
1099 report_fatal_error("Can't lazyload MD: " + toString(MaybeCode
.takeError()));
1102 /// Ensure that all forward-references and placeholders are resolved.
1103 /// Iteratively lazy-loading metadata on-demand if needed.
1104 void MetadataLoader::MetadataLoaderImpl::resolveForwardRefsAndPlaceholders(
1105 PlaceholderQueue
&Placeholders
) {
1106 DenseSet
<unsigned> Temporaries
;
1108 // Populate Temporaries with the placeholders that haven't been loaded yet.
1109 Placeholders
.getTemporaries(MetadataList
, Temporaries
);
1111 // If we don't have any temporary, or FwdReference, we're done!
1112 if (Temporaries
.empty() && !MetadataList
.hasFwdRefs())
1115 // First, load all the temporaries. This can add new placeholders or
1116 // forward references.
1117 for (auto ID
: Temporaries
)
1118 lazyLoadOneMetadata(ID
, Placeholders
);
1119 Temporaries
.clear();
1121 // Second, load the forward-references. This can also add new placeholders
1122 // or forward references.
1123 while (MetadataList
.hasFwdRefs())
1124 lazyLoadOneMetadata(MetadataList
.getNextFwdRef(), Placeholders
);
1126 // At this point we don't have any forward reference remaining, or temporary
1127 // that haven't been loaded. We can safely drop RAUW support and mark cycles
1129 MetadataList
.tryToResolveCycles();
1131 // Finally, everything is in place, we can replace the placeholders operands
1132 // with the final node they refer to.
1133 Placeholders
.flush(MetadataList
);
1136 Error
MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
1137 SmallVectorImpl
<uint64_t> &Record
, unsigned Code
,
1138 PlaceholderQueue
&Placeholders
, StringRef Blob
, unsigned &NextMetadataNo
) {
1140 bool IsDistinct
= false;
1141 auto getMD
= [&](unsigned ID
) -> Metadata
* {
1142 if (ID
< MDStringRef
.size())
1143 return lazyLoadOneMDString(ID
);
1145 if (auto *MD
= MetadataList
.lookup(ID
))
1147 // If lazy-loading is enabled, we try recursively to load the operand
1148 // instead of creating a temporary.
1149 if (ID
< (MDStringRef
.size() + GlobalMetadataBitPosIndex
.size())) {
1150 // Create a temporary for the node that is referencing the operand we
1151 // will lazy-load. It is needed before recursing in case there are
1153 MetadataList
.getMetadataFwdRef(NextMetadataNo
);
1154 lazyLoadOneMetadata(ID
, Placeholders
);
1155 return MetadataList
.lookup(ID
);
1157 // Return a temporary.
1158 return MetadataList
.getMetadataFwdRef(ID
);
1160 if (auto *MD
= MetadataList
.getMetadataIfResolved(ID
))
1162 return &Placeholders
.getPlaceholderOp(ID
);
1164 auto getMDOrNull
= [&](unsigned ID
) -> Metadata
* {
1166 return getMD(ID
- 1);
1169 auto getMDOrNullWithoutPlaceholders
= [&](unsigned ID
) -> Metadata
* {
1171 return MetadataList
.getMetadataFwdRef(ID
- 1);
1174 auto getMDString
= [&](unsigned ID
) -> MDString
* {
1175 // This requires that the ID is not really a forward reference. In
1176 // particular, the MDString must already have been resolved.
1177 auto MDS
= getMDOrNull(ID
);
1178 return cast_or_null
<MDString
>(MDS
);
1181 // Support for old type refs.
1182 auto getDITypeRefOrNull
= [&](unsigned ID
) {
1183 return MetadataList
.upgradeTypeRef(getMDOrNull(ID
));
1186 #define GET_OR_DISTINCT(CLASS, ARGS) \
1187 (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
1190 default: // Default behavior: ignore.
1192 case bitc::METADATA_NAME
: {
1193 // Read name of the named metadata.
1194 SmallString
<8> Name(Record
.begin(), Record
.end());
1196 Expected
<unsigned> MaybeCode
= Stream
.ReadCode();
1198 return MaybeCode
.takeError();
1199 Code
= MaybeCode
.get();
1201 ++NumMDRecordLoaded
;
1202 if (Expected
<unsigned> MaybeNextBitCode
= Stream
.readRecord(Code
, Record
)) {
1203 if (MaybeNextBitCode
.get() != bitc::METADATA_NAMED_NODE
)
1204 return error("METADATA_NAME not followed by METADATA_NAMED_NODE");
1206 return MaybeNextBitCode
.takeError();
1208 // Read named metadata elements.
1209 unsigned Size
= Record
.size();
1210 NamedMDNode
*NMD
= TheModule
.getOrInsertNamedMetadata(Name
);
1211 for (unsigned i
= 0; i
!= Size
; ++i
) {
1212 MDNode
*MD
= MetadataList
.getMDNodeFwdRefOrNull(Record
[i
]);
1214 return error("Invalid named metadata: expect fwd ref to MDNode");
1215 NMD
->addOperand(MD
);
1219 case bitc::METADATA_OLD_FN_NODE
: {
1220 // Deprecated, but still needed to read old bitcode files.
1221 // This is a LocalAsMetadata record, the only type of function-local
1223 if (Record
.size() % 2 == 1)
1224 return error("Invalid record");
1226 // If this isn't a LocalAsMetadata record, we're dropping it. This used
1227 // to be legal, but there's no upgrade path.
1228 auto dropRecord
= [&] {
1229 MetadataList
.assignValue(MDNode::get(Context
, None
), NextMetadataNo
);
1232 if (Record
.size() != 2) {
1237 Type
*Ty
= getTypeByID(Record
[0]);
1238 if (Ty
->isMetadataTy() || Ty
->isVoidTy()) {
1243 MetadataList
.assignValue(
1244 LocalAsMetadata::get(ValueList
.getValueFwdRef(Record
[1], Ty
)),
1249 case bitc::METADATA_OLD_NODE
: {
1250 // Deprecated, but still needed to read old bitcode files.
1251 if (Record
.size() % 2 == 1)
1252 return error("Invalid record");
1254 unsigned Size
= Record
.size();
1255 SmallVector
<Metadata
*, 8> Elts
;
1256 for (unsigned i
= 0; i
!= Size
; i
+= 2) {
1257 Type
*Ty
= getTypeByID(Record
[i
]);
1259 return error("Invalid record");
1260 if (Ty
->isMetadataTy())
1261 Elts
.push_back(getMD(Record
[i
+ 1]));
1262 else if (!Ty
->isVoidTy()) {
1264 ValueAsMetadata::get(ValueList
.getValueFwdRef(Record
[i
+ 1], Ty
));
1265 assert(isa
<ConstantAsMetadata
>(MD
) &&
1266 "Expected non-function-local metadata");
1269 Elts
.push_back(nullptr);
1271 MetadataList
.assignValue(MDNode::get(Context
, Elts
), NextMetadataNo
);
1275 case bitc::METADATA_VALUE
: {
1276 if (Record
.size() != 2)
1277 return error("Invalid record");
1279 Type
*Ty
= getTypeByID(Record
[0]);
1280 if (Ty
->isMetadataTy() || Ty
->isVoidTy())
1281 return error("Invalid record");
1283 MetadataList
.assignValue(
1284 ValueAsMetadata::get(ValueList
.getValueFwdRef(Record
[1], Ty
)),
1289 case bitc::METADATA_DISTINCT_NODE
:
1292 case bitc::METADATA_NODE
: {
1293 SmallVector
<Metadata
*, 8> Elts
;
1294 Elts
.reserve(Record
.size());
1295 for (unsigned ID
: Record
)
1296 Elts
.push_back(getMDOrNull(ID
));
1297 MetadataList
.assignValue(IsDistinct
? MDNode::getDistinct(Context
, Elts
)
1298 : MDNode::get(Context
, Elts
),
1303 case bitc::METADATA_LOCATION
: {
1304 if (Record
.size() != 5 && Record
.size() != 6)
1305 return error("Invalid record");
1307 IsDistinct
= Record
[0];
1308 unsigned Line
= Record
[1];
1309 unsigned Column
= Record
[2];
1310 Metadata
*Scope
= getMD(Record
[3]);
1311 Metadata
*InlinedAt
= getMDOrNull(Record
[4]);
1312 bool ImplicitCode
= Record
.size() == 6 && Record
[5];
1313 MetadataList
.assignValue(
1314 GET_OR_DISTINCT(DILocation
, (Context
, Line
, Column
, Scope
, InlinedAt
,
1320 case bitc::METADATA_GENERIC_DEBUG
: {
1321 if (Record
.size() < 4)
1322 return error("Invalid record");
1324 IsDistinct
= Record
[0];
1325 unsigned Tag
= Record
[1];
1326 unsigned Version
= Record
[2];
1328 if (Tag
>= 1u << 16 || Version
!= 0)
1329 return error("Invalid record");
1331 auto *Header
= getMDString(Record
[3]);
1332 SmallVector
<Metadata
*, 8> DwarfOps
;
1333 for (unsigned I
= 4, E
= Record
.size(); I
!= E
; ++I
)
1334 DwarfOps
.push_back(getMDOrNull(Record
[I
]));
1335 MetadataList
.assignValue(
1336 GET_OR_DISTINCT(GenericDINode
, (Context
, Tag
, Header
, DwarfOps
)),
1341 case bitc::METADATA_SUBRANGE
: {
1342 Metadata
*Val
= nullptr;
1343 // Operand 'count' is interpreted as:
1344 // - Signed integer (version 0)
1345 // - Metadata node (version 1)
1346 // Operand 'lowerBound' is interpreted as:
1347 // - Signed integer (version 0 and 1)
1348 // - Metadata node (version 2)
1349 // Operands 'upperBound' and 'stride' are interpreted as:
1350 // - Metadata node (version 2)
1351 switch (Record
[0] >> 1) {
1353 Val
= GET_OR_DISTINCT(DISubrange
,
1354 (Context
, Record
[1], unrotateSign(Record
[2])));
1357 Val
= GET_OR_DISTINCT(DISubrange
, (Context
, getMDOrNull(Record
[1]),
1358 unrotateSign(Record
[2])));
1361 Val
= GET_OR_DISTINCT(
1362 DISubrange
, (Context
, getMDOrNull(Record
[1]), getMDOrNull(Record
[2]),
1363 getMDOrNull(Record
[3]), getMDOrNull(Record
[4])));
1366 return error("Invalid record: Unsupported version of DISubrange");
1369 MetadataList
.assignValue(Val
, NextMetadataNo
);
1370 IsDistinct
= Record
[0] & 1;
1374 case bitc::METADATA_GENERIC_SUBRANGE
: {
1375 Metadata
*Val
= nullptr;
1376 Val
= GET_OR_DISTINCT(DIGenericSubrange
,
1377 (Context
, getMDOrNull(Record
[1]),
1378 getMDOrNull(Record
[2]), getMDOrNull(Record
[3]),
1379 getMDOrNull(Record
[4])));
1381 MetadataList
.assignValue(Val
, NextMetadataNo
);
1382 IsDistinct
= Record
[0] & 1;
1386 case bitc::METADATA_ENUMERATOR
: {
1387 if (Record
.size() < 3)
1388 return error("Invalid record");
1390 IsDistinct
= Record
[0] & 1;
1391 bool IsUnsigned
= Record
[0] & 2;
1392 bool IsBigInt
= Record
[0] & 4;
1396 const uint64_t BitWidth
= Record
[1];
1397 const size_t NumWords
= Record
.size() - 3;
1398 Value
= readWideAPInt(makeArrayRef(&Record
[3], NumWords
), BitWidth
);
1400 Value
= APInt(64, unrotateSign(Record
[1]), !IsUnsigned
);
1402 MetadataList
.assignValue(
1403 GET_OR_DISTINCT(DIEnumerator
,
1404 (Context
, Value
, IsUnsigned
, getMDString(Record
[2]))),
1409 case bitc::METADATA_BASIC_TYPE
: {
1410 if (Record
.size() < 6 || Record
.size() > 7)
1411 return error("Invalid record");
1413 IsDistinct
= Record
[0];
1414 DINode::DIFlags Flags
= (Record
.size() > 6) ?
1415 static_cast<DINode::DIFlags
>(Record
[6]) : DINode::FlagZero
;
1417 MetadataList
.assignValue(
1418 GET_OR_DISTINCT(DIBasicType
,
1419 (Context
, Record
[1], getMDString(Record
[2]), Record
[3],
1420 Record
[4], Record
[5], Flags
)),
1425 case bitc::METADATA_STRING_TYPE
: {
1426 if (Record
.size() != 8)
1427 return error("Invalid record");
1429 IsDistinct
= Record
[0];
1430 MetadataList
.assignValue(
1431 GET_OR_DISTINCT(DIStringType
,
1432 (Context
, Record
[1], getMDString(Record
[2]),
1433 getMDOrNull(Record
[3]), getMDOrNull(Record
[4]),
1434 Record
[5], Record
[6], Record
[7])),
1439 case bitc::METADATA_DERIVED_TYPE
: {
1440 if (Record
.size() < 12 || Record
.size() > 14)
1441 return error("Invalid record");
1443 // DWARF address space is encoded as N->getDWARFAddressSpace() + 1. 0 means
1444 // that there is no DWARF address space associated with DIDerivedType.
1445 Optional
<unsigned> DWARFAddressSpace
;
1446 if (Record
.size() > 12 && Record
[12])
1447 DWARFAddressSpace
= Record
[12] - 1;
1449 Metadata
*Annotations
= nullptr;
1450 if (Record
.size() > 13 && Record
[13])
1451 Annotations
= getMDOrNull(Record
[13]);
1453 IsDistinct
= Record
[0];
1454 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[10]);
1455 MetadataList
.assignValue(
1456 GET_OR_DISTINCT(DIDerivedType
,
1457 (Context
, Record
[1], getMDString(Record
[2]),
1458 getMDOrNull(Record
[3]), Record
[4],
1459 getDITypeRefOrNull(Record
[5]),
1460 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1461 Record
[9], DWARFAddressSpace
, Flags
,
1462 getDITypeRefOrNull(Record
[11]), Annotations
)),
1467 case bitc::METADATA_COMPOSITE_TYPE
: {
1468 if (Record
.size() < 16 || Record
.size() > 22)
1469 return error("Invalid record");
1471 // If we have a UUID and this is not a forward declaration, lookup the
1473 IsDistinct
= Record
[0] & 0x1;
1474 bool IsNotUsedInTypeRef
= Record
[0] >= 2;
1475 unsigned Tag
= Record
[1];
1476 MDString
*Name
= getMDString(Record
[2]);
1477 Metadata
*File
= getMDOrNull(Record
[3]);
1478 unsigned Line
= Record
[4];
1479 Metadata
*Scope
= getDITypeRefOrNull(Record
[5]);
1480 Metadata
*BaseType
= nullptr;
1481 uint64_t SizeInBits
= Record
[7];
1482 if (Record
[8] > (uint64_t)std::numeric_limits
<uint32_t>::max())
1483 return error("Alignment value is too large");
1484 uint32_t AlignInBits
= Record
[8];
1485 uint64_t OffsetInBits
= 0;
1486 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[10]);
1487 Metadata
*Elements
= nullptr;
1488 unsigned RuntimeLang
= Record
[12];
1489 Metadata
*VTableHolder
= nullptr;
1490 Metadata
*TemplateParams
= nullptr;
1491 Metadata
*Discriminator
= nullptr;
1492 Metadata
*DataLocation
= nullptr;
1493 Metadata
*Associated
= nullptr;
1494 Metadata
*Allocated
= nullptr;
1495 Metadata
*Rank
= nullptr;
1496 Metadata
*Annotations
= nullptr;
1497 auto *Identifier
= getMDString(Record
[15]);
1498 // If this module is being parsed so that it can be ThinLTO imported
1499 // into another module, composite types only need to be imported
1500 // as type declarations (unless full type definitions requested).
1501 // Create type declarations up front to save memory. Also, buildODRType
1502 // handles the case where this is type ODRed with a definition needed
1503 // by the importing module, in which case the existing definition is
1505 if (IsImporting
&& !ImportFullTypeDefinitions
&& Identifier
&&
1506 (Tag
== dwarf::DW_TAG_enumeration_type
||
1507 Tag
== dwarf::DW_TAG_class_type
||
1508 Tag
== dwarf::DW_TAG_structure_type
||
1509 Tag
== dwarf::DW_TAG_union_type
)) {
1510 Flags
= Flags
| DINode::FlagFwdDecl
;
1512 BaseType
= getDITypeRefOrNull(Record
[6]);
1513 OffsetInBits
= Record
[9];
1514 Elements
= getMDOrNull(Record
[11]);
1515 VTableHolder
= getDITypeRefOrNull(Record
[13]);
1516 TemplateParams
= getMDOrNull(Record
[14]);
1517 if (Record
.size() > 16)
1518 Discriminator
= getMDOrNull(Record
[16]);
1519 if (Record
.size() > 17)
1520 DataLocation
= getMDOrNull(Record
[17]);
1521 if (Record
.size() > 19) {
1522 Associated
= getMDOrNull(Record
[18]);
1523 Allocated
= getMDOrNull(Record
[19]);
1525 if (Record
.size() > 20) {
1526 Rank
= getMDOrNull(Record
[20]);
1528 if (Record
.size() > 21) {
1529 Annotations
= getMDOrNull(Record
[21]);
1532 DICompositeType
*CT
= nullptr;
1534 CT
= DICompositeType::buildODRType(
1535 Context
, *Identifier
, Tag
, Name
, File
, Line
, Scope
, BaseType
,
1536 SizeInBits
, AlignInBits
, OffsetInBits
, Flags
, Elements
, RuntimeLang
,
1537 VTableHolder
, TemplateParams
, Discriminator
, DataLocation
, Associated
,
1538 Allocated
, Rank
, Annotations
);
1540 // Create a node if we didn't get a lazy ODR type.
1542 CT
= GET_OR_DISTINCT(DICompositeType
,
1543 (Context
, Tag
, Name
, File
, Line
, Scope
, BaseType
,
1544 SizeInBits
, AlignInBits
, OffsetInBits
, Flags
,
1545 Elements
, RuntimeLang
, VTableHolder
, TemplateParams
,
1546 Identifier
, Discriminator
, DataLocation
, Associated
,
1547 Allocated
, Rank
, Annotations
));
1548 if (!IsNotUsedInTypeRef
&& Identifier
)
1549 MetadataList
.addTypeRef(*Identifier
, *cast
<DICompositeType
>(CT
));
1551 MetadataList
.assignValue(CT
, NextMetadataNo
);
1555 case bitc::METADATA_SUBROUTINE_TYPE
: {
1556 if (Record
.size() < 3 || Record
.size() > 4)
1557 return error("Invalid record");
1558 bool IsOldTypeRefArray
= Record
[0] < 2;
1559 unsigned CC
= (Record
.size() > 3) ? Record
[3] : 0;
1561 IsDistinct
= Record
[0] & 0x1;
1562 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[1]);
1563 Metadata
*Types
= getMDOrNull(Record
[2]);
1564 if (LLVM_UNLIKELY(IsOldTypeRefArray
))
1565 Types
= MetadataList
.upgradeTypeRefArray(Types
);
1567 MetadataList
.assignValue(
1568 GET_OR_DISTINCT(DISubroutineType
, (Context
, Flags
, CC
, Types
)),
1574 case bitc::METADATA_MODULE
: {
1575 if (Record
.size() < 5 || Record
.size() > 9)
1576 return error("Invalid record");
1578 unsigned Offset
= Record
.size() >= 8 ? 2 : 1;
1579 IsDistinct
= Record
[0];
1580 MetadataList
.assignValue(
1583 (Context
, Record
.size() >= 8 ? getMDOrNull(Record
[1]) : nullptr,
1584 getMDOrNull(Record
[0 + Offset
]), getMDString(Record
[1 + Offset
]),
1585 getMDString(Record
[2 + Offset
]), getMDString(Record
[3 + Offset
]),
1586 getMDString(Record
[4 + Offset
]),
1587 Record
.size() <= 7 ? 0 : Record
[7],
1588 Record
.size() <= 8 ? false : Record
[8])),
1594 case bitc::METADATA_FILE
: {
1595 if (Record
.size() != 3 && Record
.size() != 5 && Record
.size() != 6)
1596 return error("Invalid record");
1598 IsDistinct
= Record
[0];
1599 Optional
<DIFile::ChecksumInfo
<MDString
*>> Checksum
;
1600 // The BitcodeWriter writes null bytes into Record[3:4] when the Checksum
1601 // is not present. This matches up with the old internal representation,
1602 // and the old encoding for CSK_None in the ChecksumKind. The new
1603 // representation reserves the value 0 in the ChecksumKind to continue to
1604 // encode None in a backwards-compatible way.
1605 if (Record
.size() > 4 && Record
[3] && Record
[4])
1606 Checksum
.emplace(static_cast<DIFile::ChecksumKind
>(Record
[3]),
1607 getMDString(Record
[4]));
1608 MetadataList
.assignValue(
1611 (Context
, getMDString(Record
[1]), getMDString(Record
[2]), Checksum
,
1612 Record
.size() > 5 ? Optional
<MDString
*>(getMDString(Record
[5]))
1618 case bitc::METADATA_COMPILE_UNIT
: {
1619 if (Record
.size() < 14 || Record
.size() > 22)
1620 return error("Invalid record");
1622 // Ignore Record[0], which indicates whether this compile unit is
1623 // distinct. It's always distinct.
1625 auto *CU
= DICompileUnit::getDistinct(
1626 Context
, Record
[1], getMDOrNull(Record
[2]), getMDString(Record
[3]),
1627 Record
[4], getMDString(Record
[5]), Record
[6], getMDString(Record
[7]),
1628 Record
[8], getMDOrNull(Record
[9]), getMDOrNull(Record
[10]),
1629 getMDOrNull(Record
[12]), getMDOrNull(Record
[13]),
1630 Record
.size() <= 15 ? nullptr : getMDOrNull(Record
[15]),
1631 Record
.size() <= 14 ? 0 : Record
[14],
1632 Record
.size() <= 16 ? true : Record
[16],
1633 Record
.size() <= 17 ? false : Record
[17],
1634 Record
.size() <= 18 ? 0 : Record
[18],
1635 Record
.size() <= 19 ? 0 : Record
[19],
1636 Record
.size() <= 20 ? nullptr : getMDString(Record
[20]),
1637 Record
.size() <= 21 ? nullptr : getMDString(Record
[21]));
1639 MetadataList
.assignValue(CU
, NextMetadataNo
);
1642 // Move the Upgrade the list of subprograms.
1643 if (Metadata
*SPs
= getMDOrNullWithoutPlaceholders(Record
[11]))
1644 CUSubprograms
.push_back({CU
, SPs
});
1647 case bitc::METADATA_SUBPROGRAM
: {
1648 if (Record
.size() < 18 || Record
.size() > 21)
1649 return error("Invalid record");
1651 bool HasSPFlags
= Record
[0] & 4;
1653 DINode::DIFlags Flags
;
1654 DISubprogram::DISPFlags SPFlags
;
1656 Flags
= static_cast<DINode::DIFlags
>(Record
[11 + 2]);
1658 Flags
= static_cast<DINode::DIFlags
>(Record
[11]);
1659 SPFlags
= static_cast<DISubprogram::DISPFlags
>(Record
[9]);
1662 // Support for old metadata when
1663 // subprogram specific flags are placed in DIFlags.
1664 const unsigned DIFlagMainSubprogram
= 1 << 21;
1665 bool HasOldMainSubprogramFlag
= Flags
& DIFlagMainSubprogram
;
1666 if (HasOldMainSubprogramFlag
)
1667 // Remove old DIFlagMainSubprogram from DIFlags.
1668 // Note: This assumes that any future use of bit 21 defaults to it
1670 Flags
&= ~static_cast<DINode::DIFlags
>(DIFlagMainSubprogram
);
1672 if (HasOldMainSubprogramFlag
&& HasSPFlags
)
1673 SPFlags
|= DISubprogram::SPFlagMainSubprogram
;
1674 else if (!HasSPFlags
)
1675 SPFlags
= DISubprogram::toSPFlags(
1676 /*IsLocalToUnit=*/Record
[7], /*IsDefinition=*/Record
[8],
1677 /*IsOptimized=*/Record
[14], /*Virtuality=*/Record
[11],
1678 /*DIFlagMainSubprogram*/HasOldMainSubprogramFlag
);
1680 // All definitions should be distinct.
1681 IsDistinct
= (Record
[0] & 1) || (SPFlags
& DISubprogram::SPFlagDefinition
);
1682 // Version 1 has a Function as Record[15].
1683 // Version 2 has removed Record[15].
1684 // Version 3 has the Unit as Record[15].
1685 // Version 4 added thisAdjustment.
1686 // Version 5 repacked flags into DISPFlags, changing many element numbers.
1687 bool HasUnit
= Record
[0] & 2;
1688 if (!HasSPFlags
&& HasUnit
&& Record
.size() < 19)
1689 return error("Invalid record");
1690 if (HasSPFlags
&& !HasUnit
)
1691 return error("Invalid record");
1692 // Accommodate older formats.
1694 bool HasThisAdj
= true;
1695 bool HasThrownTypes
= true;
1696 unsigned OffsetA
= 0;
1697 unsigned OffsetB
= 0;
1701 if (Record
.size() >= 19) {
1705 HasThisAdj
= Record
.size() >= 20;
1706 HasThrownTypes
= Record
.size() >= 21;
1708 Metadata
*CUorFn
= getMDOrNull(Record
[12 + OffsetB
]);
1709 DISubprogram
*SP
= GET_OR_DISTINCT(
1712 getDITypeRefOrNull(Record
[1]), // scope
1713 getMDString(Record
[2]), // name
1714 getMDString(Record
[3]), // linkageName
1715 getMDOrNull(Record
[4]), // file
1717 getMDOrNull(Record
[6]), // type
1718 Record
[7 + OffsetA
], // scopeLine
1719 getDITypeRefOrNull(Record
[8 + OffsetA
]), // containingType
1720 Record
[10 + OffsetA
], // virtualIndex
1721 HasThisAdj
? Record
[16 + OffsetB
] : 0, // thisAdjustment
1724 HasUnit
? CUorFn
: nullptr, // unit
1725 getMDOrNull(Record
[13 + OffsetB
]), // templateParams
1726 getMDOrNull(Record
[14 + OffsetB
]), // declaration
1727 getMDOrNull(Record
[15 + OffsetB
]), // retainedNodes
1728 HasThrownTypes
? getMDOrNull(Record
[17 + OffsetB
])
1729 : nullptr // thrownTypes
1731 MetadataList
.assignValue(SP
, NextMetadataNo
);
1734 // Upgrade sp->function mapping to function->sp mapping.
1736 if (auto *CMD
= dyn_cast_or_null
<ConstantAsMetadata
>(CUorFn
))
1737 if (auto *F
= dyn_cast
<Function
>(CMD
->getValue())) {
1738 if (F
->isMaterializable())
1739 // Defer until materialized; unmaterialized functions may not have
1741 FunctionsWithSPs
[F
] = SP
;
1742 else if (!F
->empty())
1743 F
->setSubprogram(SP
);
1748 case bitc::METADATA_LEXICAL_BLOCK
: {
1749 if (Record
.size() != 5)
1750 return error("Invalid record");
1752 IsDistinct
= Record
[0];
1753 MetadataList
.assignValue(
1754 GET_OR_DISTINCT(DILexicalBlock
,
1755 (Context
, getMDOrNull(Record
[1]),
1756 getMDOrNull(Record
[2]), Record
[3], Record
[4])),
1761 case bitc::METADATA_LEXICAL_BLOCK_FILE
: {
1762 if (Record
.size() != 4)
1763 return error("Invalid record");
1765 IsDistinct
= Record
[0];
1766 MetadataList
.assignValue(
1767 GET_OR_DISTINCT(DILexicalBlockFile
,
1768 (Context
, getMDOrNull(Record
[1]),
1769 getMDOrNull(Record
[2]), Record
[3])),
1774 case bitc::METADATA_COMMON_BLOCK
: {
1775 IsDistinct
= Record
[0] & 1;
1776 MetadataList
.assignValue(
1777 GET_OR_DISTINCT(DICommonBlock
,
1778 (Context
, getMDOrNull(Record
[1]),
1779 getMDOrNull(Record
[2]), getMDString(Record
[3]),
1780 getMDOrNull(Record
[4]), Record
[5])),
1785 case bitc::METADATA_NAMESPACE
: {
1786 // Newer versions of DINamespace dropped file and line.
1788 if (Record
.size() == 3)
1789 Name
= getMDString(Record
[2]);
1790 else if (Record
.size() == 5)
1791 Name
= getMDString(Record
[3]);
1793 return error("Invalid record");
1795 IsDistinct
= Record
[0] & 1;
1796 bool ExportSymbols
= Record
[0] & 2;
1797 MetadataList
.assignValue(
1798 GET_OR_DISTINCT(DINamespace
,
1799 (Context
, getMDOrNull(Record
[1]), Name
, ExportSymbols
)),
1804 case bitc::METADATA_MACRO
: {
1805 if (Record
.size() != 5)
1806 return error("Invalid record");
1808 IsDistinct
= Record
[0];
1809 MetadataList
.assignValue(
1810 GET_OR_DISTINCT(DIMacro
,
1811 (Context
, Record
[1], Record
[2], getMDString(Record
[3]),
1812 getMDString(Record
[4]))),
1817 case bitc::METADATA_MACRO_FILE
: {
1818 if (Record
.size() != 5)
1819 return error("Invalid record");
1821 IsDistinct
= Record
[0];
1822 MetadataList
.assignValue(
1823 GET_OR_DISTINCT(DIMacroFile
,
1824 (Context
, Record
[1], Record
[2], getMDOrNull(Record
[3]),
1825 getMDOrNull(Record
[4]))),
1830 case bitc::METADATA_TEMPLATE_TYPE
: {
1831 if (Record
.size() < 3 || Record
.size() > 4)
1832 return error("Invalid record");
1834 IsDistinct
= Record
[0];
1835 MetadataList
.assignValue(
1836 GET_OR_DISTINCT(DITemplateTypeParameter
,
1837 (Context
, getMDString(Record
[1]),
1838 getDITypeRefOrNull(Record
[2]),
1839 (Record
.size() == 4) ? getMDOrNull(Record
[3])
1840 : getMDOrNull(false))),
1845 case bitc::METADATA_TEMPLATE_VALUE
: {
1846 if (Record
.size() < 5 || Record
.size() > 6)
1847 return error("Invalid record");
1849 IsDistinct
= Record
[0];
1851 MetadataList
.assignValue(
1853 DITemplateValueParameter
,
1854 (Context
, Record
[1], getMDString(Record
[2]),
1855 getDITypeRefOrNull(Record
[3]),
1856 (Record
.size() == 6) ? getMDOrNull(Record
[4]) : getMDOrNull(false),
1857 (Record
.size() == 6) ? getMDOrNull(Record
[5])
1858 : getMDOrNull(Record
[4]))),
1863 case bitc::METADATA_GLOBAL_VAR
: {
1864 if (Record
.size() < 11 || Record
.size() > 13)
1865 return error("Invalid record");
1867 IsDistinct
= Record
[0] & 1;
1868 unsigned Version
= Record
[0] >> 1;
1871 MetadataList
.assignValue(
1874 (Context
, getMDOrNull(Record
[1]), getMDString(Record
[2]),
1875 getMDString(Record
[3]), getMDOrNull(Record
[4]), Record
[5],
1876 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1877 getMDOrNull(Record
[9]), getMDOrNull(Record
[10]), Record
[11])),
1881 } else if (Version
== 1) {
1882 // No upgrade necessary. A null field will be introduced to indicate
1883 // that no parameter information is available.
1884 MetadataList
.assignValue(
1885 GET_OR_DISTINCT(DIGlobalVariable
,
1886 (Context
, getMDOrNull(Record
[1]),
1887 getMDString(Record
[2]), getMDString(Record
[3]),
1888 getMDOrNull(Record
[4]), Record
[5],
1889 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1890 getMDOrNull(Record
[10]), nullptr, Record
[11])),
1894 } else if (Version
== 0) {
1895 // Upgrade old metadata, which stored a global variable reference or a
1896 // ConstantInt here.
1897 NeedUpgradeToDIGlobalVariableExpression
= true;
1898 Metadata
*Expr
= getMDOrNull(Record
[9]);
1899 uint32_t AlignInBits
= 0;
1900 if (Record
.size() > 11) {
1901 if (Record
[11] > (uint64_t)std::numeric_limits
<uint32_t>::max())
1902 return error("Alignment value is too large");
1903 AlignInBits
= Record
[11];
1905 GlobalVariable
*Attach
= nullptr;
1906 if (auto *CMD
= dyn_cast_or_null
<ConstantAsMetadata
>(Expr
)) {
1907 if (auto *GV
= dyn_cast
<GlobalVariable
>(CMD
->getValue())) {
1910 } else if (auto *CI
= dyn_cast
<ConstantInt
>(CMD
->getValue())) {
1911 Expr
= DIExpression::get(Context
,
1912 {dwarf::DW_OP_constu
, CI
->getZExtValue(),
1913 dwarf::DW_OP_stack_value
});
1918 DIGlobalVariable
*DGV
= GET_OR_DISTINCT(
1920 (Context
, getMDOrNull(Record
[1]), getMDString(Record
[2]),
1921 getMDString(Record
[3]), getMDOrNull(Record
[4]), Record
[5],
1922 getDITypeRefOrNull(Record
[6]), Record
[7], Record
[8],
1923 getMDOrNull(Record
[10]), nullptr, AlignInBits
));
1925 DIGlobalVariableExpression
*DGVE
= nullptr;
1927 DGVE
= DIGlobalVariableExpression::getDistinct(
1928 Context
, DGV
, Expr
? Expr
: DIExpression::get(Context
, {}));
1930 Attach
->addDebugInfo(DGVE
);
1932 auto *MDNode
= Expr
? cast
<Metadata
>(DGVE
) : cast
<Metadata
>(DGV
);
1933 MetadataList
.assignValue(MDNode
, NextMetadataNo
);
1936 return error("Invalid record");
1940 case bitc::METADATA_LOCAL_VAR
: {
1941 // 10th field is for the obseleted 'inlinedAt:' field.
1942 if (Record
.size() < 8 || Record
.size() > 10)
1943 return error("Invalid record");
1945 IsDistinct
= Record
[0] & 1;
1946 bool HasAlignment
= Record
[0] & 2;
1947 // 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
1948 // DW_TAG_arg_variable, if we have alignment flag encoded it means, that
1949 // this is newer version of record which doesn't have artificial tag.
1950 bool HasTag
= !HasAlignment
&& Record
.size() > 8;
1951 DINode::DIFlags Flags
= static_cast<DINode::DIFlags
>(Record
[7 + HasTag
]);
1952 uint32_t AlignInBits
= 0;
1954 if (Record
[8 + HasTag
] > (uint64_t)std::numeric_limits
<uint32_t>::max())
1955 return error("Alignment value is too large");
1956 AlignInBits
= Record
[8 + HasTag
];
1958 MetadataList
.assignValue(
1959 GET_OR_DISTINCT(DILocalVariable
,
1960 (Context
, getMDOrNull(Record
[1 + HasTag
]),
1961 getMDString(Record
[2 + HasTag
]),
1962 getMDOrNull(Record
[3 + HasTag
]), Record
[4 + HasTag
],
1963 getDITypeRefOrNull(Record
[5 + HasTag
]),
1964 Record
[6 + HasTag
], Flags
, AlignInBits
)),
1969 case bitc::METADATA_LABEL
: {
1970 if (Record
.size() != 5)
1971 return error("Invalid record");
1973 IsDistinct
= Record
[0] & 1;
1974 MetadataList
.assignValue(
1975 GET_OR_DISTINCT(DILabel
,
1976 (Context
, getMDOrNull(Record
[1]),
1977 getMDString(Record
[2]),
1978 getMDOrNull(Record
[3]), Record
[4])),
1983 case bitc::METADATA_EXPRESSION
: {
1984 if (Record
.size() < 1)
1985 return error("Invalid record");
1987 IsDistinct
= Record
[0] & 1;
1988 uint64_t Version
= Record
[0] >> 1;
1989 auto Elts
= MutableArrayRef
<uint64_t>(Record
).slice(1);
1991 SmallVector
<uint64_t, 6> Buffer
;
1992 if (Error Err
= upgradeDIExpression(Version
, Elts
, Buffer
))
1995 MetadataList
.assignValue(
1996 GET_OR_DISTINCT(DIExpression
, (Context
, Elts
)), NextMetadataNo
);
2000 case bitc::METADATA_GLOBAL_VAR_EXPR
: {
2001 if (Record
.size() != 3)
2002 return error("Invalid record");
2004 IsDistinct
= Record
[0];
2005 Metadata
*Expr
= getMDOrNull(Record
[2]);
2007 Expr
= DIExpression::get(Context
, {});
2008 MetadataList
.assignValue(
2009 GET_OR_DISTINCT(DIGlobalVariableExpression
,
2010 (Context
, getMDOrNull(Record
[1]), Expr
)),
2015 case bitc::METADATA_OBJC_PROPERTY
: {
2016 if (Record
.size() != 8)
2017 return error("Invalid record");
2019 IsDistinct
= Record
[0];
2020 MetadataList
.assignValue(
2021 GET_OR_DISTINCT(DIObjCProperty
,
2022 (Context
, getMDString(Record
[1]),
2023 getMDOrNull(Record
[2]), Record
[3],
2024 getMDString(Record
[4]), getMDString(Record
[5]),
2025 Record
[6], getDITypeRefOrNull(Record
[7]))),
2030 case bitc::METADATA_IMPORTED_ENTITY
: {
2031 if (Record
.size() != 6 && Record
.size() != 7)
2032 return error("Invalid record");
2034 IsDistinct
= Record
[0];
2035 bool HasFile
= (Record
.size() == 7);
2036 MetadataList
.assignValue(
2037 GET_OR_DISTINCT(DIImportedEntity
,
2038 (Context
, Record
[1], getMDOrNull(Record
[2]),
2039 getDITypeRefOrNull(Record
[3]),
2040 HasFile
? getMDOrNull(Record
[6]) : nullptr,
2041 HasFile
? Record
[4] : 0, getMDString(Record
[5]))),
2046 case bitc::METADATA_STRING_OLD
: {
2047 std::string
String(Record
.begin(), Record
.end());
2049 // Test for upgrading !llvm.loop.
2050 HasSeenOldLoopTags
|= mayBeOldLoopAttachmentTag(String
);
2051 ++NumMDStringLoaded
;
2052 Metadata
*MD
= MDString::get(Context
, String
);
2053 MetadataList
.assignValue(MD
, NextMetadataNo
);
2057 case bitc::METADATA_STRINGS
: {
2058 auto CreateNextMDString
= [&](StringRef Str
) {
2059 ++NumMDStringLoaded
;
2060 MetadataList
.assignValue(MDString::get(Context
, Str
), NextMetadataNo
);
2063 if (Error Err
= parseMetadataStrings(Record
, Blob
, CreateNextMDString
))
2067 case bitc::METADATA_GLOBAL_DECL_ATTACHMENT
: {
2068 if (Record
.size() % 2 == 0)
2069 return error("Invalid record");
2070 unsigned ValueID
= Record
[0];
2071 if (ValueID
>= ValueList
.size())
2072 return error("Invalid record");
2073 if (auto *GO
= dyn_cast
<GlobalObject
>(ValueList
[ValueID
]))
2074 if (Error Err
= parseGlobalObjectAttachment(
2075 *GO
, ArrayRef
<uint64_t>(Record
).slice(1)))
2079 case bitc::METADATA_KIND
: {
2080 // Support older bitcode files that had METADATA_KIND records in a
2081 // block with METADATA_BLOCK_ID.
2082 if (Error Err
= parseMetadataKindRecord(Record
))
2086 case bitc::METADATA_ARG_LIST
: {
2087 SmallVector
<ValueAsMetadata
*, 4> Elts
;
2088 Elts
.reserve(Record
.size());
2089 for (uint64_t Elt
: Record
) {
2090 Metadata
*MD
= getMD(Elt
);
2091 if (isa
<MDNode
>(MD
) && cast
<MDNode
>(MD
)->isTemporary())
2093 "Invalid record: DIArgList should not contain forward refs");
2094 if (!isa
<ValueAsMetadata
>(MD
))
2095 return error("Invalid record");
2096 Elts
.push_back(cast
<ValueAsMetadata
>(MD
));
2099 MetadataList
.assignValue(DIArgList::get(Context
, Elts
), NextMetadataNo
);
2104 return Error::success();
2105 #undef GET_OR_DISTINCT
2108 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataStrings(
2109 ArrayRef
<uint64_t> Record
, StringRef Blob
,
2110 function_ref
<void(StringRef
)> CallBack
) {
2111 // All the MDStrings in the block are emitted together in a single
2112 // record. The strings are concatenated and stored in a blob along with
2114 if (Record
.size() != 2)
2115 return error("Invalid record: metadata strings layout");
2117 unsigned NumStrings
= Record
[0];
2118 unsigned StringsOffset
= Record
[1];
2120 return error("Invalid record: metadata strings with no strings");
2121 if (StringsOffset
> Blob
.size())
2122 return error("Invalid record: metadata strings corrupt offset");
2124 StringRef Lengths
= Blob
.slice(0, StringsOffset
);
2125 SimpleBitstreamCursor
R(Lengths
);
2127 StringRef Strings
= Blob
.drop_front(StringsOffset
);
2129 if (R
.AtEndOfStream())
2130 return error("Invalid record: metadata strings bad length");
2132 Expected
<uint32_t> MaybeSize
= R
.ReadVBR(6);
2134 return MaybeSize
.takeError();
2135 uint32_t Size
= MaybeSize
.get();
2136 if (Strings
.size() < Size
)
2137 return error("Invalid record: metadata strings truncated chars");
2139 CallBack(Strings
.slice(0, Size
));
2140 Strings
= Strings
.drop_front(Size
);
2141 } while (--NumStrings
);
2143 return Error::success();
2146 Error
MetadataLoader::MetadataLoaderImpl::parseGlobalObjectAttachment(
2147 GlobalObject
&GO
, ArrayRef
<uint64_t> Record
) {
2148 assert(Record
.size() % 2 == 0);
2149 for (unsigned I
= 0, E
= Record
.size(); I
!= E
; I
+= 2) {
2150 auto K
= MDKindMap
.find(Record
[I
]);
2151 if (K
== MDKindMap
.end())
2152 return error("Invalid ID");
2154 dyn_cast_or_null
<MDNode
>(getMetadataFwdRefOrLoad(Record
[I
+ 1]));
2156 return error("Invalid metadata attachment: expect fwd ref to MDNode");
2157 GO
.addMetadata(K
->second
, *MD
);
2159 return Error::success();
2162 /// Parse metadata attachments.
2163 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
2164 Function
&F
, const SmallVectorImpl
<Instruction
*> &InstructionList
) {
2165 if (Error Err
= Stream
.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID
))
2168 SmallVector
<uint64_t, 64> Record
;
2169 PlaceholderQueue Placeholders
;
2172 Expected
<BitstreamEntry
> MaybeEntry
= Stream
.advanceSkippingSubblocks();
2174 return MaybeEntry
.takeError();
2175 BitstreamEntry Entry
= MaybeEntry
.get();
2177 switch (Entry
.Kind
) {
2178 case BitstreamEntry::SubBlock
: // Handled for us already.
2179 case BitstreamEntry::Error
:
2180 return error("Malformed block");
2181 case BitstreamEntry::EndBlock
:
2182 resolveForwardRefsAndPlaceholders(Placeholders
);
2183 return Error::success();
2184 case BitstreamEntry::Record
:
2185 // The interesting case.
2189 // Read a metadata attachment record.
2191 ++NumMDRecordLoaded
;
2192 Expected
<unsigned> MaybeRecord
= Stream
.readRecord(Entry
.ID
, Record
);
2194 return MaybeRecord
.takeError();
2195 switch (MaybeRecord
.get()) {
2196 default: // Default behavior: ignore.
2198 case bitc::METADATA_ATTACHMENT
: {
2199 unsigned RecordLength
= Record
.size();
2201 return error("Invalid record");
2202 if (RecordLength
% 2 == 0) {
2203 // A function attachment.
2204 if (Error Err
= parseGlobalObjectAttachment(F
, Record
))
2209 // An instruction attachment.
2210 Instruction
*Inst
= InstructionList
[Record
[0]];
2211 for (unsigned i
= 1; i
!= RecordLength
; i
= i
+ 2) {
2212 unsigned Kind
= Record
[i
];
2213 DenseMap
<unsigned, unsigned>::iterator I
= MDKindMap
.find(Kind
);
2214 if (I
== MDKindMap
.end())
2215 return error("Invalid ID");
2216 if (I
->second
== LLVMContext::MD_tbaa
&& StripTBAA
)
2219 auto Idx
= Record
[i
+ 1];
2220 if (Idx
< (MDStringRef
.size() + GlobalMetadataBitPosIndex
.size()) &&
2221 !MetadataList
.lookup(Idx
)) {
2222 // Load the attachment if it is in the lazy-loadable range and hasn't
2224 lazyLoadOneMetadata(Idx
, Placeholders
);
2225 resolveForwardRefsAndPlaceholders(Placeholders
);
2228 Metadata
*Node
= MetadataList
.getMetadataFwdRef(Idx
);
2229 if (isa
<LocalAsMetadata
>(Node
))
2230 // Drop the attachment. This used to be legal, but there's no
2233 MDNode
*MD
= dyn_cast_or_null
<MDNode
>(Node
);
2235 return error("Invalid metadata attachment");
2237 if (HasSeenOldLoopTags
&& I
->second
== LLVMContext::MD_loop
)
2238 MD
= upgradeInstructionLoopAttachment(*MD
);
2240 if (I
->second
== LLVMContext::MD_tbaa
) {
2241 assert(!MD
->isTemporary() && "should load MDs before attachments");
2242 MD
= UpgradeTBAANode(*MD
);
2244 Inst
->setMetadata(I
->second
, MD
);
2252 /// Parse a single METADATA_KIND record, inserting result in MDKindMap.
2253 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataKindRecord(
2254 SmallVectorImpl
<uint64_t> &Record
) {
2255 if (Record
.size() < 2)
2256 return error("Invalid record");
2258 unsigned Kind
= Record
[0];
2259 SmallString
<8> Name(Record
.begin() + 1, Record
.end());
2261 unsigned NewKind
= TheModule
.getMDKindID(Name
.str());
2262 if (!MDKindMap
.insert(std::make_pair(Kind
, NewKind
)).second
)
2263 return error("Conflicting METADATA_KIND records");
2264 return Error::success();
2267 /// Parse the metadata kinds out of the METADATA_KIND_BLOCK.
2268 Error
MetadataLoader::MetadataLoaderImpl::parseMetadataKinds() {
2269 if (Error Err
= Stream
.EnterSubBlock(bitc::METADATA_KIND_BLOCK_ID
))
2272 SmallVector
<uint64_t, 64> Record
;
2274 // Read all the records.
2276 Expected
<BitstreamEntry
> MaybeEntry
= Stream
.advanceSkippingSubblocks();
2278 return MaybeEntry
.takeError();
2279 BitstreamEntry Entry
= MaybeEntry
.get();
2281 switch (Entry
.Kind
) {
2282 case BitstreamEntry::SubBlock
: // Handled for us already.
2283 case BitstreamEntry::Error
:
2284 return error("Malformed block");
2285 case BitstreamEntry::EndBlock
:
2286 return Error::success();
2287 case BitstreamEntry::Record
:
2288 // The interesting case.
2294 ++NumMDRecordLoaded
;
2295 Expected
<unsigned> MaybeCode
= Stream
.readRecord(Entry
.ID
, Record
);
2297 return MaybeCode
.takeError();
2298 switch (MaybeCode
.get()) {
2299 default: // Default behavior: ignore.
2301 case bitc::METADATA_KIND
: {
2302 if (Error Err
= parseMetadataKindRecord(Record
))
2310 MetadataLoader
&MetadataLoader::operator=(MetadataLoader
&&RHS
) {
2311 Pimpl
= std::move(RHS
.Pimpl
);
2314 MetadataLoader::MetadataLoader(MetadataLoader
&&RHS
)
2315 : Pimpl(std::move(RHS
.Pimpl
)) {}
2317 MetadataLoader::~MetadataLoader() = default;
2318 MetadataLoader::MetadataLoader(BitstreamCursor
&Stream
, Module
&TheModule
,
2319 BitcodeReaderValueList
&ValueList
,
2321 std::function
<Type
*(unsigned)> getTypeByID
)
2322 : Pimpl(std::make_unique
<MetadataLoaderImpl
>(
2323 Stream
, TheModule
, ValueList
, std::move(getTypeByID
), IsImporting
)) {}
2325 Error
MetadataLoader::parseMetadata(bool ModuleLevel
) {
2326 return Pimpl
->parseMetadata(ModuleLevel
);
2329 bool MetadataLoader::hasFwdRefs() const { return Pimpl
->hasFwdRefs(); }
2331 /// Return the given metadata, creating a replaceable forward reference if
2333 Metadata
*MetadataLoader::getMetadataFwdRefOrLoad(unsigned Idx
) {
2334 return Pimpl
->getMetadataFwdRefOrLoad(Idx
);
2337 DISubprogram
*MetadataLoader::lookupSubprogramForFunction(Function
*F
) {
2338 return Pimpl
->lookupSubprogramForFunction(F
);
2341 Error
MetadataLoader::parseMetadataAttachment(
2342 Function
&F
, const SmallVectorImpl
<Instruction
*> &InstructionList
) {
2343 return Pimpl
->parseMetadataAttachment(F
, InstructionList
);
2346 Error
MetadataLoader::parseMetadataKinds() {
2347 return Pimpl
->parseMetadataKinds();
2350 void MetadataLoader::setStripTBAA(bool StripTBAA
) {
2351 return Pimpl
->setStripTBAA(StripTBAA
);
2354 bool MetadataLoader::isStrippingTBAA() { return Pimpl
->isStrippingTBAA(); }
2356 unsigned MetadataLoader::size() const { return Pimpl
->size(); }
2357 void MetadataLoader::shrinkTo(unsigned N
) { return Pimpl
->shrinkTo(N
); }
2359 void MetadataLoader::upgradeDebugIntrinsics(Function
&F
) {
2360 return Pimpl
->upgradeDebugIntrinsics(F
);