LLVM 23.0.0git
MetadataLoader.cpp
Go to the documentation of this file.
1//===- MetadataLoader.cpp - Internal BitcodeReader implementation ---------===//
2//
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
6//
7//===----------------------------------------------------------------------===//
8
9#include "MetadataLoader.h"
10#include "ValueList.h"
11
12#include "llvm/ADT/APInt.h"
13#include "llvm/ADT/ArrayRef.h"
15#include "llvm/ADT/DenseMap.h"
16#include "llvm/ADT/DenseSet.h"
18#include "llvm/ADT/SetVector.h"
21#include "llvm/ADT/Statistic.h"
22#include "llvm/ADT/StringRef.h"
23#include "llvm/ADT/Twine.h"
28#include "llvm/IR/Argument.h"
29#include "llvm/IR/AutoUpgrade.h"
30#include "llvm/IR/BasicBlock.h"
31#include "llvm/IR/Constants.h"
33#include "llvm/IR/Function.h"
36#include "llvm/IR/Instruction.h"
38#include "llvm/IR/LLVMContext.h"
39#include "llvm/IR/Metadata.h"
40#include "llvm/IR/Module.h"
42#include "llvm/IR/Type.h"
48
49#include <algorithm>
50#include <cassert>
51#include <cstddef>
52#include <cstdint>
53#include <deque>
54#include <iterator>
55#include <limits>
56#include <map>
57#include <optional>
58#include <string>
59#include <tuple>
60#include <utility>
61#include <vector>
62
63using namespace llvm;
64
65#define DEBUG_TYPE "bitcode-reader"
66
67STATISTIC(NumMDStringLoaded, "Number of MDStrings loaded");
68STATISTIC(NumMDNodeTemporary, "Number of MDNode::Temporary created");
69STATISTIC(NumMDRecordLoaded, "Number of Metadata records loaded");
70
71/// Flag whether we need to import full type definitions for ThinLTO.
72/// Currently needed for Darwin and LLDB.
74 "import-full-type-definitions", cl::init(false), cl::Hidden,
75 cl::desc("Import full type definitions for ThinLTO."));
76
78 "disable-ondemand-mds-loading", cl::init(false), cl::Hidden,
79 cl::desc("Force disable the lazy-loading on-demand of metadata when "
80 "loading bitcode for importing."));
81
82namespace {
83
84class BitcodeReaderMetadataList {
85 /// Array of metadata references.
86 ///
87 /// Don't use std::vector here. Some versions of libc++ copy (instead of
88 /// move) on resize, and TrackingMDRef is very expensive to copy.
90
91 /// The set of indices in MetadataPtrs above of forward references that were
92 /// generated.
93 SmallDenseSet<unsigned, 1> ForwardReference;
94
95 /// The set of indices in MetadataPtrs above of Metadata that need to be
96 /// resolved.
97 SmallDenseSet<unsigned, 1> UnresolvedNodes;
98
99 /// Structures for resolving old type refs.
100 struct {
105 } OldTypeRefs;
106
107 LLVMContext &Context;
108
109 /// Maximum number of valid references. Forward references exceeding the
110 /// maximum must be invalid.
111 unsigned RefsUpperBound;
112
113public:
114 BitcodeReaderMetadataList(LLVMContext &C, size_t RefsUpperBound)
115 : Context(C),
116 RefsUpperBound(std::min((size_t)std::numeric_limits<unsigned>::max(),
117 RefsUpperBound)) {}
118
119 using const_iterator = SmallVector<TrackingMDRef, 1>::const_iterator;
120
121 // vector compatibility methods
122 unsigned size() const { return MetadataPtrs.size(); }
123 void resize(unsigned N) { MetadataPtrs.resize(N); }
124 void push_back(Metadata *MD) { MetadataPtrs.emplace_back(MD); }
125 void clear() { MetadataPtrs.clear(); }
126 Metadata *back() const { return MetadataPtrs.back(); }
127 void pop_back() { MetadataPtrs.pop_back(); }
128 bool empty() const { return MetadataPtrs.empty(); }
129 const_iterator begin() const { return MetadataPtrs.begin(); }
130 const_iterator end() const { return MetadataPtrs.end(); }
131
132 Metadata *operator[](unsigned i) const { return MetadataPtrs[i]; }
133
134 Metadata *lookup(unsigned I) const {
135 if (I < MetadataPtrs.size())
136 return MetadataPtrs[I];
137 return nullptr;
138 }
139
140 void shrinkTo(unsigned N) {
141 assert(N <= size() && "Invalid shrinkTo request!");
142 assert(ForwardReference.empty() && "Unexpected forward refs");
143 assert(UnresolvedNodes.empty() && "Unexpected unresolved node");
144 MetadataPtrs.resize(N);
145 }
146
147 /// Return the given metadata, creating a replaceable forward reference if
148 /// necessary.
149 Metadata *getMetadataFwdRef(unsigned Idx);
150
151 /// Return the given metadata only if it is fully resolved.
152 ///
153 /// Gives the same result as \a lookup(), unless \a MDNode::isResolved()
154 /// would give \c false.
155 Metadata *getMetadataIfResolved(unsigned Idx);
156
157 MDNode *getMDNodeFwdRefOrNull(unsigned Idx);
158 void assignValue(Metadata *MD, unsigned Idx);
159 void tryToResolveCycles();
160 bool hasFwdRefs() const { return !ForwardReference.empty(); }
161 int getNextFwdRef() {
162 assert(hasFwdRefs());
163 return *ForwardReference.begin();
164 }
165
166 /// Upgrade a type that had an MDString reference.
167 void addTypeRef(MDString &UUID, DICompositeType &CT);
168
169 /// Upgrade a type that had an MDString reference.
170 Metadata *upgradeTypeRef(Metadata *MaybeUUID);
171
172 /// Upgrade a type array that may have MDString references.
173 Metadata *upgradeTypeArray(Metadata *MaybeTuple);
174
175private:
176 Metadata *resolveTypeArray(Metadata *MaybeTuple);
177};
178} // namespace
179
180static int64_t unrotateSign(uint64_t U) { return (U & 1) ? ~(U >> 1) : U >> 1; }
181
182void BitcodeReaderMetadataList::assignValue(Metadata *MD, unsigned Idx) {
183 if (auto *MDN = dyn_cast<MDNode>(MD))
184 if (!MDN->isResolved())
185 UnresolvedNodes.insert(Idx);
186
187 if (Idx == size()) {
188 push_back(MD);
189 return;
190 }
191
192 if (Idx >= size())
193 resize(Idx + 1);
194
195 TrackingMDRef &OldMD = MetadataPtrs[Idx];
196 if (!OldMD) {
197 OldMD.reset(MD);
198 return;
199 }
200
201 // If there was a forward reference to this value, replace it.
202 TempMDTuple PrevMD(cast<MDTuple>(OldMD.get()));
203 PrevMD->replaceAllUsesWith(MD);
204 ForwardReference.erase(Idx);
205}
206
207Metadata *BitcodeReaderMetadataList::getMetadataFwdRef(unsigned Idx) {
208 // Bail out for a clearly invalid value.
209 if (Idx >= RefsUpperBound)
210 return nullptr;
211
212 if (Idx >= size())
213 resize(Idx + 1);
214
215 if (Metadata *MD = MetadataPtrs[Idx])
216 return MD;
217
218 // Track forward refs to be resolved later.
219 ForwardReference.insert(Idx);
220
221 // Create and return a placeholder, which will later be RAUW'd.
222 ++NumMDNodeTemporary;
224 MetadataPtrs[Idx].reset(MD);
225 return MD;
226}
227
228Metadata *BitcodeReaderMetadataList::getMetadataIfResolved(unsigned Idx) {
229 Metadata *MD = lookup(Idx);
230 if (auto *N = dyn_cast_or_null<MDNode>(MD))
231 if (!N->isResolved())
232 return nullptr;
233 return MD;
234}
235
236MDNode *BitcodeReaderMetadataList::getMDNodeFwdRefOrNull(unsigned Idx) {
237 return dyn_cast_or_null<MDNode>(getMetadataFwdRef(Idx));
238}
239
240void BitcodeReaderMetadataList::tryToResolveCycles() {
241 if (!ForwardReference.empty())
242 // Still forward references... can't resolve cycles.
243 return;
244
245 // Give up on finding a full definition for any forward decls that remain.
246 for (const auto &Ref : OldTypeRefs.FwdDecls)
247 OldTypeRefs.Final.insert(Ref);
248 OldTypeRefs.FwdDecls.clear();
249
250 // Upgrade from old type ref arrays. In strange cases, this could add to
251 // OldTypeRefs.Unknown.
252 for (const auto &Array : OldTypeRefs.Arrays)
253 Array.second->replaceAllUsesWith(resolveTypeArray(Array.first.get()));
254 OldTypeRefs.Arrays.clear();
255
256 // Replace old string-based type refs with the resolved node, if possible.
257 // If we haven't seen the node, leave it to the verifier to complain about
258 // the invalid string reference.
259 for (const auto &Ref : OldTypeRefs.Unknown) {
260 if (DICompositeType *CT = OldTypeRefs.Final.lookup(Ref.first))
261 Ref.second->replaceAllUsesWith(CT);
262 else
263 Ref.second->replaceAllUsesWith(Ref.first);
264 }
265 OldTypeRefs.Unknown.clear();
266
267 if (UnresolvedNodes.empty())
268 // Nothing to do.
269 return;
270
271 // Resolve any cycles.
272 for (unsigned I : UnresolvedNodes) {
273 auto &MD = MetadataPtrs[I];
274 auto *N = dyn_cast_or_null<MDNode>(MD);
275 if (!N)
276 continue;
277
278 assert(!N->isTemporary() && "Unexpected forward reference");
279 N->resolveCycles();
280 }
281
282 // Make sure we return early again until there's another unresolved ref.
283 UnresolvedNodes.clear();
284}
285
286void BitcodeReaderMetadataList::addTypeRef(MDString &UUID,
287 DICompositeType &CT) {
288 assert(CT.getRawIdentifier() == &UUID && "Mismatched UUID");
289 if (CT.isForwardDecl())
290 OldTypeRefs.FwdDecls.insert(std::make_pair(&UUID, &CT));
291 else
292 OldTypeRefs.Final.insert(std::make_pair(&UUID, &CT));
293}
294
295Metadata *BitcodeReaderMetadataList::upgradeTypeRef(Metadata *MaybeUUID) {
296 auto *UUID = dyn_cast_or_null<MDString>(MaybeUUID);
297 if (LLVM_LIKELY(!UUID))
298 return MaybeUUID;
299
300 if (auto *CT = OldTypeRefs.Final.lookup(UUID))
301 return CT;
302
303 auto &Ref = OldTypeRefs.Unknown[UUID];
304 if (!Ref)
306 return Ref.get();
307}
308
309Metadata *BitcodeReaderMetadataList::upgradeTypeArray(Metadata *MaybeTuple) {
310 auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
311 if (!Tuple || Tuple->isDistinct())
312 return MaybeTuple;
313
314 // Look through the array immediately if possible.
315 if (!Tuple->isTemporary())
316 return resolveTypeArray(Tuple);
317
318 // Create and return a placeholder to use for now. Eventually
319 // resolveTypeArrays() will be resolve this forward reference.
320 OldTypeRefs.Arrays.emplace_back(
321 std::piecewise_construct, std::forward_as_tuple(Tuple),
322 std::forward_as_tuple(MDTuple::getTemporary(Context, {})));
323 return OldTypeRefs.Arrays.back().second.get();
324}
325
326Metadata *BitcodeReaderMetadataList::resolveTypeArray(Metadata *MaybeTuple) {
327 auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
328 if (!Tuple || Tuple->isDistinct())
329 return MaybeTuple;
330
331 // Look through the DITypeArray, upgrading each DIType *.
333 Ops.reserve(Tuple->getNumOperands());
334 for (Metadata *MD : Tuple->operands())
335 Ops.push_back(upgradeTypeRef(MD));
336
337 return MDTuple::get(Context, Ops);
338}
339
340namespace {
341
342class PlaceholderQueue {
343 // Placeholders would thrash around when moved, so store in a std::deque
344 // instead of some sort of vector.
345 std::deque<DistinctMDOperandPlaceholder> PHs;
346
347public:
348 ~PlaceholderQueue() {
349 assert(empty() &&
350 "PlaceholderQueue hasn't been flushed before being destroyed");
351 }
352 bool empty() const { return PHs.empty(); }
353 DistinctMDOperandPlaceholder &getPlaceholderOp(unsigned ID);
354 void flush(BitcodeReaderMetadataList &MetadataList);
355
356 /// Return the list of temporaries nodes in the queue, these need to be
357 /// loaded before we can flush the queue.
358 void getTemporaries(BitcodeReaderMetadataList &MetadataList,
359 DenseSet<unsigned> &Temporaries) {
360 for (auto &PH : PHs) {
361 auto ID = PH.getID();
362 auto *MD = MetadataList.lookup(ID);
363 if (!MD) {
364 Temporaries.insert(ID);
365 continue;
366 }
367 auto *N = dyn_cast_or_null<MDNode>(MD);
368 if (N && N->isTemporary())
369 Temporaries.insert(ID);
370 }
371 }
372};
373
374} // end anonymous namespace
375
376DistinctMDOperandPlaceholder &PlaceholderQueue::getPlaceholderOp(unsigned ID) {
377 PHs.emplace_back(ID);
378 return PHs.back();
379}
380
381void PlaceholderQueue::flush(BitcodeReaderMetadataList &MetadataList) {
382 while (!PHs.empty()) {
383 auto *MD = MetadataList.lookup(PHs.front().getID());
384 assert(MD && "Flushing placeholder on unassigned MD");
385#ifndef NDEBUG
386 if (auto *MDN = dyn_cast<MDNode>(MD))
387 assert(MDN->isResolved() &&
388 "Flushing Placeholder while cycles aren't resolved");
389#endif
390 PHs.front().replaceUseWith(MD);
391 PHs.pop_front();
392 }
393}
394
395static Error error(const Twine &Message) {
398}
399
401 BitcodeReaderMetadataList MetadataList;
402 BitcodeReaderValueList &ValueList;
403 BitstreamCursor &Stream;
404 LLVMContext &Context;
405 Module &TheModule;
406 MetadataLoaderCallbacks Callbacks;
407
408 /// Cursor associated with the lazy-loading of Metadata. This is the easy way
409 /// to keep around the right "context" (Abbrev list) to be able to jump in
410 /// the middle of the metadata block and load any record.
411 BitstreamCursor IndexCursor;
412
413 /// Index that keeps track of MDString values.
414 std::vector<StringRef> MDStringRef;
415
416 /// On-demand loading of a single MDString. Requires the index above to be
417 /// populated.
418 MDString *lazyLoadOneMDString(unsigned Idx);
419
420 /// Index that keeps track of where to find a metadata record in the stream.
421 std::vector<uint64_t> GlobalMetadataBitPosIndex;
422
423 /// Cursor position of the start of the global decl attachments, to enable
424 /// loading using the index built for lazy loading, instead of forward
425 /// references.
426 uint64_t GlobalDeclAttachmentPos = 0;
427
428#ifndef NDEBUG
429 /// Baisic correctness check that we end up parsing all of the global decl
430 /// attachments.
431 unsigned NumGlobalDeclAttachSkipped = 0;
432 unsigned NumGlobalDeclAttachParsed = 0;
433#endif
434
435 /// Load the global decl attachments, using the index built for lazy loading.
436 Expected<bool> loadGlobalDeclAttachments();
437
438 /// Populate the index above to enable lazily loading of metadata, and load
439 /// the named metadata as well as the transitively referenced global
440 /// Metadata.
441 Expected<bool> lazyLoadModuleMetadataBlock();
442
443 /// On-demand loading of a single metadata. Requires the index above to be
444 /// populated.
445 void lazyLoadOneMetadata(unsigned Idx, PlaceholderQueue &Placeholders);
446
447 // Keep mapping of seens pair of old-style CU <-> SP, and update pointers to
448 // point from SP to CU after a block is completly parsed.
449 std::vector<std::pair<DICompileUnit *, Metadata *>> CUSubprograms;
450
451 /// Functions that need to be matched with subprograms when upgrading old
452 /// metadata.
454
455 /// retainedNodes of these subprograms should be cleaned up from incorrectly
456 /// scoped local types.
457 /// See \ref DISubprogram::cleanupRetainedNodes.
458 SmallVector<DISubprogram *> NewDistinctSPs;
459
460 // Map the bitcode's custom MDKind ID to the Module's MDKind ID.
462
463 bool StripTBAA = false;
464 bool HasSeenOldLoopTags = false;
465 bool NeedUpgradeToDIGlobalVariableExpression = false;
466 bool NeedDeclareExpressionUpgrade = false;
467
468 /// Map DILocalScope to the enclosing DISubprogram, if any.
470
471 /// True if metadata is being parsed for a module being ThinLTO imported.
472 bool IsImporting = false;
473
474 Error parseOneMetadata(SmallVectorImpl<uint64_t> &Record, unsigned Code,
475 PlaceholderQueue &Placeholders, StringRef Blob,
476 unsigned &NextMetadataNo);
477 Error parseMetadataStrings(ArrayRef<uint64_t> Record, StringRef Blob,
478 function_ref<void(StringRef)> CallBack);
479 Error parseGlobalObjectAttachment(GlobalObject &GO,
481 Error parseMetadataKindRecord(SmallVectorImpl<uint64_t> &Record);
482
483 void resolveForwardRefsAndPlaceholders(PlaceholderQueue &Placeholders);
484
485 /// Upgrade old-style CU <-> SP pointers to point from SP to CU.
486 void upgradeCUSubprograms() {
487 for (auto CU_SP : CUSubprograms)
488 if (auto *SPs = dyn_cast_or_null<MDTuple>(CU_SP.second))
489 for (auto &Op : SPs->operands())
490 if (auto *SP = dyn_cast_or_null<DISubprogram>(Op))
491 SP->replaceUnit(CU_SP.first);
492 CUSubprograms.clear();
493 }
494
495 /// Upgrade old-style bare DIGlobalVariables to DIGlobalVariableExpressions.
496 void upgradeCUVariables() {
497 if (!NeedUpgradeToDIGlobalVariableExpression)
498 return;
499
500 // Upgrade list of variables attached to the CUs.
501 if (NamedMDNode *CUNodes = TheModule.getNamedMetadata("llvm.dbg.cu"))
502 for (unsigned I = 0, E = CUNodes->getNumOperands(); I != E; ++I) {
503 auto *CU = cast<DICompileUnit>(CUNodes->getOperand(I));
504 if (auto *GVs = dyn_cast_or_null<MDTuple>(CU->getRawGlobalVariables()))
505 for (unsigned I = 0; I < GVs->getNumOperands(); I++)
506 if (auto *GV =
507 dyn_cast_or_null<DIGlobalVariable>(GVs->getOperand(I))) {
509 Context, GV, DIExpression::get(Context, {}));
510 GVs->replaceOperandWith(I, DGVE);
511 }
512 }
513
514 // Upgrade variables attached to globals.
515 for (auto &GV : TheModule.globals()) {
517 GV.getMetadata(LLVMContext::MD_dbg, MDs);
518 GV.eraseMetadata(LLVMContext::MD_dbg);
519 for (auto *MD : MDs)
520 if (auto *DGV = dyn_cast<DIGlobalVariable>(MD)) {
522 Context, DGV, DIExpression::get(Context, {}));
523 GV.addMetadata(LLVMContext::MD_dbg, *DGVE);
524 } else
525 GV.addMetadata(LLVMContext::MD_dbg, *MD);
526 }
527 }
528
529 DISubprogram *findEnclosingSubprogram(DILocalScope *S) {
530 if (!S)
531 return nullptr;
532 if (auto *SP = ParentSubprogram[S]) {
533 return SP;
534 }
535
536 DILocalScope *InitialScope = S;
538 while (S && !isa<DISubprogram>(S)) {
540 if (!Visited.insert(S).second)
541 break;
542 }
543
544 return ParentSubprogram[InitialScope] =
546 }
547
548 /// Move local imports from DICompileUnit's 'imports' field to
549 /// DISubprogram's retainedNodes.
550 /// Move function-local enums from DICompileUnit's enums
551 /// to DISubprogram's retainedNodes.
552 void upgradeCULocals() {
553 NamedMDNode *CUNodes = TheModule.getNamedMetadata("llvm.dbg.cu");
554 if (!CUNodes)
555 return;
556
557 // Filter out elements of ToRemove from tuple T.
558 auto FilterTuple = [this](MDNode *T,
561 for (Metadata *Op : T->operands())
562 if (!ToRemove.contains(Op))
563 Result.push_back(Op);
564 return MDTuple::get(Context, Result);
565 };
566
567 // For each CU:
568 // - Collect local metadata nodes from CU's imports: and enums: lists in
569 // MetadataToRemove set.
570 // - Remove metadata nodes of MetadataToRemove set from CU's imports: and
571 // enums: lists.
572 // - Group MetadataToRemove items by their parent subprograms (in
573 // SPToEntities map).
574 // - For each subprogram SP in SPToEntities:
575 // - Append collected local metadata nodes to SP's retainedNodes: list.
576 for (MDNode *N : CUNodes->operands()) {
578 if (!CU)
579 continue;
580
581 SetVector<Metadata *> MetadataToRemove;
582 // Collect imported entities to be moved.
583 if (CU->getRawImportedEntities())
584 for (Metadata *Op : CU->getImportedEntities()->operands()) {
585 auto *IE = cast<DIImportedEntity>(Op);
586 if (isa_and_nonnull<DILocalScope>(IE->getScope()))
587 MetadataToRemove.insert(IE);
588 }
589 // Collect enums to be moved.
590 if (CU->getRawEnumTypes())
591 for (Metadata *Op : CU->getEnumTypes()->operands()) {
592 auto *Enum = cast<DICompositeType>(Op);
593 if (isa_and_nonnull<DILocalScope>(Enum->getScope()))
594 MetadataToRemove.insert(Enum);
595 }
596
597 if (MetadataToRemove.empty())
598 continue;
599
600 // Remove entities with local scope from CU.
601 if (CU->getRawImportedEntities())
602 CU->replaceImportedEntities(
603 FilterTuple(CU->getImportedEntities().get(), MetadataToRemove));
604
605 // Remove enums with local scope from CU.
606 if (CU->getRawEnumTypes())
607 CU->replaceEnumTypes(
608 FilterTuple(CU->getEnumTypes().get(), MetadataToRemove));
609
610 // Find DISubprogram corresponding to each entity.
612 for (auto *I : MetadataToRemove) {
613 DILocalScope *Scope =
615 if (auto *SP = findEnclosingSubprogram(Scope))
616 SPToEntities[SP].push_back(I);
617 }
618
619 // Update DISubprograms' retainedNodes.
620 for (auto I = SPToEntities.begin(); I != SPToEntities.end(); ++I) {
621 auto *SP = I->first;
622 auto RetainedNodes = SP->getRetainedNodes();
623 SmallVector<Metadata *> MDs(RetainedNodes.begin(), RetainedNodes.end());
624 MDs.append(I->second);
625 SP->replaceRetainedNodes(MDNode::get(Context, MDs));
626 }
627 }
628
629 ParentSubprogram.clear();
630 }
631
632 /// Remove a leading DW_OP_deref from DIExpressions in a dbg.declare that
633 /// describes a function argument.
634 void upgradeDeclareExpressions(Function &F) {
635 if (!NeedDeclareExpressionUpgrade)
636 return;
637
638 auto UpdateDeclareIfNeeded = [&](auto *Declare) {
639 auto *DIExpr = Declare->getExpression();
640 if (!DIExpr || !DIExpr->startsWithDeref() ||
641 !isa_and_nonnull<Argument>(Declare->getAddress()))
642 return;
644 Ops.append(std::next(DIExpr->elements_begin()), DIExpr->elements_end());
645 Declare->setExpression(DIExpression::get(Context, Ops));
646 };
647
648 for (auto &BB : F)
649 for (auto &I : BB) {
650 for (DbgVariableRecord &DVR : filterDbgVars(I.getDbgRecordRange())) {
651 if (DVR.isDbgDeclare())
652 UpdateDeclareIfNeeded(&DVR);
653 }
654 if (auto *DDI = dyn_cast<DbgDeclareInst>(&I))
655 UpdateDeclareIfNeeded(DDI);
656 }
657 }
658
659 /// Upgrade the expression from previous versions.
660 Error upgradeDIExpression(uint64_t FromVersion,
663 auto N = Expr.size();
664 switch (FromVersion) {
665 default:
666 return error("Invalid record");
667 case 0:
668 if (N >= 3 && Expr[N - 3] == dwarf::DW_OP_bit_piece)
669 Expr[N - 3] = dwarf::DW_OP_LLVM_fragment;
670 [[fallthrough]];
671 case 1:
672 // Move DW_OP_deref to the end.
673 if (N && Expr[0] == dwarf::DW_OP_deref) {
674 auto End = Expr.end();
675 if (Expr.size() >= 3 &&
676 *std::prev(End, 3) == dwarf::DW_OP_LLVM_fragment)
677 End = std::prev(End, 3);
678 std::move(std::next(Expr.begin()), End, Expr.begin());
679 *std::prev(End) = dwarf::DW_OP_deref;
680 }
681 NeedDeclareExpressionUpgrade = true;
682 [[fallthrough]];
683 case 2: {
684 // Change DW_OP_plus to DW_OP_plus_uconst.
685 // Change DW_OP_minus to DW_OP_uconst, DW_OP_minus
686 auto SubExpr = ArrayRef<uint64_t>(Expr);
687 while (!SubExpr.empty()) {
688 // Skip past other operators with their operands
689 // for this version of the IR, obtained from
690 // from historic DIExpression::ExprOperand::getSize().
691 size_t HistoricSize;
692 switch (SubExpr.front()) {
693 default:
694 HistoricSize = 1;
695 break;
696 case dwarf::DW_OP_constu:
697 case dwarf::DW_OP_minus:
698 case dwarf::DW_OP_plus:
699 HistoricSize = 2;
700 break;
702 HistoricSize = 3;
703 break;
704 }
705
706 // If the expression is malformed, make sure we don't
707 // copy more elements than we should.
708 HistoricSize = std::min(SubExpr.size(), HistoricSize);
709 ArrayRef<uint64_t> Args = SubExpr.slice(1, HistoricSize - 1);
710
711 switch (SubExpr.front()) {
712 case dwarf::DW_OP_plus:
713 Buffer.push_back(dwarf::DW_OP_plus_uconst);
714 Buffer.append(Args.begin(), Args.end());
715 break;
716 case dwarf::DW_OP_minus:
717 Buffer.push_back(dwarf::DW_OP_constu);
718 Buffer.append(Args.begin(), Args.end());
719 Buffer.push_back(dwarf::DW_OP_minus);
720 break;
721 default:
722 Buffer.push_back(*SubExpr.begin());
723 Buffer.append(Args.begin(), Args.end());
724 break;
725 }
726
727 // Continue with remaining elements.
728 SubExpr = SubExpr.slice(HistoricSize);
729 }
730 Expr = MutableArrayRef<uint64_t>(Buffer);
731 [[fallthrough]];
732 }
733 case 3:
734 // Up-to-date!
735 break;
736 }
737
738 return Error::success();
739 }
740
741 /// Specifies which kind of debug info upgrade should be performed.
742 ///
743 /// The upgrade of compile units' enums: and imports: fields is performed
744 /// only when module level metadata block is loaded (i.e. all elements of
745 /// "llvm.dbg.cu" named metadata node are loaded).
746 enum class DebugInfoUpgradeMode {
747 /// No debug info upgrade.
748 None,
749 /// Debug info upgrade after loading function-level metadata block.
750 Partial,
751 /// Debug info upgrade after loading module-level metadata block.
752 ModuleLevel,
753 };
754
755 void upgradeDebugInfo(DebugInfoUpgradeMode Mode) {
756 if (Mode == DebugInfoUpgradeMode::None)
757 return;
758 upgradeCUSubprograms();
759 upgradeCUVariables();
760 if (Mode == DebugInfoUpgradeMode::ModuleLevel)
761 upgradeCULocals();
762 }
763
764 /// Prepare loaded metadata nodes to be used by loader clients.
765 void resolveLoadedMetadata(PlaceholderQueue &Placeholders,
766 DebugInfoUpgradeMode DIUpgradeMode) {
767 resolveForwardRefsAndPlaceholders(Placeholders);
768 upgradeDebugInfo(DIUpgradeMode);
770 LLVM_DEBUG(llvm::dbgs() << "Resolved loaded metadata. Cleaned up "
771 << NewDistinctSPs.size() << " subprogram(s).\n");
772 NewDistinctSPs.clear();
773 }
774
775 void callMDTypeCallback(Metadata **Val, unsigned TypeID);
776
777public:
779 BitcodeReaderValueList &ValueList,
780 MetadataLoaderCallbacks Callbacks, bool IsImporting)
781 : MetadataList(TheModule.getContext(), Stream.SizeInBytes()),
782 ValueList(ValueList), Stream(Stream), Context(TheModule.getContext()),
783 TheModule(TheModule), Callbacks(std::move(Callbacks)),
784 IsImporting(IsImporting) {}
785
786 Error parseMetadata(bool ModuleLevel);
787
788 bool hasFwdRefs() const { return MetadataList.hasFwdRefs(); }
789
791 if (ID < MDStringRef.size())
792 return lazyLoadOneMDString(ID);
793 if (auto *MD = MetadataList.lookup(ID))
794 return MD;
795 // If lazy-loading is enabled, we try recursively to load the operand
796 // instead of creating a temporary.
797 if (ID < (MDStringRef.size() + GlobalMetadataBitPosIndex.size())) {
798 PlaceholderQueue Placeholders;
799 lazyLoadOneMetadata(ID, Placeholders);
800 LLVM_DEBUG(llvm::dbgs() << "\nLazy metadata loading: ");
801 resolveLoadedMetadata(Placeholders, DebugInfoUpgradeMode::None);
802 return MetadataList.lookup(ID);
803 }
804 return MetadataList.getMetadataFwdRef(ID);
805 }
806
808 return FunctionsWithSPs.lookup(F);
809 }
810
811 bool hasSeenOldLoopTags() const { return HasSeenOldLoopTags; }
812
814 ArrayRef<Instruction *> InstructionList);
815
817
818 void setStripTBAA(bool Value) { StripTBAA = Value; }
819 bool isStrippingTBAA() const { return StripTBAA; }
820
821 unsigned size() const { return MetadataList.size(); }
822 void shrinkTo(unsigned N) { MetadataList.shrinkTo(N); }
823 void upgradeDebugIntrinsics(Function &F) { upgradeDeclareExpressions(F); }
824};
825
827MetadataLoader::MetadataLoaderImpl::lazyLoadModuleMetadataBlock() {
828 IndexCursor = Stream;
830 GlobalDeclAttachmentPos = 0;
831 // Get the abbrevs, and preload record positions to make them lazy-loadable.
832 while (true) {
833 uint64_t SavedPos = IndexCursor.GetCurrentBitNo();
834 BitstreamEntry Entry;
835 if (Error E =
836 IndexCursor
837 .advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd)
838 .moveInto(Entry))
839 return std::move(E);
840
841 switch (Entry.Kind) {
842 case BitstreamEntry::SubBlock: // Handled for us already.
844 return error("Malformed block");
846 return true;
847 }
849 // The interesting case.
850 ++NumMDRecordLoaded;
851 uint64_t CurrentPos = IndexCursor.GetCurrentBitNo();
852 unsigned Code;
853 if (Error E = IndexCursor.skipRecord(Entry.ID).moveInto(Code))
854 return std::move(E);
855 switch (Code) {
857 // Rewind and parse the strings.
858 if (Error Err = IndexCursor.JumpToBit(CurrentPos))
859 return std::move(Err);
860 StringRef Blob;
861 Record.clear();
862 if (Expected<unsigned> MaybeRecord =
863 IndexCursor.readRecord(Entry.ID, Record, &Blob))
864 ;
865 else
866 return MaybeRecord.takeError();
867 unsigned NumStrings = Record[0];
868 MDStringRef.reserve(NumStrings);
869 auto IndexNextMDString = [&](StringRef Str) {
870 MDStringRef.push_back(Str);
871 };
872 if (auto Err = parseMetadataStrings(Record, Blob, IndexNextMDString))
873 return std::move(Err);
874 break;
875 }
877 // This is the offset to the index, when we see this we skip all the
878 // records and load only an index to these.
879 if (Error Err = IndexCursor.JumpToBit(CurrentPos))
880 return std::move(Err);
881 Record.clear();
882 if (Expected<unsigned> MaybeRecord =
883 IndexCursor.readRecord(Entry.ID, Record))
884 ;
885 else
886 return MaybeRecord.takeError();
887 if (Record.size() != 2)
888 return error("Invalid record");
889 auto Offset = Record[0] + (Record[1] << 32);
890 auto BeginPos = IndexCursor.GetCurrentBitNo();
891 if (Error Err = IndexCursor.JumpToBit(BeginPos + Offset))
892 return std::move(Err);
893 Expected<BitstreamEntry> MaybeEntry =
894 IndexCursor.advanceSkippingSubblocks(
896 if (!MaybeEntry)
897 return MaybeEntry.takeError();
898 Entry = MaybeEntry.get();
900 "Corrupted bitcode: Expected `Record` when trying to find the "
901 "Metadata index");
902 Record.clear();
903 if (Expected<unsigned> MaybeCode =
904 IndexCursor.readRecord(Entry.ID, Record))
905 assert(MaybeCode.get() == bitc::METADATA_INDEX &&
906 "Corrupted bitcode: Expected `METADATA_INDEX` when trying to "
907 "find the Metadata index");
908 else
909 return MaybeCode.takeError();
910 // Delta unpack
911 auto CurrentValue = BeginPos;
912 GlobalMetadataBitPosIndex.reserve(Record.size());
913 for (auto &Elt : Record) {
914 CurrentValue += Elt;
915 GlobalMetadataBitPosIndex.push_back(CurrentValue);
916 }
917 break;
918 }
920 // We don't expect to get there, the Index is loaded when we encounter
921 // the offset.
922 return error("Corrupted Metadata block");
923 case bitc::METADATA_NAME: {
924 // Named metadata need to be materialized now and aren't deferred.
925 if (Error Err = IndexCursor.JumpToBit(CurrentPos))
926 return std::move(Err);
927 Record.clear();
928
929 unsigned Code;
930 if (Expected<unsigned> MaybeCode =
931 IndexCursor.readRecord(Entry.ID, Record)) {
932 Code = MaybeCode.get();
934 } else
935 return MaybeCode.takeError();
936
937 // Read name of the named metadata.
938 SmallString<8> Name(Record.begin(), Record.end());
939 if (Expected<unsigned> MaybeCode = IndexCursor.ReadCode())
940 Code = MaybeCode.get();
941 else
942 return MaybeCode.takeError();
943
944 // Named Metadata comes in two parts, we expect the name to be followed
945 // by the node
946 Record.clear();
947 if (Expected<unsigned> MaybeNextBitCode =
948 IndexCursor.readRecord(Code, Record))
949 assert(MaybeNextBitCode.get() == bitc::METADATA_NAMED_NODE);
950 else
951 return MaybeNextBitCode.takeError();
952
953 // Read named metadata elements.
954 unsigned Size = Record.size();
955 NamedMDNode *NMD = TheModule.getOrInsertNamedMetadata(Name);
956 for (unsigned i = 0; i != Size; ++i) {
957 // FIXME: We could use a placeholder here, however NamedMDNode are
958 // taking MDNode as operand and not using the Metadata infrastructure.
959 // It is acknowledged by 'TODO: Inherit from Metadata' in the
960 // NamedMDNode class definition.
961 MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[i]);
962 assert(MD && "Invalid metadata: expect fwd ref to MDNode");
963 NMD->addOperand(MD);
964 }
965 break;
966 }
968 if (!GlobalDeclAttachmentPos)
969 GlobalDeclAttachmentPos = SavedPos;
970#ifndef NDEBUG
971 NumGlobalDeclAttachSkipped++;
972#endif
973 break;
974 }
1012 // We don't expect to see any of these, if we see one, give up on
1013 // lazy-loading and fallback.
1014 MDStringRef.clear();
1015 GlobalMetadataBitPosIndex.clear();
1016 return false;
1017 }
1018 break;
1019 }
1020 }
1021 }
1022}
1023
1024// Load the global decl attachments after building the lazy loading index.
1025// We don't load them "lazily" - all global decl attachments must be
1026// parsed since they aren't materialized on demand. However, by delaying
1027// their parsing until after the index is created, we can use the index
1028// instead of creating temporaries.
1029Expected<bool> MetadataLoader::MetadataLoaderImpl::loadGlobalDeclAttachments() {
1030 // Nothing to do if we didn't find any of these metadata records.
1031 if (!GlobalDeclAttachmentPos)
1032 return true;
1033 // Use a temporary cursor so that we don't mess up the main Stream cursor or
1034 // the lazy loading IndexCursor (which holds the necessary abbrev ids).
1035 BitstreamCursor TempCursor = Stream;
1036 SmallVector<uint64_t, 64> Record;
1037 // Jump to the position before the first global decl attachment, so we can
1038 // scan for the first BitstreamEntry record.
1039 if (Error Err = TempCursor.JumpToBit(GlobalDeclAttachmentPos))
1040 return std::move(Err);
1041 while (true) {
1042 BitstreamEntry Entry;
1043 if (Error E =
1044 TempCursor
1045 .advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd)
1046 .moveInto(Entry))
1047 return std::move(E);
1048
1049 switch (Entry.Kind) {
1050 case BitstreamEntry::SubBlock: // Handled for us already.
1052 return error("Malformed block");
1054 // Check that we parsed them all.
1055 assert(NumGlobalDeclAttachSkipped == NumGlobalDeclAttachParsed);
1056 return true;
1058 break;
1059 }
1060 uint64_t CurrentPos = TempCursor.GetCurrentBitNo();
1061 Expected<unsigned> MaybeCode = TempCursor.skipRecord(Entry.ID);
1062 if (!MaybeCode)
1063 return MaybeCode.takeError();
1064 if (MaybeCode.get() != bitc::METADATA_GLOBAL_DECL_ATTACHMENT) {
1065 // Anything other than a global decl attachment signals the end of
1066 // these records. Check that we parsed them all.
1067 assert(NumGlobalDeclAttachSkipped == NumGlobalDeclAttachParsed);
1068 return true;
1069 }
1070#ifndef NDEBUG
1071 NumGlobalDeclAttachParsed++;
1072#endif
1073 // FIXME: we need to do this early because we don't materialize global
1074 // value explicitly.
1075 if (Error Err = TempCursor.JumpToBit(CurrentPos))
1076 return std::move(Err);
1077 Record.clear();
1078 if (Expected<unsigned> MaybeRecord =
1079 TempCursor.readRecord(Entry.ID, Record))
1080 ;
1081 else
1082 return MaybeRecord.takeError();
1083 if (Record.size() % 2 == 0)
1084 return error("Invalid record");
1085 unsigned ValueID = Record[0];
1086 if (ValueID >= ValueList.size())
1087 return error("Invalid record");
1088 if (auto *GO = dyn_cast<GlobalObject>(ValueList[ValueID])) {
1089 // Need to save and restore the current position since
1090 // parseGlobalObjectAttachment will resolve all forward references which
1091 // would require parsing from locations stored in the index.
1092 CurrentPos = TempCursor.GetCurrentBitNo();
1093 if (Error Err = parseGlobalObjectAttachment(
1094 *GO, ArrayRef<uint64_t>(Record).slice(1)))
1095 return std::move(Err);
1096 if (Error Err = TempCursor.JumpToBit(CurrentPos))
1097 return std::move(Err);
1098 }
1099 }
1100}
1101
1102void MetadataLoader::MetadataLoaderImpl::callMDTypeCallback(Metadata **Val,
1103 unsigned TypeID) {
1104 if (Callbacks.MDType) {
1105 (*Callbacks.MDType)(Val, TypeID, Callbacks.GetTypeByID,
1106 Callbacks.GetContainedTypeID);
1107 }
1108}
1109
1110/// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
1111/// module level metadata.
1113 llvm::TimeTraceScope timeScope("Parse metadata");
1114 if (!ModuleLevel && MetadataList.hasFwdRefs())
1115 return error("Invalid metadata: fwd refs into function blocks");
1116
1117 // Record the entry position so that we can jump back here and efficiently
1118 // skip the whole block in case we lazy-load.
1119 auto EntryPos = Stream.GetCurrentBitNo();
1120
1121 if (Error Err = Stream.EnterSubBlock(bitc::METADATA_BLOCK_ID))
1122 return Err;
1123
1125 PlaceholderQueue Placeholders;
1126 auto DIUpgradeMode = ModuleLevel ? DebugInfoUpgradeMode::ModuleLevel
1127 : DebugInfoUpgradeMode::Partial;
1128
1129 // We lazy-load module-level metadata: we build an index for each record, and
1130 // then load individual record as needed, starting with the named metadata.
1131 if (ModuleLevel && IsImporting && MetadataList.empty() &&
1133 auto SuccessOrErr = lazyLoadModuleMetadataBlock();
1134 if (!SuccessOrErr)
1135 return SuccessOrErr.takeError();
1136 if (SuccessOrErr.get()) {
1137 // An index was successfully created and we will be able to load metadata
1138 // on-demand.
1139 MetadataList.resize(MDStringRef.size() +
1140 GlobalMetadataBitPosIndex.size());
1141
1142 // Now that we have built the index, load the global decl attachments
1143 // that were deferred during that process. This avoids creating
1144 // temporaries.
1145 SuccessOrErr = loadGlobalDeclAttachments();
1146 if (!SuccessOrErr)
1147 return SuccessOrErr.takeError();
1148 assert(SuccessOrErr.get());
1149
1150 // Reading the named metadata created forward references and/or
1151 // placeholders, that we flush here.
1152 LLVM_DEBUG(llvm::dbgs() << "\nNamed metadata loading: ");
1153 resolveLoadedMetadata(Placeholders, DIUpgradeMode);
1154 // Return at the beginning of the block, since it is easy to skip it
1155 // entirely from there.
1156 Stream.ReadBlockEnd(); // Pop the abbrev block context.
1157 if (Error Err = IndexCursor.JumpToBit(EntryPos))
1158 return Err;
1159 if (Error Err = Stream.SkipBlock()) {
1160 // FIXME this drops the error on the floor, which
1161 // ThinLTO/X86/debuginfo-cu-import.ll relies on.
1162 consumeError(std::move(Err));
1163 return Error::success();
1164 }
1165 return Error::success();
1166 }
1167 // Couldn't load an index, fallback to loading all the block "old-style".
1168 }
1169
1170 unsigned NextMetadataNo = MetadataList.size();
1171
1172 // Read all the records.
1173 while (true) {
1174 BitstreamEntry Entry;
1175 if (Error E = Stream.advanceSkippingSubblocks().moveInto(Entry))
1176 return E;
1177
1178 switch (Entry.Kind) {
1179 case BitstreamEntry::SubBlock: // Handled for us already.
1181 return error("Malformed block");
1183 LLVM_DEBUG(llvm::dbgs() << "\nEager metadata loading: ");
1184 resolveLoadedMetadata(Placeholders, DIUpgradeMode);
1185 return Error::success();
1187 // The interesting case.
1188 break;
1189 }
1190
1191 // Read a record.
1192 Record.clear();
1193 StringRef Blob;
1194 ++NumMDRecordLoaded;
1195 if (Expected<unsigned> MaybeCode =
1196 Stream.readRecord(Entry.ID, Record, &Blob)) {
1197 if (Error Err = parseOneMetadata(Record, MaybeCode.get(), Placeholders,
1198 Blob, NextMetadataNo))
1199 return Err;
1200 } else
1201 return MaybeCode.takeError();
1202 }
1203}
1204
1205MDString *MetadataLoader::MetadataLoaderImpl::lazyLoadOneMDString(unsigned ID) {
1206 ++NumMDStringLoaded;
1207 if (Metadata *MD = MetadataList.lookup(ID))
1208 return cast<MDString>(MD);
1209 auto MDS = MDString::get(Context, MDStringRef[ID]);
1210 MetadataList.assignValue(MDS, ID);
1211 return MDS;
1212}
1213
1214void MetadataLoader::MetadataLoaderImpl::lazyLoadOneMetadata(
1215 unsigned ID, PlaceholderQueue &Placeholders) {
1216 assert(ID < (MDStringRef.size()) + GlobalMetadataBitPosIndex.size());
1217 assert(ID >= MDStringRef.size() && "Unexpected lazy-loading of MDString");
1218 // Lookup first if the metadata hasn't already been loaded.
1219 if (auto *MD = MetadataList.lookup(ID)) {
1220 auto *N = dyn_cast<MDNode>(MD);
1221 // If the node is not an MDNode, or if it is not temporary, then
1222 // we're done.
1223 if (!N || !N->isTemporary())
1224 return;
1225 }
1227 StringRef Blob;
1228 if (Error Err = IndexCursor.JumpToBit(
1229 GlobalMetadataBitPosIndex[ID - MDStringRef.size()]))
1230 report_fatal_error("lazyLoadOneMetadata failed jumping: " +
1231 Twine(toString(std::move(Err))));
1232 BitstreamEntry Entry;
1233 if (Error E = IndexCursor.advanceSkippingSubblocks().moveInto(Entry))
1234 // FIXME this drops the error on the floor.
1235 report_fatal_error("lazyLoadOneMetadata failed advanceSkippingSubblocks: " +
1236 Twine(toString(std::move(E))));
1237 ++NumMDRecordLoaded;
1238 if (Expected<unsigned> MaybeCode =
1239 IndexCursor.readRecord(Entry.ID, Record, &Blob)) {
1240 if (Error Err =
1241 parseOneMetadata(Record, MaybeCode.get(), Placeholders, Blob, ID))
1242 report_fatal_error("Can't lazyload MD, parseOneMetadata: " +
1243 Twine(toString(std::move(Err))));
1244 } else
1245 report_fatal_error("Can't lazyload MD: " +
1246 Twine(toString(MaybeCode.takeError())));
1247}
1248
1249/// Ensure that all forward-references and placeholders are resolved.
1250/// Iteratively lazy-loading metadata on-demand if needed.
1251void MetadataLoader::MetadataLoaderImpl::resolveForwardRefsAndPlaceholders(
1252 PlaceholderQueue &Placeholders) {
1253 DenseSet<unsigned> Temporaries;
1254 while (true) {
1255 // Populate Temporaries with the placeholders that haven't been loaded yet.
1256 Placeholders.getTemporaries(MetadataList, Temporaries);
1257
1258 // If we don't have any temporary, or FwdReference, we're done!
1259 if (Temporaries.empty() && !MetadataList.hasFwdRefs())
1260 break;
1261
1262 // First, load all the temporaries. This can add new placeholders or
1263 // forward references.
1264 for (auto ID : Temporaries)
1265 lazyLoadOneMetadata(ID, Placeholders);
1266 Temporaries.clear();
1267
1268 // Second, load the forward-references. This can also add new placeholders
1269 // or forward references.
1270 while (MetadataList.hasFwdRefs())
1271 lazyLoadOneMetadata(MetadataList.getNextFwdRef(), Placeholders);
1272 }
1273 // At this point we don't have any forward reference remaining, or temporary
1274 // that haven't been loaded. We can safely drop RAUW support and mark cycles
1275 // as resolved.
1276 MetadataList.tryToResolveCycles();
1277
1278 // Finally, everything is in place, we can replace the placeholders operands
1279 // with the final node they refer to.
1280 Placeholders.flush(MetadataList);
1281}
1282
1283static Value *getValueFwdRef(BitcodeReaderValueList &ValueList, unsigned Idx,
1284 Type *Ty, unsigned TyID) {
1285 Value *V = ValueList.getValueFwdRef(Idx, Ty, TyID,
1286 /*ConstExprInsertBB*/ nullptr);
1287 if (V)
1288 return V;
1289
1290 // This is a reference to a no longer supported constant expression.
1291 // Pretend that the constant was deleted, which will replace metadata
1292 // references with poison.
1293 // TODO: This is a rather indirect check. It would be more elegant to use
1294 // a separate ErrorInfo for constant materialization failure and thread
1295 // the error reporting through getValueFwdRef().
1296 if (Idx < ValueList.size() && ValueList[Idx] &&
1297 ValueList[Idx]->getType() == Ty)
1298 return PoisonValue::get(Ty);
1299
1300 return nullptr;
1301}
1302
1303Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
1304 SmallVectorImpl<uint64_t> &Record, unsigned Code,
1305 PlaceholderQueue &Placeholders, StringRef Blob, unsigned &NextMetadataNo) {
1306
1307 bool IsDistinct = false;
1308 auto getMD = [&](unsigned ID) -> Metadata * {
1309 if (ID < MDStringRef.size())
1310 return lazyLoadOneMDString(ID);
1311 if (!IsDistinct) {
1312 if (auto *MD = MetadataList.lookup(ID))
1313 return MD;
1314 // If lazy-loading is enabled, we try recursively to load the operand
1315 // instead of creating a temporary.
1316 if (ID < (MDStringRef.size() + GlobalMetadataBitPosIndex.size())) {
1317 // Create a temporary for the node that is referencing the operand we
1318 // will lazy-load. It is needed before recursing in case there are
1319 // uniquing cycles.
1320 MetadataList.getMetadataFwdRef(NextMetadataNo);
1321 lazyLoadOneMetadata(ID, Placeholders);
1322 return MetadataList.lookup(ID);
1323 }
1324 // Return a temporary.
1325 return MetadataList.getMetadataFwdRef(ID);
1326 }
1327 if (auto *MD = MetadataList.getMetadataIfResolved(ID))
1328 return MD;
1329 return &Placeholders.getPlaceholderOp(ID);
1330 };
1331 auto getMDOrNull = [&](unsigned ID) -> Metadata * {
1332 if (ID)
1333 return getMD(ID - 1);
1334 return nullptr;
1335 };
1336 auto getMDOrNullWithoutPlaceholders = [&](unsigned ID) -> Metadata * {
1337 if (ID)
1338 return MetadataList.getMetadataFwdRef(ID - 1);
1339 return nullptr;
1340 };
1341 auto getMDString = [&](unsigned ID) -> MDString * {
1342 // This requires that the ID is not really a forward reference. In
1343 // particular, the MDString must already have been resolved.
1344 auto MDS = getMDOrNull(ID);
1345 return cast_or_null<MDString>(MDS);
1346 };
1347
1348 // Support for old type refs.
1349 auto getDITypeRefOrNull = [&](unsigned ID) {
1350 return MetadataList.upgradeTypeRef(getMDOrNull(ID));
1351 };
1352
1353 auto getMetadataOrConstant = [&](bool IsMetadata,
1354 uint64_t Entry) -> Metadata * {
1355 if (IsMetadata)
1356 return getMDOrNull(Entry);
1358 ConstantInt::get(Type::getInt64Ty(Context), Entry));
1359 };
1360
1361#define GET_OR_DISTINCT(CLASS, ARGS) \
1362 (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
1363
1364 switch (Code) {
1365 default: // Default behavior: ignore.
1366 break;
1367 case bitc::METADATA_NAME: {
1368 // Read name of the named metadata.
1369 SmallString<8> Name(Record.begin(), Record.end());
1370 Record.clear();
1371 if (Error E = Stream.ReadCode().moveInto(Code))
1372 return E;
1373
1374 ++NumMDRecordLoaded;
1375 if (Expected<unsigned> MaybeNextBitCode = Stream.readRecord(Code, Record)) {
1376 if (MaybeNextBitCode.get() != bitc::METADATA_NAMED_NODE)
1377 return error("METADATA_NAME not followed by METADATA_NAMED_NODE");
1378 } else
1379 return MaybeNextBitCode.takeError();
1380
1381 // Read named metadata elements.
1382 unsigned Size = Record.size();
1383 NamedMDNode *NMD = TheModule.getOrInsertNamedMetadata(Name);
1384 for (unsigned i = 0; i != Size; ++i) {
1385 MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[i]);
1386 if (!MD)
1387 return error("Invalid named metadata: expect fwd ref to MDNode");
1388 NMD->addOperand(MD);
1389 }
1390 break;
1391 }
1393 // Deprecated, but still needed to read old bitcode files.
1394 // This is a LocalAsMetadata record, the only type of function-local
1395 // metadata.
1396 if (Record.size() % 2 == 1)
1397 return error("Invalid record");
1398
1399 // If this isn't a LocalAsMetadata record, we're dropping it. This used
1400 // to be legal, but there's no upgrade path.
1401 auto dropRecord = [&] {
1402 MetadataList.assignValue(MDNode::get(Context, {}), NextMetadataNo);
1403 NextMetadataNo++;
1404 };
1405 if (Record.size() != 2) {
1406 dropRecord();
1407 break;
1408 }
1409
1410 unsigned TyID = Record[0];
1411 Type *Ty = Callbacks.GetTypeByID(TyID);
1412 if (!Ty || Ty->isMetadataTy() || Ty->isVoidTy()) {
1413 dropRecord();
1414 break;
1415 }
1416
1417 Value *V = ValueList.getValueFwdRef(Record[1], Ty, TyID,
1418 /*ConstExprInsertBB*/ nullptr);
1419 if (!V)
1420 return error("Invalid value reference from old fn metadata");
1421
1422 MetadataList.assignValue(LocalAsMetadata::get(V), NextMetadataNo);
1423 NextMetadataNo++;
1424 break;
1425 }
1427 // Deprecated, but still needed to read old bitcode files.
1428 if (Record.size() % 2 == 1)
1429 return error("Invalid record");
1430
1431 unsigned Size = Record.size();
1433 for (unsigned i = 0; i != Size; i += 2) {
1434 unsigned TyID = Record[i];
1435 Type *Ty = Callbacks.GetTypeByID(TyID);
1436 if (!Ty)
1437 return error("Invalid record");
1438 if (Ty->isMetadataTy())
1439 Elts.push_back(getMD(Record[i + 1]));
1440 else if (!Ty->isVoidTy()) {
1441 Value *V = getValueFwdRef(ValueList, Record[i + 1], Ty, TyID);
1442 if (!V)
1443 return error("Invalid value reference from old metadata");
1446 "Expected non-function-local metadata");
1447 callMDTypeCallback(&MD, TyID);
1448 Elts.push_back(MD);
1449 } else
1450 Elts.push_back(nullptr);
1451 }
1452 MetadataList.assignValue(MDNode::get(Context, Elts), NextMetadataNo);
1453 NextMetadataNo++;
1454 break;
1455 }
1456 case bitc::METADATA_VALUE: {
1457 if (Record.size() != 2)
1458 return error("Invalid record");
1459
1460 unsigned TyID = Record[0];
1461 Type *Ty = Callbacks.GetTypeByID(TyID);
1462 if (!Ty || Ty->isMetadataTy() || Ty->isVoidTy())
1463 return error("Invalid record");
1464
1465 Value *V = getValueFwdRef(ValueList, Record[1], Ty, TyID);
1466 if (!V)
1467 return error("Invalid value reference from metadata");
1468
1470 callMDTypeCallback(&MD, TyID);
1471 MetadataList.assignValue(MD, NextMetadataNo);
1472 NextMetadataNo++;
1473 break;
1474 }
1476 IsDistinct = true;
1477 [[fallthrough]];
1478 case bitc::METADATA_NODE: {
1480 Elts.reserve(Record.size());
1481 for (unsigned ID : Record)
1482 Elts.push_back(getMDOrNull(ID));
1483 MetadataList.assignValue(IsDistinct ? MDNode::getDistinct(Context, Elts)
1484 : MDNode::get(Context, Elts),
1485 NextMetadataNo);
1486 NextMetadataNo++;
1487 break;
1488 }
1490 // 5: inlinedAt, 6: isImplicit, 8: Key Instructions fields.
1491 if (Record.size() != 5 && Record.size() != 6 && Record.size() != 8)
1492 return error("Invalid record");
1493
1494 IsDistinct = Record[0];
1495 unsigned Line = Record[1];
1496 unsigned Column = Record[2];
1497 Metadata *Scope = getMD(Record[3]);
1498 Metadata *InlinedAt = getMDOrNull(Record[4]);
1499 bool ImplicitCode = Record.size() >= 6 && Record[5];
1500 uint64_t AtomGroup = Record.size() == 8 ? Record[6] : 0;
1501 uint8_t AtomRank = Record.size() == 8 ? Record[7] : 0;
1502 MetadataList.assignValue(
1503 GET_OR_DISTINCT(DILocation, (Context, Line, Column, Scope, InlinedAt,
1504 ImplicitCode, AtomGroup, AtomRank)),
1505 NextMetadataNo);
1506 NextMetadataNo++;
1507 break;
1508 }
1510 if (Record.size() < 4)
1511 return error("Invalid record");
1512
1513 IsDistinct = Record[0];
1514 unsigned Tag = Record[1];
1515 unsigned Version = Record[2];
1516
1517 if (Tag >= 1u << 16 || Version != 0)
1518 return error("Invalid record");
1519
1520 auto *Header = getMDString(Record[3]);
1522 for (unsigned I = 4, E = Record.size(); I != E; ++I)
1523 DwarfOps.push_back(getMDOrNull(Record[I]));
1524 MetadataList.assignValue(
1525 GET_OR_DISTINCT(GenericDINode, (Context, Tag, Header, DwarfOps)),
1526 NextMetadataNo);
1527 NextMetadataNo++;
1528 break;
1529 }
1531 Metadata *Val = nullptr;
1532 // Operand 'count' is interpreted as:
1533 // - Signed integer (version 0)
1534 // - Metadata node (version 1)
1535 // Operand 'lowerBound' is interpreted as:
1536 // - Signed integer (version 0 and 1)
1537 // - Metadata node (version 2)
1538 // Operands 'upperBound' and 'stride' are interpreted as:
1539 // - Metadata node (version 2)
1540 switch (Record[0] >> 1) {
1541 case 0:
1542 Val = GET_OR_DISTINCT(DISubrange,
1543 (Context, Record[1], unrotateSign(Record[2])));
1544 break;
1545 case 1:
1546 Val = GET_OR_DISTINCT(DISubrange, (Context, getMDOrNull(Record[1]),
1547 unrotateSign(Record[2])));
1548 break;
1549 case 2:
1550 Val = GET_OR_DISTINCT(
1551 DISubrange, (Context, getMDOrNull(Record[1]), getMDOrNull(Record[2]),
1552 getMDOrNull(Record[3]), getMDOrNull(Record[4])));
1553 break;
1554 default:
1555 return error("Invalid record: Unsupported version of DISubrange");
1556 }
1557
1558 MetadataList.assignValue(Val, NextMetadataNo);
1559 IsDistinct = Record[0] & 1;
1560 NextMetadataNo++;
1561 break;
1562 }
1564 Metadata *Val = nullptr;
1565 Val = GET_OR_DISTINCT(DIGenericSubrange,
1566 (Context, getMDOrNull(Record[1]),
1567 getMDOrNull(Record[2]), getMDOrNull(Record[3]),
1568 getMDOrNull(Record[4])));
1569
1570 MetadataList.assignValue(Val, NextMetadataNo);
1571 IsDistinct = Record[0] & 1;
1572 NextMetadataNo++;
1573 break;
1574 }
1576 if (Record.size() < 3)
1577 return error("Invalid record");
1578
1579 IsDistinct = Record[0] & 1;
1580 bool IsUnsigned = Record[0] & 2;
1581 bool IsBigInt = Record[0] & 4;
1582 APInt Value;
1583
1584 if (IsBigInt) {
1585 const uint64_t BitWidth = Record[1];
1586 const size_t NumWords = Record.size() - 3;
1587 Value = readWideAPInt(ArrayRef(&Record[3], NumWords), BitWidth);
1588 } else
1589 Value = APInt(64, unrotateSign(Record[1]), !IsUnsigned);
1590
1591 MetadataList.assignValue(
1592 GET_OR_DISTINCT(DIEnumerator,
1593 (Context, Value, IsUnsigned, getMDString(Record[2]))),
1594 NextMetadataNo);
1595 NextMetadataNo++;
1596 break;
1597 }
1599 if (Record.size() < 6 || Record.size() > 12)
1600 return error("Invalid record");
1601
1602 IsDistinct = Record[0] & 1;
1603 bool SizeIsMetadata = Record[0] & 2;
1604 DINode::DIFlags Flags = (Record.size() > 6)
1605 ? static_cast<DINode::DIFlags>(Record[6])
1606 : DINode::FlagZero;
1607 uint32_t NumExtraInhabitants = (Record.size() > 7) ? Record[7] : 0;
1608 uint32_t DataSizeInBits = (Record.size() > 8) ? Record[8] : 0;
1609 Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[3]);
1610 Metadata *File = nullptr;
1611 unsigned LineNo = 0;
1612 Metadata *Scope = nullptr;
1613 if (Record.size() > 9) {
1614 File = getMDOrNull(Record[9]);
1615 LineNo = Record[10];
1616 Scope = getMDOrNull(Record[11]);
1617 }
1618 MetadataList.assignValue(
1619 GET_OR_DISTINCT(DIBasicType,
1620 (Context, Record[1], getMDString(Record[2]), File,
1621 LineNo, Scope, SizeInBits, Record[4], Record[5],
1622 NumExtraInhabitants, DataSizeInBits, Flags)),
1623 NextMetadataNo);
1624 NextMetadataNo++;
1625 break;
1626 }
1628 if (Record.size() < 11)
1629 return error("Invalid record");
1630
1631 IsDistinct = Record[0] & 1;
1632 bool SizeIsMetadata = Record[0] & 2;
1633 DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[6]);
1634
1635 Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[3]);
1636
1637 size_t Offset = 9;
1638
1639 auto ReadWideInt = [&]() {
1640 uint64_t Encoded = Record[Offset++];
1641 unsigned NumWords = Encoded >> 32;
1642 unsigned BitWidth = Encoded & 0xffffffff;
1643 auto Value = readWideAPInt(ArrayRef(&Record[Offset], NumWords), BitWidth);
1644 Offset += NumWords;
1645 return Value;
1646 };
1647
1648 APInt Numerator = ReadWideInt();
1649 APInt Denominator = ReadWideInt();
1650
1651 Metadata *File = nullptr;
1652 unsigned LineNo = 0;
1653 Metadata *Scope = nullptr;
1654
1655 if (Offset + 3 == Record.size()) {
1656 File = getMDOrNull(Record[Offset]);
1657 LineNo = Record[Offset + 1];
1658 Scope = getMDOrNull(Record[Offset + 2]);
1659 } else if (Offset != Record.size())
1660 return error("Invalid record");
1661
1662 MetadataList.assignValue(
1663 GET_OR_DISTINCT(DIFixedPointType,
1664 (Context, Record[1], getMDString(Record[2]), File,
1665 LineNo, Scope, SizeInBits, Record[4], Record[5], Flags,
1666 Record[7], Record[8], Numerator, Denominator)),
1667 NextMetadataNo);
1668 NextMetadataNo++;
1669 break;
1670 }
1672 if (Record.size() > 9 || Record.size() < 8)
1673 return error("Invalid record");
1674
1675 IsDistinct = Record[0] & 1;
1676 bool SizeIsMetadata = Record[0] & 2;
1677 bool SizeIs8 = Record.size() == 8;
1678 // StringLocationExp (i.e. Record[5]) is added at a later time
1679 // than the other fields. The code here enables backward compatibility.
1680 Metadata *StringLocationExp = SizeIs8 ? nullptr : getMDOrNull(Record[5]);
1681 unsigned Offset = SizeIs8 ? 5 : 6;
1682 Metadata *SizeInBits =
1683 getMetadataOrConstant(SizeIsMetadata, Record[Offset]);
1684
1685 MetadataList.assignValue(
1686 GET_OR_DISTINCT(DIStringType,
1687 (Context, Record[1], getMDString(Record[2]),
1688 getMDOrNull(Record[3]), getMDOrNull(Record[4]),
1689 StringLocationExp, SizeInBits, Record[Offset + 1],
1690 Record[Offset + 2])),
1691 NextMetadataNo);
1692 NextMetadataNo++;
1693 break;
1694 }
1696 if (Record.size() < 12 || Record.size() > 15)
1697 return error("Invalid record");
1698
1699 // DWARF address space is encoded as N->getDWARFAddressSpace() + 1. 0 means
1700 // that there is no DWARF address space associated with DIDerivedType.
1701 std::optional<unsigned> DWARFAddressSpace;
1702 if (Record.size() > 12 && Record[12])
1703 DWARFAddressSpace = Record[12] - 1;
1704
1705 Metadata *Annotations = nullptr;
1706 std::optional<DIDerivedType::PtrAuthData> PtrAuthData;
1707
1708 // Only look for annotations/ptrauth if both are allocated.
1709 // If not, we can't tell which was intended to be embedded, as both ptrauth
1710 // and annotations have been expected at Record[13] at various times.
1711 if (Record.size() > 14) {
1712 if (Record[13])
1713 Annotations = getMDOrNull(Record[13]);
1714 if (Record[14])
1715 PtrAuthData.emplace(Record[14]);
1716 }
1717
1718 IsDistinct = Record[0] & 1;
1719 bool SizeIsMetadata = Record[0] & 2;
1720 DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
1721
1722 Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[7]);
1723 Metadata *OffsetInBits = getMetadataOrConstant(SizeIsMetadata, Record[9]);
1724
1725 MetadataList.assignValue(
1726 GET_OR_DISTINCT(DIDerivedType,
1727 (Context, Record[1], getMDString(Record[2]),
1728 getMDOrNull(Record[3]), Record[4],
1729 getDITypeRefOrNull(Record[5]),
1730 getDITypeRefOrNull(Record[6]), SizeInBits, Record[8],
1731 OffsetInBits, DWARFAddressSpace, PtrAuthData, Flags,
1732 getDITypeRefOrNull(Record[11]), Annotations)),
1733 NextMetadataNo);
1734 NextMetadataNo++;
1735 break;
1736 }
1738 if (Record.size() != 13)
1739 return error("Invalid record");
1740
1741 IsDistinct = Record[0] & 1;
1742 bool SizeIsMetadata = Record[0] & 2;
1743 DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7]);
1744
1745 Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[5]);
1746
1747 MetadataList.assignValue(
1748 GET_OR_DISTINCT(DISubrangeType,
1749 (Context, getMDString(Record[1]),
1750 getMDOrNull(Record[2]), Record[3],
1751 getMDOrNull(Record[4]), SizeInBits, Record[6], Flags,
1752 getDITypeRefOrNull(Record[8]), getMDOrNull(Record[9]),
1753 getMDOrNull(Record[10]), getMDOrNull(Record[11]),
1754 getMDOrNull(Record[12]))),
1755 NextMetadataNo);
1756 NextMetadataNo++;
1757 break;
1758 }
1760 if (Record.size() < 16 || Record.size() > 26)
1761 return error("Invalid record");
1762
1763 // If we have a UUID and this is not a forward declaration, lookup the
1764 // mapping.
1765 IsDistinct = Record[0] & 0x1;
1766 bool IsNotUsedInTypeRef = Record[0] & 2;
1767 bool SizeIsMetadata = Record[0] & 4;
1768 unsigned Tag = Record[1];
1769 MDString *Name = getMDString(Record[2]);
1770 Metadata *File = getMDOrNull(Record[3]);
1771 unsigned Line = Record[4];
1772 Metadata *Scope = getDITypeRefOrNull(Record[5]);
1773 Metadata *BaseType = nullptr;
1774 if (Record[8] > (uint64_t)std::numeric_limits<uint32_t>::max())
1775 return error("Alignment value is too large");
1776 uint32_t AlignInBits = Record[8];
1777 Metadata *OffsetInBits = nullptr;
1778 uint32_t NumExtraInhabitants = (Record.size() > 22) ? Record[22] : 0;
1779 DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
1780 Metadata *Elements = nullptr;
1781 unsigned RuntimeLang = Record[12];
1782 std::optional<uint32_t> EnumKind;
1783
1784 Metadata *VTableHolder = nullptr;
1785 Metadata *TemplateParams = nullptr;
1786 Metadata *Discriminator = nullptr;
1787 Metadata *DataLocation = nullptr;
1788 Metadata *Associated = nullptr;
1789 Metadata *Allocated = nullptr;
1790 Metadata *Rank = nullptr;
1791 Metadata *Annotations = nullptr;
1792 Metadata *Specification = nullptr;
1793 Metadata *BitStride = nullptr;
1794 auto *Identifier = getMDString(Record[15]);
1795 // If this module is being parsed so that it can be ThinLTO imported
1796 // into another module, composite types only need to be imported as
1797 // type declarations (unless full type definitions are requested).
1798 // Create type declarations up front to save memory. This is only
1799 // done for types which have an Identifier, and are therefore
1800 // subject to the ODR.
1801 //
1802 // buildODRType handles the case where this is type ODRed with a
1803 // definition needed by the importing module, in which case the
1804 // existing definition is used.
1805 //
1806 // We always import full definitions for anonymous composite types,
1807 // as without a name, debuggers cannot easily resolve a declaration
1808 // to its definition.
1809 if (IsImporting && !ImportFullTypeDefinitions && Identifier && Name &&
1810 (Tag == dwarf::DW_TAG_enumeration_type ||
1811 Tag == dwarf::DW_TAG_class_type ||
1812 Tag == dwarf::DW_TAG_structure_type ||
1813 Tag == dwarf::DW_TAG_union_type)) {
1814 Flags = Flags | DINode::FlagFwdDecl;
1815 // This is a hack around preserving template parameters for simplified
1816 // template names - it should probably be replaced with a
1817 // DICompositeType flag specifying whether template parameters are
1818 // required on declarations of this type.
1819 StringRef NameStr = Name->getString();
1820 if (!NameStr.contains('<') || NameStr.starts_with("_STN|"))
1821 TemplateParams = getMDOrNull(Record[14]);
1822 } else {
1823 BaseType = getDITypeRefOrNull(Record[6]);
1824
1825 OffsetInBits = getMetadataOrConstant(SizeIsMetadata, Record[9]);
1826
1827 Elements = getMDOrNull(Record[11]);
1828 VTableHolder = getDITypeRefOrNull(Record[13]);
1829 TemplateParams = getMDOrNull(Record[14]);
1830 if (Record.size() > 16)
1831 Discriminator = getMDOrNull(Record[16]);
1832 if (Record.size() > 17)
1833 DataLocation = getMDOrNull(Record[17]);
1834 if (Record.size() > 19) {
1835 Associated = getMDOrNull(Record[18]);
1836 Allocated = getMDOrNull(Record[19]);
1837 }
1838 if (Record.size() > 20) {
1839 Rank = getMDOrNull(Record[20]);
1840 }
1841 if (Record.size() > 21) {
1842 Annotations = getMDOrNull(Record[21]);
1843 }
1844 if (Record.size() > 23) {
1845 Specification = getMDOrNull(Record[23]);
1846 }
1847 if (Record.size() > 25)
1848 BitStride = getMDOrNull(Record[25]);
1849 }
1850
1851 if (Record.size() > 24 && Record[24] != dwarf::DW_APPLE_ENUM_KIND_invalid)
1852 EnumKind = Record[24];
1853
1854 Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[7]);
1855
1856 DICompositeType *CT = nullptr;
1857 if (Identifier)
1859 Context, *Identifier, Tag, Name, File, Line, Scope, BaseType,
1860 SizeInBits, AlignInBits, OffsetInBits, Specification,
1861 NumExtraInhabitants, Flags, Elements, RuntimeLang, EnumKind,
1862 VTableHolder, TemplateParams, Discriminator, DataLocation, Associated,
1863 Allocated, Rank, Annotations, BitStride);
1864
1865 // Create a node if we didn't get a lazy ODR type.
1866 if (!CT)
1867 CT = GET_OR_DISTINCT(
1868 DICompositeType,
1869 (Context, Tag, Name, File, Line, Scope, BaseType, SizeInBits,
1870 AlignInBits, OffsetInBits, Flags, Elements, RuntimeLang, EnumKind,
1871 VTableHolder, TemplateParams, Identifier, Discriminator,
1872 DataLocation, Associated, Allocated, Rank, Annotations,
1873 Specification, NumExtraInhabitants, BitStride));
1874 if (!IsNotUsedInTypeRef && Identifier)
1875 MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
1876
1877 MetadataList.assignValue(CT, NextMetadataNo);
1878 NextMetadataNo++;
1879 break;
1880 }
1882 if (Record.size() < 3 || Record.size() > 4)
1883 return error("Invalid record");
1884 bool IsOldTypeArray = Record[0] < 2;
1885 unsigned CC = (Record.size() > 3) ? Record[3] : 0;
1886
1887 IsDistinct = Record[0] & 0x1;
1888 DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[1]);
1889 Metadata *Types = getMDOrNull(Record[2]);
1890 if (LLVM_UNLIKELY(IsOldTypeArray))
1891 Types = MetadataList.upgradeTypeArray(Types);
1892
1893 MetadataList.assignValue(
1894 GET_OR_DISTINCT(DISubroutineType, (Context, Flags, CC, Types)),
1895 NextMetadataNo);
1896 NextMetadataNo++;
1897 break;
1898 }
1899
1900 case bitc::METADATA_MODULE: {
1901 if (Record.size() < 5 || Record.size() > 9)
1902 return error("Invalid record");
1903
1904 unsigned Offset = Record.size() >= 8 ? 2 : 1;
1905 IsDistinct = Record[0];
1906 MetadataList.assignValue(
1908 DIModule,
1909 (Context, Record.size() >= 8 ? getMDOrNull(Record[1]) : nullptr,
1910 getMDOrNull(Record[0 + Offset]), getMDString(Record[1 + Offset]),
1911 getMDString(Record[2 + Offset]), getMDString(Record[3 + Offset]),
1912 getMDString(Record[4 + Offset]),
1913 Record.size() <= 7 ? 0 : Record[7],
1914 Record.size() <= 8 ? false : Record[8])),
1915 NextMetadataNo);
1916 NextMetadataNo++;
1917 break;
1918 }
1919
1920 case bitc::METADATA_FILE: {
1921 if (Record.size() != 3 && Record.size() != 5 && Record.size() != 6)
1922 return error("Invalid record");
1923
1924 IsDistinct = Record[0];
1925 std::optional<DIFile::ChecksumInfo<MDString *>> Checksum;
1926 // The BitcodeWriter writes null bytes into Record[3:4] when the Checksum
1927 // is not present. This matches up with the old internal representation,
1928 // and the old encoding for CSK_None in the ChecksumKind. The new
1929 // representation reserves the value 0 in the ChecksumKind to continue to
1930 // encode None in a backwards-compatible way.
1931 if (Record.size() > 4 && Record[3] && Record[4])
1932 Checksum.emplace(static_cast<DIFile::ChecksumKind>(Record[3]),
1933 getMDString(Record[4]));
1934 MetadataList.assignValue(
1935 GET_OR_DISTINCT(DIFile,
1936 (Context, getMDString(Record[1]),
1937 getMDString(Record[2]), Checksum,
1938 Record.size() > 5 ? getMDString(Record[5]) : nullptr)),
1939 NextMetadataNo);
1940 NextMetadataNo++;
1941 break;
1942 }
1944 if (Record.size() < 14 || Record.size() > 23)
1945 return error("Invalid record");
1946
1947 // Ignore Record[0], which indicates whether this compile unit is
1948 // distinct. It's always distinct.
1949 IsDistinct = true;
1950
1951 const auto LangVersionMask = (uint64_t(1) << 63);
1952 const bool HasVersionedLanguage = Record[1] & LangVersionMask;
1953 const uint32_t LanguageVersion = Record.size() > 22 ? Record[22] : 0;
1954
1955 auto *CU = DICompileUnit::getDistinct(
1956 Context,
1957 HasVersionedLanguage
1958 ? DISourceLanguageName(Record[1] & ~LangVersionMask,
1959 LanguageVersion)
1960 : DISourceLanguageName(Record[1]),
1961 getMDOrNull(Record[2]), getMDString(Record[3]), Record[4],
1962 getMDString(Record[5]), Record[6], getMDString(Record[7]), Record[8],
1963 getMDOrNull(Record[9]), getMDOrNull(Record[10]),
1964 getMDOrNull(Record[12]), getMDOrNull(Record[13]),
1965 Record.size() <= 15 ? nullptr : getMDOrNull(Record[15]),
1966 Record.size() <= 14 ? 0 : Record[14],
1967 Record.size() <= 16 ? true : Record[16],
1968 Record.size() <= 17 ? false : Record[17],
1969 Record.size() <= 18 ? 0 : Record[18],
1970 Record.size() <= 19 ? false : Record[19],
1971 Record.size() <= 20 ? nullptr : getMDString(Record[20]),
1972 Record.size() <= 21 ? nullptr : getMDString(Record[21]));
1973
1974 MetadataList.assignValue(CU, NextMetadataNo);
1975 NextMetadataNo++;
1976
1977 // Move the Upgrade the list of subprograms.
1978 if (Metadata *SPs = getMDOrNullWithoutPlaceholders(Record[11]))
1979 CUSubprograms.push_back({CU, SPs});
1980 break;
1981 }
1983 if (Record.size() < 18 || Record.size() > 22)
1984 return error("Invalid record");
1985
1986 bool HasSPFlags = Record[0] & 4;
1987
1990 if (!HasSPFlags)
1991 Flags = static_cast<DINode::DIFlags>(Record[11 + 2]);
1992 else {
1993 Flags = static_cast<DINode::DIFlags>(Record[11]);
1994 SPFlags = static_cast<DISubprogram::DISPFlags>(Record[9]);
1995 }
1996
1997 // Support for old metadata when
1998 // subprogram specific flags are placed in DIFlags.
1999 const unsigned DIFlagMainSubprogram = 1 << 21;
2000 bool HasOldMainSubprogramFlag = Flags & DIFlagMainSubprogram;
2001 if (HasOldMainSubprogramFlag)
2002 // Remove old DIFlagMainSubprogram from DIFlags.
2003 // Note: This assumes that any future use of bit 21 defaults to it
2004 // being 0.
2005 Flags &= ~static_cast<DINode::DIFlags>(DIFlagMainSubprogram);
2006
2007 if (HasOldMainSubprogramFlag && HasSPFlags)
2008 SPFlags |= DISubprogram::SPFlagMainSubprogram;
2009 else if (!HasSPFlags)
2010 SPFlags = DISubprogram::toSPFlags(
2011 /*IsLocalToUnit=*/Record[7], /*IsDefinition=*/Record[8],
2012 /*IsOptimized=*/Record[14], /*Virtuality=*/Record[11],
2013 /*IsMainSubprogram=*/HasOldMainSubprogramFlag);
2014
2015 // All definitions should be distinct.
2016 IsDistinct = (Record[0] & 1) || (SPFlags & DISubprogram::SPFlagDefinition);
2017 // Version 1 has a Function as Record[15].
2018 // Version 2 has removed Record[15].
2019 // Version 3 has the Unit as Record[15].
2020 // Version 4 added thisAdjustment.
2021 // Version 5 repacked flags into DISPFlags, changing many element numbers.
2022 bool HasUnit = Record[0] & 2;
2023 if (!HasSPFlags && HasUnit && Record.size() < 19)
2024 return error("Invalid record");
2025 if (HasSPFlags && !HasUnit)
2026 return error("Invalid record");
2027 // Accommodate older formats.
2028 bool HasFn = false;
2029 bool HasThisAdj = true;
2030 bool HasThrownTypes = true;
2031 bool HasAnnotations = false;
2032 bool HasTargetFuncName = false;
2033 unsigned OffsetA = 0;
2034 unsigned OffsetB = 0;
2035 // Key instructions won't be enabled in old-format bitcode, so only
2036 // check it if HasSPFlags is true.
2037 bool UsesKeyInstructions = false;
2038 if (!HasSPFlags) {
2039 OffsetA = 2;
2040 OffsetB = 2;
2041 if (Record.size() >= 19) {
2042 HasFn = !HasUnit;
2043 OffsetB++;
2044 }
2045 HasThisAdj = Record.size() >= 20;
2046 HasThrownTypes = Record.size() >= 21;
2047 } else {
2048 HasAnnotations = Record.size() >= 19;
2049 HasTargetFuncName = Record.size() >= 20;
2050 UsesKeyInstructions = Record.size() >= 21 ? Record[20] : 0;
2051 }
2052
2053 Metadata *CUorFn = getMDOrNull(Record[12 + OffsetB]);
2054 DISubprogram *SP = GET_OR_DISTINCT(
2055 DISubprogram,
2056 (Context,
2057 getDITypeRefOrNull(Record[1]), // scope
2058 getMDString(Record[2]), // name
2059 getMDString(Record[3]), // linkageName
2060 getMDOrNull(Record[4]), // file
2061 Record[5], // line
2062 getMDOrNull(Record[6]), // type
2063 Record[7 + OffsetA], // scopeLine
2064 getDITypeRefOrNull(Record[8 + OffsetA]), // containingType
2065 Record[10 + OffsetA], // virtualIndex
2066 HasThisAdj ? Record[16 + OffsetB] : 0, // thisAdjustment
2067 Flags, // flags
2068 SPFlags, // SPFlags
2069 HasUnit ? CUorFn : nullptr, // unit
2070 getMDOrNull(Record[13 + OffsetB]), // templateParams
2071 getMDOrNull(Record[14 + OffsetB]), // declaration
2072 getMDOrNull(Record[15 + OffsetB]), // retainedNodes
2073 HasThrownTypes ? getMDOrNull(Record[17 + OffsetB])
2074 : nullptr, // thrownTypes
2075 HasAnnotations ? getMDOrNull(Record[18 + OffsetB])
2076 : nullptr, // annotations
2077 HasTargetFuncName ? getMDString(Record[19 + OffsetB])
2078 : nullptr, // targetFuncName
2079 UsesKeyInstructions));
2080 MetadataList.assignValue(SP, NextMetadataNo);
2081 NextMetadataNo++;
2082
2083 if (IsDistinct)
2084 NewDistinctSPs.push_back(SP);
2085
2086 // Upgrade sp->function mapping to function->sp mapping.
2087 if (HasFn) {
2088 if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(CUorFn))
2089 if (auto *F = dyn_cast<Function>(CMD->getValue())) {
2090 if (F->isMaterializable())
2091 // Defer until materialized; unmaterialized functions may not have
2092 // metadata.
2093 FunctionsWithSPs[F] = SP;
2094 else if (!F->empty())
2095 F->setSubprogram(SP);
2096 }
2097 }
2098 break;
2099 }
2101 if (Record.size() != 5)
2102 return error("Invalid record");
2103
2104 IsDistinct = Record[0];
2105 MetadataList.assignValue(
2106 GET_OR_DISTINCT(DILexicalBlock,
2107 (Context, getMDOrNull(Record[1]),
2108 getMDOrNull(Record[2]), Record[3], Record[4])),
2109 NextMetadataNo);
2110 NextMetadataNo++;
2111 break;
2112 }
2114 if (Record.size() != 4)
2115 return error("Invalid record");
2116
2117 IsDistinct = Record[0];
2118 MetadataList.assignValue(
2119 GET_OR_DISTINCT(DILexicalBlockFile,
2120 (Context, getMDOrNull(Record[1]),
2121 getMDOrNull(Record[2]), Record[3])),
2122 NextMetadataNo);
2123 NextMetadataNo++;
2124 break;
2125 }
2127 IsDistinct = Record[0] & 1;
2128 MetadataList.assignValue(
2129 GET_OR_DISTINCT(DICommonBlock,
2130 (Context, getMDOrNull(Record[1]),
2131 getMDOrNull(Record[2]), getMDString(Record[3]),
2132 getMDOrNull(Record[4]), Record[5])),
2133 NextMetadataNo);
2134 NextMetadataNo++;
2135 break;
2136 }
2138 // Newer versions of DINamespace dropped file and line.
2139 MDString *Name;
2140 if (Record.size() == 3)
2141 Name = getMDString(Record[2]);
2142 else if (Record.size() == 5)
2143 Name = getMDString(Record[3]);
2144 else
2145 return error("Invalid record");
2146
2147 IsDistinct = Record[0] & 1;
2148 bool ExportSymbols = Record[0] & 2;
2149 MetadataList.assignValue(
2150 GET_OR_DISTINCT(DINamespace,
2151 (Context, getMDOrNull(Record[1]), Name, ExportSymbols)),
2152 NextMetadataNo);
2153 NextMetadataNo++;
2154 break;
2155 }
2156 case bitc::METADATA_MACRO: {
2157 if (Record.size() != 5)
2158 return error("Invalid record");
2159
2160 IsDistinct = Record[0];
2161 MetadataList.assignValue(
2162 GET_OR_DISTINCT(DIMacro,
2163 (Context, Record[1], Record[2], getMDString(Record[3]),
2164 getMDString(Record[4]))),
2165 NextMetadataNo);
2166 NextMetadataNo++;
2167 break;
2168 }
2170 if (Record.size() != 5)
2171 return error("Invalid record");
2172
2173 IsDistinct = Record[0];
2174 MetadataList.assignValue(
2175 GET_OR_DISTINCT(DIMacroFile,
2176 (Context, Record[1], Record[2], getMDOrNull(Record[3]),
2177 getMDOrNull(Record[4]))),
2178 NextMetadataNo);
2179 NextMetadataNo++;
2180 break;
2181 }
2183 if (Record.size() < 3 || Record.size() > 4)
2184 return error("Invalid record");
2185
2186 IsDistinct = Record[0];
2187 MetadataList.assignValue(
2188 GET_OR_DISTINCT(DITemplateTypeParameter,
2189 (Context, getMDString(Record[1]),
2190 getDITypeRefOrNull(Record[2]),
2191 (Record.size() == 4) ? getMDOrNull(Record[3])
2192 : getMDOrNull(false))),
2193 NextMetadataNo);
2194 NextMetadataNo++;
2195 break;
2196 }
2198 if (Record.size() < 5 || Record.size() > 6)
2199 return error("Invalid record");
2200
2201 IsDistinct = Record[0];
2202
2203 MetadataList.assignValue(
2205 DITemplateValueParameter,
2206 (Context, Record[1], getMDString(Record[2]),
2207 getDITypeRefOrNull(Record[3]),
2208 (Record.size() == 6) ? getMDOrNull(Record[4]) : getMDOrNull(false),
2209 (Record.size() == 6) ? getMDOrNull(Record[5])
2210 : getMDOrNull(Record[4]))),
2211 NextMetadataNo);
2212 NextMetadataNo++;
2213 break;
2214 }
2216 if (Record.size() < 11 || Record.size() > 13)
2217 return error("Invalid record");
2218
2219 IsDistinct = Record[0] & 1;
2220 unsigned Version = Record[0] >> 1;
2221
2222 if (Version == 2) {
2223 Metadata *Annotations = nullptr;
2224 if (Record.size() > 12)
2225 Annotations = getMDOrNull(Record[12]);
2226
2227 MetadataList.assignValue(
2228 GET_OR_DISTINCT(DIGlobalVariable,
2229 (Context, getMDOrNull(Record[1]),
2230 getMDString(Record[2]), getMDString(Record[3]),
2231 getMDOrNull(Record[4]), Record[5],
2232 getDITypeRefOrNull(Record[6]), Record[7], Record[8],
2233 getMDOrNull(Record[9]), getMDOrNull(Record[10]),
2234 Record[11], Annotations)),
2235 NextMetadataNo);
2236
2237 NextMetadataNo++;
2238 } else if (Version == 1) {
2239 // No upgrade necessary. A null field will be introduced to indicate
2240 // that no parameter information is available.
2241 MetadataList.assignValue(
2243 DIGlobalVariable,
2244 (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
2245 getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
2246 getDITypeRefOrNull(Record[6]), Record[7], Record[8],
2247 getMDOrNull(Record[10]), nullptr, Record[11], nullptr)),
2248 NextMetadataNo);
2249
2250 NextMetadataNo++;
2251 } else if (Version == 0) {
2252 // Upgrade old metadata, which stored a global variable reference or a
2253 // ConstantInt here.
2254 NeedUpgradeToDIGlobalVariableExpression = true;
2255 Metadata *Expr = getMDOrNull(Record[9]);
2256 uint32_t AlignInBits = 0;
2257 if (Record.size() > 11) {
2258 if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max())
2259 return error("Alignment value is too large");
2260 AlignInBits = Record[11];
2261 }
2262 GlobalVariable *Attach = nullptr;
2263 if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
2264 if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
2265 Attach = GV;
2266 Expr = nullptr;
2267 } else if (auto *CI = dyn_cast<ConstantInt>(CMD->getValue())) {
2268 Expr = DIExpression::get(Context,
2269 {dwarf::DW_OP_constu, CI->getZExtValue(),
2270 dwarf::DW_OP_stack_value});
2271 } else {
2272 Expr = nullptr;
2273 }
2274 }
2275 DIGlobalVariable *DGV = GET_OR_DISTINCT(
2276 DIGlobalVariable,
2277 (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
2278 getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
2279 getDITypeRefOrNull(Record[6]), Record[7], Record[8],
2280 getMDOrNull(Record[10]), nullptr, AlignInBits, nullptr));
2281
2282 DIGlobalVariableExpression *DGVE = nullptr;
2283 if (Attach || Expr)
2284 DGVE = DIGlobalVariableExpression::getDistinct(
2285 Context, DGV, Expr ? Expr : DIExpression::get(Context, {}));
2286 if (Attach)
2287 Attach->addDebugInfo(DGVE);
2288
2289 auto *MDNode = Expr ? cast<Metadata>(DGVE) : cast<Metadata>(DGV);
2290 MetadataList.assignValue(MDNode, NextMetadataNo);
2291 NextMetadataNo++;
2292 } else
2293 return error("Invalid record");
2294
2295 break;
2296 }
2298 if (Record.size() != 1)
2299 return error("Invalid DIAssignID record.");
2300
2301 IsDistinct = Record[0] & 1;
2302 if (!IsDistinct)
2303 return error("Invalid DIAssignID record. Must be distinct");
2304
2305 MetadataList.assignValue(DIAssignID::getDistinct(Context), NextMetadataNo);
2306 NextMetadataNo++;
2307 break;
2308 }
2310 // 10th field is for the obseleted 'inlinedAt:' field.
2311 if (Record.size() < 8 || Record.size() > 10)
2312 return error("Invalid record");
2313
2314 IsDistinct = Record[0] & 1;
2315 bool HasAlignment = Record[0] & 2;
2316 // 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
2317 // DW_TAG_arg_variable, if we have alignment flag encoded it means, that
2318 // this is newer version of record which doesn't have artificial tag.
2319 bool HasTag = !HasAlignment && Record.size() > 8;
2320 DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 + HasTag]);
2321 uint32_t AlignInBits = 0;
2322 Metadata *Annotations = nullptr;
2323 if (HasAlignment) {
2324 if (Record[8] > (uint64_t)std::numeric_limits<uint32_t>::max())
2325 return error("Alignment value is too large");
2326 AlignInBits = Record[8];
2327 if (Record.size() > 9)
2328 Annotations = getMDOrNull(Record[9]);
2329 }
2330
2331 MetadataList.assignValue(
2332 GET_OR_DISTINCT(DILocalVariable,
2333 (Context, getMDOrNull(Record[1 + HasTag]),
2334 getMDString(Record[2 + HasTag]),
2335 getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag],
2336 getDITypeRefOrNull(Record[5 + HasTag]),
2337 Record[6 + HasTag], Flags, AlignInBits, Annotations)),
2338 NextMetadataNo);
2339 NextMetadataNo++;
2340 break;
2341 }
2342 case bitc::METADATA_LABEL: {
2343 if (Record.size() < 5 || Record.size() > 7)
2344 return error("Invalid record");
2345
2346 IsDistinct = Record[0] & 1;
2347 uint64_t Line = Record[4];
2348 uint64_t Column = Record.size() > 5 ? Record[5] : 0;
2349 bool IsArtificial = Record[0] & 2;
2350 std::optional<unsigned> CoroSuspendIdx;
2351 if (Record.size() > 6) {
2352 uint64_t RawSuspendIdx = Record[6];
2353 if (RawSuspendIdx != std::numeric_limits<uint64_t>::max()) {
2354 if (RawSuspendIdx > (uint64_t)std::numeric_limits<unsigned>::max())
2355 return error("CoroSuspendIdx value is too large");
2356 CoroSuspendIdx = RawSuspendIdx;
2357 }
2358 }
2359
2360 MetadataList.assignValue(
2361 GET_OR_DISTINCT(DILabel,
2362 (Context, getMDOrNull(Record[1]),
2363 getMDString(Record[2]), getMDOrNull(Record[3]), Line,
2364 Column, IsArtificial, CoroSuspendIdx)),
2365 NextMetadataNo);
2366 NextMetadataNo++;
2367 break;
2368 }
2370 if (Record.size() < 1)
2371 return error("Invalid record");
2372
2373 IsDistinct = Record[0] & 1;
2374 uint64_t Version = Record[0] >> 1;
2375 auto Elts = MutableArrayRef<uint64_t>(Record).slice(1);
2376
2378 if (Error Err = upgradeDIExpression(Version, Elts, Buffer))
2379 return Err;
2380
2381 MetadataList.assignValue(GET_OR_DISTINCT(DIExpression, (Context, Elts)),
2382 NextMetadataNo);
2383 NextMetadataNo++;
2384 break;
2385 }
2387 if (Record.size() != 3)
2388 return error("Invalid record");
2389
2390 IsDistinct = Record[0];
2391 Metadata *Expr = getMDOrNull(Record[2]);
2392 if (!Expr)
2393 Expr = DIExpression::get(Context, {});
2394 MetadataList.assignValue(
2395 GET_OR_DISTINCT(DIGlobalVariableExpression,
2396 (Context, getMDOrNull(Record[1]), Expr)),
2397 NextMetadataNo);
2398 NextMetadataNo++;
2399 break;
2400 }
2402 if (Record.size() != 8)
2403 return error("Invalid record");
2404
2405 IsDistinct = Record[0];
2406 MetadataList.assignValue(
2407 GET_OR_DISTINCT(DIObjCProperty,
2408 (Context, getMDString(Record[1]),
2409 getMDOrNull(Record[2]), Record[3],
2410 /*GetterName=*/getMDString(Record[5]),
2411 /*SetterName=*/getMDString(Record[4]), Record[6],
2412 getDITypeRefOrNull(Record[7]))),
2413 NextMetadataNo);
2414 NextMetadataNo++;
2415 break;
2416 }
2418 if (Record.size() < 6 || Record.size() > 8)
2419 return error("Invalid DIImportedEntity record");
2420
2421 IsDistinct = Record[0];
2422 bool HasFile = (Record.size() >= 7);
2423 bool HasElements = (Record.size() >= 8);
2424 MetadataList.assignValue(
2425 GET_OR_DISTINCT(DIImportedEntity,
2426 (Context, Record[1], getMDOrNull(Record[2]),
2427 getDITypeRefOrNull(Record[3]),
2428 HasFile ? getMDOrNull(Record[6]) : nullptr,
2429 HasFile ? Record[4] : 0, getMDString(Record[5]),
2430 HasElements ? getMDOrNull(Record[7]) : nullptr)),
2431 NextMetadataNo);
2432 NextMetadataNo++;
2433 break;
2434 }
2436 std::string String(Record.begin(), Record.end());
2437
2438 // Test for upgrading !llvm.loop.
2439 HasSeenOldLoopTags |= mayBeOldLoopAttachmentTag(String);
2440 ++NumMDStringLoaded;
2442 MetadataList.assignValue(MD, NextMetadataNo);
2443 NextMetadataNo++;
2444 break;
2445 }
2447 auto CreateNextMDString = [&](StringRef Str) {
2448 ++NumMDStringLoaded;
2449 MetadataList.assignValue(MDString::get(Context, Str), NextMetadataNo);
2450 NextMetadataNo++;
2451 };
2452 if (Error Err = parseMetadataStrings(Record, Blob, CreateNextMDString))
2453 return Err;
2454 break;
2455 }
2457 if (Record.size() % 2 == 0)
2458 return error("Invalid record");
2459 unsigned ValueID = Record[0];
2460 if (ValueID >= ValueList.size())
2461 return error("Invalid record");
2462 if (auto *GO = dyn_cast<GlobalObject>(ValueList[ValueID]))
2463 if (Error Err = parseGlobalObjectAttachment(
2464 *GO, ArrayRef<uint64_t>(Record).slice(1)))
2465 return Err;
2466 break;
2467 }
2468 case bitc::METADATA_KIND: {
2469 // Support older bitcode files that had METADATA_KIND records in a
2470 // block with METADATA_BLOCK_ID.
2471 if (Error Err = parseMetadataKindRecord(Record))
2472 return Err;
2473 break;
2474 }
2477 Elts.reserve(Record.size());
2478 for (uint64_t Elt : Record) {
2479 Metadata *MD = getMD(Elt);
2480 if (isa<MDNode>(MD) && cast<MDNode>(MD)->isTemporary())
2481 return error(
2482 "Invalid record: DIArgList should not contain forward refs");
2483 if (!isa<ValueAsMetadata>(MD))
2484 return error("Invalid record");
2486 }
2487
2488 MetadataList.assignValue(DIArgList::get(Context, Elts), NextMetadataNo);
2489 NextMetadataNo++;
2490 break;
2491 }
2492 }
2493 return Error::success();
2494#undef GET_OR_DISTINCT
2495}
2496
2497Error MetadataLoader::MetadataLoaderImpl::parseMetadataStrings(
2498 ArrayRef<uint64_t> Record, StringRef Blob,
2499 function_ref<void(StringRef)> CallBack) {
2500 // All the MDStrings in the block are emitted together in a single
2501 // record. The strings are concatenated and stored in a blob along with
2502 // their sizes.
2503 if (Record.size() != 2)
2504 return error("Invalid record: metadata strings layout");
2505
2506 unsigned NumStrings = Record[0];
2507 unsigned StringsOffset = Record[1];
2508 if (!NumStrings)
2509 return error("Invalid record: metadata strings with no strings");
2510 if (StringsOffset > Blob.size())
2511 return error("Invalid record: metadata strings corrupt offset");
2512
2513 StringRef Lengths = Blob.slice(0, StringsOffset);
2514 SimpleBitstreamCursor R(Lengths);
2515
2516 StringRef Strings = Blob.drop_front(StringsOffset);
2517 do {
2518 if (R.AtEndOfStream())
2519 return error("Invalid record: metadata strings bad length");
2520
2521 uint32_t Size;
2522 if (Error E = R.ReadVBR(6).moveInto(Size))
2523 return E;
2524 if (Strings.size() < Size)
2525 return error("Invalid record: metadata strings truncated chars");
2526
2527 CallBack(Strings.slice(0, Size));
2528 Strings = Strings.drop_front(Size);
2529 } while (--NumStrings);
2530
2531 return Error::success();
2532}
2533
2534Error MetadataLoader::MetadataLoaderImpl::parseGlobalObjectAttachment(
2535 GlobalObject &GO, ArrayRef<uint64_t> Record) {
2536 assert(Record.size() % 2 == 0);
2537 for (unsigned I = 0, E = Record.size(); I != E; I += 2) {
2538 auto K = MDKindMap.find(Record[I]);
2539 if (K == MDKindMap.end())
2540 return error("Invalid ID");
2541 MDNode *MD =
2542 dyn_cast_or_null<MDNode>(getMetadataFwdRefOrLoad(Record[I + 1]));
2543 if (!MD)
2544 return error("Invalid metadata attachment: expect fwd ref to MDNode");
2545 GO.addMetadata(K->second, *MD);
2546 }
2547 return Error::success();
2548}
2549
2550/// Parse metadata attachments.
2552 Function &F, ArrayRef<Instruction *> InstructionList) {
2553 if (Error Err = Stream.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID))
2554 return Err;
2555
2557 PlaceholderQueue Placeholders;
2558
2559 while (true) {
2560 BitstreamEntry Entry;
2561 if (Error E = Stream.advanceSkippingSubblocks().moveInto(Entry))
2562 return E;
2563
2564 switch (Entry.Kind) {
2565 case BitstreamEntry::SubBlock: // Handled for us already.
2567 return error("Malformed block");
2569 LLVM_DEBUG(llvm::dbgs() << "\nAttachment metadata loading: ");
2570 resolveLoadedMetadata(Placeholders, DebugInfoUpgradeMode::None);
2571 return Error::success();
2573 // The interesting case.
2574 break;
2575 }
2576
2577 // Read a metadata attachment record.
2578 Record.clear();
2579 ++NumMDRecordLoaded;
2580 Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record);
2581 if (!MaybeRecord)
2582 return MaybeRecord.takeError();
2583 switch (MaybeRecord.get()) {
2584 default: // Default behavior: ignore.
2585 break;
2587 unsigned RecordLength = Record.size();
2588 if (Record.empty())
2589 return error("Invalid record");
2590 if (RecordLength % 2 == 0) {
2591 // A function attachment.
2592 if (Error Err = parseGlobalObjectAttachment(F, Record))
2593 return Err;
2594 continue;
2595 }
2596
2597 // An instruction attachment.
2598 Instruction *Inst = InstructionList[Record[0]];
2599 for (unsigned i = 1; i != RecordLength; i = i + 2) {
2600 unsigned Kind = Record[i];
2601 DenseMap<unsigned, unsigned>::iterator I = MDKindMap.find(Kind);
2602 if (I == MDKindMap.end())
2603 return error("Invalid ID");
2604 if (I->second == LLVMContext::MD_tbaa && StripTBAA)
2605 continue;
2606
2607 auto Idx = Record[i + 1];
2608 if (Idx < (MDStringRef.size() + GlobalMetadataBitPosIndex.size()) &&
2609 !MetadataList.lookup(Idx)) {
2610 // Load the attachment if it is in the lazy-loadable range and hasn't
2611 // been loaded yet.
2612 lazyLoadOneMetadata(Idx, Placeholders);
2613 LLVM_DEBUG(llvm::dbgs() << "\nLazy attachment metadata loading: ");
2614 resolveLoadedMetadata(Placeholders, DebugInfoUpgradeMode::None);
2615 }
2616
2617 Metadata *Node = MetadataList.getMetadataFwdRef(Idx);
2619 // Drop the attachment. This used to be legal, but there's no
2620 // upgrade path.
2621 break;
2623 if (!MD)
2624 return error("Invalid metadata attachment");
2625
2626 if (HasSeenOldLoopTags && I->second == LLVMContext::MD_loop)
2628
2629 if (I->second == LLVMContext::MD_tbaa) {
2630 assert(!MD->isTemporary() && "should load MDs before attachments");
2631 MD = UpgradeTBAANode(*MD);
2632 }
2633 Inst->setMetadata(I->second, MD);
2634 }
2635 break;
2636 }
2637 }
2638 }
2639}
2640
2641/// Parse a single METADATA_KIND record, inserting result in MDKindMap.
2642Error MetadataLoader::MetadataLoaderImpl::parseMetadataKindRecord(
2644 if (Record.size() < 2)
2645 return error("Invalid record");
2646
2647 unsigned Kind = Record[0];
2648 SmallString<8> Name(Record.begin() + 1, Record.end());
2649
2650 unsigned NewKind = TheModule.getMDKindID(Name.str());
2651 if (!MDKindMap.insert(std::make_pair(Kind, NewKind)).second)
2652 return error("Conflicting METADATA_KIND records");
2653 return Error::success();
2654}
2655
2656/// Parse the metadata kinds out of the METADATA_KIND_BLOCK.
2658 if (Error Err = Stream.EnterSubBlock(bitc::METADATA_KIND_BLOCK_ID))
2659 return Err;
2660
2662
2663 // Read all the records.
2664 while (true) {
2665 BitstreamEntry Entry;
2666 if (Error E = Stream.advanceSkippingSubblocks().moveInto(Entry))
2667 return E;
2668
2669 switch (Entry.Kind) {
2670 case BitstreamEntry::SubBlock: // Handled for us already.
2672 return error("Malformed block");
2674 return Error::success();
2676 // The interesting case.
2677 break;
2678 }
2679
2680 // Read a record.
2681 Record.clear();
2682 ++NumMDRecordLoaded;
2683 Expected<unsigned> MaybeCode = Stream.readRecord(Entry.ID, Record);
2684 if (!MaybeCode)
2685 return MaybeCode.takeError();
2686 switch (MaybeCode.get()) {
2687 default: // Default behavior: ignore.
2688 break;
2689 case bitc::METADATA_KIND: {
2690 if (Error Err = parseMetadataKindRecord(Record))
2691 return Err;
2692 break;
2693 }
2694 }
2695 }
2696}
2697
2699 Pimpl = std::move(RHS.Pimpl);
2700 return *this;
2701}
2703 : Pimpl(std::move(RHS.Pimpl)) {}
2704
2707 BitcodeReaderValueList &ValueList,
2708 bool IsImporting,
2709 MetadataLoaderCallbacks Callbacks)
2710 : Pimpl(std::make_unique<MetadataLoaderImpl>(
2711 Stream, TheModule, ValueList, std::move(Callbacks), IsImporting)) {}
2712
2713Error MetadataLoader::parseMetadata(bool ModuleLevel) {
2714 return Pimpl->parseMetadata(ModuleLevel);
2715}
2716
2717bool MetadataLoader::hasFwdRefs() const { return Pimpl->hasFwdRefs(); }
2718
2719/// Return the given metadata, creating a replaceable forward reference if
2720/// necessary.
2722 return Pimpl->getMetadataFwdRefOrLoad(Idx);
2723}
2724
2726 return Pimpl->lookupSubprogramForFunction(F);
2727}
2728
2730 Function &F, ArrayRef<Instruction *> InstructionList) {
2731 return Pimpl->parseMetadataAttachment(F, InstructionList);
2732}
2733
2735 return Pimpl->parseMetadataKinds();
2736}
2737
2738void MetadataLoader::setStripTBAA(bool StripTBAA) {
2739 return Pimpl->setStripTBAA(StripTBAA);
2740}
2741
2742bool MetadataLoader::isStrippingTBAA() { return Pimpl->isStrippingTBAA(); }
2743
2744unsigned MetadataLoader::size() const { return Pimpl->size(); }
2745void MetadataLoader::shrinkTo(unsigned N) { return Pimpl->shrinkTo(N); }
2746
2748 return Pimpl->upgradeDebugIntrinsics(F);
2749}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements a class to represent arbitrary precision integral constant values and operations...
ReachingDefInfo InstSet & ToRemove
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
#define LLVM_UNLIKELY(EXPR)
Definition Compiler.h:336
#define LLVM_LIKELY(EXPR)
Definition Compiler.h:335
This file contains the declarations for the subclasses of Constant, which represent the different fla...
dxil translate DXIL Translate Metadata
This file defines the DenseMap class.
This file defines the DenseSet and SmallDenseSet classes.
This file contains constants used for implementing Dwarf debug support.
Module.h This file contains the declarations for the Module class.
static bool lookup(const GsymReader &GR, GsymDataExtractor &Data, uint64_t &Offset, uint64_t BaseAddr, uint64_t Addr, SourceLocations &SrcLocs, llvm::Error &Err)
A Lookup helper functions.
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
#define GET_OR_DISTINCT(CLASS, ARGS)
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
static cl::opt< bool > DisableLazyLoading("disable-ondemand-mds-loading", cl::init(false), cl::Hidden, cl::desc("Force disable the lazy-loading on-demand of metadata when " "loading bitcode for importing."))
static Value * getValueFwdRef(BitcodeReaderValueList &ValueList, unsigned Idx, Type *Ty, unsigned TyID)
static int64_t unrotateSign(uint64_t U)
static cl::opt< bool > ImportFullTypeDefinitions("import-full-type-definitions", cl::init(false), cl::Hidden, cl::desc("Import full type definitions for ThinLTO."))
Flag whether we need to import full type definitions for ThinLTO.
This file contains the declarations for metadata subclasses.
Type::TypeID TypeID
#define T
BaseType
A given derived pointer can have multiple base pointers through phi/selects.
static bool parseMetadata(const StringRef &Input, uint64_t &FunctionHash, uint32_t &Attributes)
Parse Input that contains metadata.
This file implements a set that has insertion order iteration characteristics.
This file defines the SmallString class.
This file defines the SmallVector class.
This file defines the 'Statistic' class, which is designed to be an easy way to expose various metric...
#define STATISTIC(VARNAME, DESC)
Definition Statistic.h:171
#define LLVM_DEBUG(...)
Definition Debug.h:114
#define error(X)
std::pair< llvm::MachO::Target, std::string > UUID
Metadata * getMetadataFwdRefOrLoad(unsigned ID)
Error parseMetadataAttachment(Function &F, ArrayRef< Instruction * > InstructionList)
Parse metadata attachments.
MetadataLoaderImpl(BitstreamCursor &Stream, Module &TheModule, BitcodeReaderValueList &ValueList, MetadataLoaderCallbacks Callbacks, bool IsImporting)
Error parseMetadataKinds()
Parse the metadata kinds out of the METADATA_KIND_BLOCK.
Error parseMetadata(bool ModuleLevel)
Parse a METADATA_BLOCK.
DISubprogram * lookupSubprogramForFunction(Function *F)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
size_t size() const
size - Get the array size.
Definition ArrayRef.h:142
Value * getValueFwdRef(unsigned Idx, Type *Ty, unsigned TyID, BasicBlock *ConstExprInsertBB)
Definition ValueList.cpp:50
unsigned size() const
Definition ValueList.h:48
This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor.
Error JumpToBit(uint64_t BitNo)
Reset the stream to the specified bit number.
uint64_t GetCurrentBitNo() const
Return the bit # of the bit we are reading.
LLVM_ABI Expected< unsigned > readRecord(unsigned AbbrevID, SmallVectorImpl< uint64_t > &Vals, StringRef *Blob=nullptr)
LLVM_ABI Expected< unsigned > skipRecord(unsigned AbbrevID)
Read the current record and discard it, returning the code for the record.
@ AF_DontPopBlockAtEnd
If this flag is used, the advance() method does not automatically pop the block scope when the end of...
static ConstantAsMetadata * get(Constant *C)
Definition Metadata.h:537
static LLVM_ABI DIArgList * get(LLVMContext &Context, ArrayRef< ValueAsMetadata * > Args)
static DIAssignID * getDistinct(LLVMContext &Context)
static LLVM_ABI DICompositeType * buildODRType(LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, Metadata *SizeInBits, uint32_t AlignInBits, Metadata *OffsetInBits, Metadata *Specification, uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements, unsigned RuntimeLang, std::optional< uint32_t > EnumKind, Metadata *VTableHolder, Metadata *TemplateParams, Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated, Metadata *Allocated, Metadata *Rank, Metadata *Annotations, Metadata *BitStride)
Build a DICompositeType with the given ODR identifier.
MDString * getRawIdentifier() const
ChecksumKind
Which algorithm (e.g.
A scope for locals.
DIFlags
Debug info flags.
LLVM_ABI DIScope * getScope() const
Subprogram description. Uses SubclassData1.
void cleanupRetainedNodes()
When IR modules are merged, typically during LTO, the merged module may contain several types having ...
static DILocalScope * getRetainedNodeScope(MDNode *N)
static LLVM_ABI DISPFlags toSPFlags(bool IsLocalToUnit, bool IsDefinition, bool IsOptimized, unsigned Virtuality=SPFlagNonvirtual, bool IsMainSubprogram=false)
DISPFlags
Debug info subprogram flags.
bool isForwardDecl() const
Record of a variable value-assignment, aka a non instruction representation of the dbg....
DenseMapIterator< KeyT, ValueT, KeyInfoT, BucketT > iterator
Definition DenseMap.h:74
iterator begin()
Definition DenseMap.h:78
iterator end()
Definition DenseMap.h:81
Implements a dense probed hash-table based set.
Definition DenseSet.h:279
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
static ErrorSuccess success()
Create a success value.
Definition Error.h:336
Tagged union holding either a T or a Error.
Definition Error.h:485
Error takeError()
Take ownership of the stored error.
Definition Error.h:612
reference get()
Returns a reference to the stored T value.
Definition Error.h:582
LLVM_ABI void addMetadata(unsigned KindID, MDNode &MD)
Add a metadata attachment.
LLVM_ABI void addDebugInfo(DIGlobalVariableExpression *GV)
Attach a DIGlobalVariableExpression.
LLVM_ABI void setMetadata(unsigned KindID, MDNode *Node)
Set the metadata of the specified kind to the specified node.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
static LocalAsMetadata * get(Value *Local)
Definition Metadata.h:563
Metadata node.
Definition Metadata.h:1080
static MDTuple * getDistinct(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1580
bool isTemporary() const
Definition Metadata.h:1264
static TempMDTuple getTemporary(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1584
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1572
A single uniqued string.
Definition Metadata.h:722
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
Definition Metadata.cpp:614
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1529
static TempMDTuple getTemporary(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Return a temporary node.
Definition Metadata.h:1549
MetadataLoader(BitstreamCursor &Stream, Module &TheModule, BitcodeReaderValueList &ValueList, bool IsImporting, MetadataLoaderCallbacks Callbacks)
Metadata * getMetadataFwdRefOrLoad(unsigned Idx)
Return the given metadata, creating a replaceable forward reference if necessary.
void upgradeDebugIntrinsics(Function &F)
Perform bitcode upgrades on llvm.dbg.* calls.
void shrinkTo(unsigned N)
Error parseMetadataKinds()
Parse a METADATA_KIND block for the current module.
void setStripTBAA(bool StripTBAA=true)
Set the mode to strip TBAA metadata on load.
bool isStrippingTBAA()
Return true if the Loader is stripping TBAA metadata.
Error parseMetadataAttachment(Function &F, ArrayRef< Instruction * > InstructionList)
Parse a METADATA_ATTACHMENT block for a function.
DISubprogram * lookupSubprogramForFunction(Function *F)
Return the DISubprogram metadata for a Function if any, null otherwise.
MetadataLoader & operator=(MetadataLoader &&)
Root of the metadata hierarchy.
Definition Metadata.h:64
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition ArrayRef.h:298
iterator end() const
Definition ArrayRef.h:343
iterator begin() const
Definition ArrayRef.h:342
A tuple of MDNodes.
Definition Metadata.h:1760
iterator_range< op_iterator > operands()
Definition Metadata.h:1856
LLVM_ABI void addOperand(MDNode *M)
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
A vector that has set insertion semantics.
Definition SetVector.h:57
bool empty() const
Determine if the SetVector is empty or not.
Definition SetVector.h:100
bool insert(const value_type &X)
Insert a new element into the SetVector.
Definition SetVector.h:151
Implements a dense probed hash-table based set with some number of buckets stored inline.
Definition DenseSet.h:291
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
Definition SmallString.h:26
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void reserve(size_type N)
void append(ItTy in_start, ItTy in_end)
Add the specified range to the end of the SmallVector.
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
Definition StringRef.h:258
StringRef drop_front(size_t N=1) const
Return a StringRef equal to 'this' but with the first N elements dropped.
Definition StringRef.h:629
StringRef slice(size_t Start, size_t End) const
Return a reference to the substring from [Start, End).
Definition StringRef.h:714
constexpr size_t size() const
size - Get the string size.
Definition StringRef.h:143
bool contains(StringRef Other) const
Return true if the given string is a substring of *this, and false otherwise.
Definition StringRef.h:446
The TimeTraceScope is a helper class to call the begin and end functions of the time trace profiler.
Metadata * get() const
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
bool isVoidTy() const
Return true if this is 'void'.
Definition Type.h:141
bool isMetadataTy() const
Return true if this is 'metadata'.
Definition Type.h:233
static LLVM_ABI ValueAsMetadata * get(Value *V)
Definition Metadata.cpp:509
LLVM Value Representation.
Definition Value.h:75
std::pair< iterator, bool > insert(const ValueT &V)
Definition DenseSet.h:202
An efficient, type-erasing, non-owning reference to a callable.
constexpr char LanguageVersion[]
Key for Kernel::Metadata::mLanguageVersion.
@ Entry
Definition COFF.h:862
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition CallingConv.h:24
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
@ METADATA_COMMON_BLOCK
@ METADATA_TEMPLATE_VALUE
@ METADATA_LEXICAL_BLOCK_FILE
@ METADATA_INDEX_OFFSET
@ METADATA_LEXICAL_BLOCK
@ METADATA_SUBROUTINE_TYPE
@ METADATA_GLOBAL_DECL_ATTACHMENT
@ METADATA_OBJC_PROPERTY
@ METADATA_IMPORTED_ENTITY
@ METADATA_GENERIC_SUBRANGE
@ METADATA_COMPILE_UNIT
@ METADATA_COMPOSITE_TYPE
@ METADATA_FIXED_POINT_TYPE
@ METADATA_DERIVED_TYPE
@ METADATA_SUBRANGE_TYPE
@ METADATA_TEMPLATE_TYPE
@ METADATA_GLOBAL_VAR_EXPR
@ METADATA_DISTINCT_NODE
@ METADATA_GENERIC_DEBUG
@ METADATA_KIND_BLOCK_ID
@ METADATA_ATTACHMENT_ID
initializer< Ty > init(const Ty &Val)
@ DW_OP_LLVM_fragment
Only used in LLVM metadata.
Definition Dwarf.h:144
@ DW_APPLE_ENUM_KIND_invalid
Enum kind for invalid results.
Definition Dwarf.h:51
NodeAddr< CodeNode * > Code
Definition RDFGraph.h:388
bool empty() const
Definition BasicBlock.h:101
iterator end() const
Definition BasicBlock.h:89
LLVM_ABI Instruction & back() const
LLVM_ABI iterator begin() const
This is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:557
FunctionAddr VTableAddr Value
Definition InstrProf.h:137
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
Definition STLExtras.h:1668
std::error_code make_error_code(BitcodeError E)
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
constexpr NextUseDistance min(NextUseDistance A, NextUseDistance B)
LLVM_ABI MDNode * upgradeInstructionLoopAttachment(MDNode &N)
Upgrade the loop attachment metadata node.
auto cast_or_null(const Y &Val)
Definition Casting.h:714
bool isa_and_nonnull(const Y &Val)
Definition Casting.h:676
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
FunctionAddr VTableAddr uintptr_t uintptr_t Version
Definition InstrProf.h:334
bool mayBeOldLoopAttachmentTag(StringRef Name)
Check whether a string looks like an old loop attachment tag.
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:207
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
Definition Error.cpp:163
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
MutableArrayRef(T &OneElt) -> MutableArrayRef< T >
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
Definition Error.h:340
@ Ref
The access may reference the value stored in memory.
Definition ModRef.h:32
constexpr NextUseDistance max(NextUseDistance A, NextUseDistance B)
DWARFExpression::Operation Op
ArrayRef(const T &OneElt) -> ArrayRef< T >
std::string toString(const APInt &I, unsigned Radix, bool Signed, bool formatAsCLiteral=false, bool UpperCase=true, bool InsertSeparators=false)
constexpr unsigned BitWidth
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1916
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
LLVM_ABI APInt readWideAPInt(ArrayRef< uint64_t > Vals, unsigned TypeBits)
LLVM_ABI MDNode * UpgradeTBAANode(MDNode &TBAANode)
If the given TBAA tag uses the scalar TBAA format, create a new node corresponding to the upgrade to ...
static auto filterDbgVars(iterator_range< simple_ilist< DbgRecord >::iterator > R)
Filter the DbgRecord range to DbgVariableRecord types only and downcast.
void consumeError(Error Err)
Consume a Error without doing anything.
Definition Error.h:1106
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:870
#define N
When advancing through a bitstream cursor, each advance can discover a few different kinds of entries...